From: Matteo F. Vescovi Date: Tue, 21 Jun 2016 20:05:59 +0000 (+0100) Subject: Import babl_0.1.18.orig.tar.bz2 X-Git-Tag: archive/raspbian/1%0.1.96-1+rpi1~1^2^2^2^2~1 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=37dffe58ead240c7c54288d9e8ea72018d8bb5b3;p=babl.git Import babl_0.1.18.orig.tar.bz2 [dgit import orig babl_0.1.18.orig.tar.bz2] --- 37dffe58ead240c7c54288d9e8ea72018d8bb5b3 diff --git a/AUTHORS b/AUTHORS new file mode 100644 index 0000000..ae2fec2 --- /dev/null +++ b/AUTHORS @@ -0,0 +1,74 @@ +
+
Øyvind Kolås pippin at gimp.org
+
Original author.
+
Sven Neumann sven at gimp.org
+
Build sanity and optimizations.
+
Michael Natterer mitch at gimp.org
+
Build sanity.
+
Kevin Cozens kcozens at cvs.gnome.org
+
Build sanity.
+
Tim Mooney
+
Portability fixes.
+
Michael Schumacher schumaml at cvs.gnome.org
+
win32 support for dynamic extensions.
+
Portability fixes.
+
Jan Heller jheller at svn.gnome.org
+
Optimizations, refactoring and documentation.
+
Mukund Sivaraman muks at mukund.org
+
Sparse fixes and sanity.
+
dmacks at netspace.org
+
Build sanity
+
Sam Hocevar
+
Build sanity.
+
Zhang Junbo
+
Frequency domain color model.
+
Martin Nordholts
+
Optimizations and API overhaul.
+
Gary V. Vaughan
+
Multiplatform build support.
+
Stanislav Brabec
+
Portability patch.
+
Hubert Figuiere
+
C++ friendliness patch.
+
Danny Robson
+
Code cleanups.
+
Fryderyk Dziarmagowski freetz at gmx.net
+
Code cleanups.
+
Daniel Paredes García danipga at gmail.com
+
Initial work to make babl threadsafe
+
Rupert Weber gimp at leguanease.org
+
Documentation and other improvements
+
Jehan jehan at girinstud.io
+
win32 portabilitiy
+
Sven Claussner
+
Update DOAP file
+
Alexander Larsson
+
Math optimizations
+
Nils Philippsen
+
code cleanups
+
Simon Budig
+
cleanups
+ +
Micheal Muré +
portability fixes
+ +
Maxime Nicco
+
HSV color model extension
+
Teo Mazars
+
Color spaces/models in extensions
+
Daniel Sabo
+
Dead code elimination, general cleanups,
+
Michael Henning
+
Conversion fixes
+
Elle Stone
+
Verification and improvements to accuracy of color space + conversions.
+
Thomas Manni
+
CIE related fixupsRoman Lebedev +
Stability/crasher fixes
+
Jon Nordby
+
Portability, Stability and more
+
Massimo Valentini
+
stability fixes
+
diff --git a/COPYING b/COPYING new file mode 100644 index 0000000..fc8a5de --- /dev/null +++ b/COPYING @@ -0,0 +1,165 @@ + GNU LESSER GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + + This version of the GNU Lesser General Public License incorporates +the terms and conditions of version 3 of the GNU General Public +License, supplemented by the additional permissions listed below. + + 0. Additional Definitions. + + As used herein, "this License" refers to version 3 of the GNU Lesser +General Public License, and the "GNU GPL" refers to version 3 of the GNU +General Public License. + + "The Library" refers to a covered work governed by this License, +other than an Application or a Combined Work as defined below. + + An "Application" is any work that makes use of an interface provided +by the Library, but which is not otherwise based on the Library. +Defining a subclass of a class defined by the Library is deemed a mode +of using an interface provided by the Library. + + A "Combined Work" is a work produced by combining or linking an +Application with the Library. The particular version of the Library +with which the Combined Work was made is also called the "Linked +Version". + + The "Minimal Corresponding Source" for a Combined Work means the +Corresponding Source for the Combined Work, excluding any source code +for portions of the Combined Work that, considered in isolation, are +based on the Application, and not on the Linked Version. + + The "Corresponding Application Code" for a Combined Work means the +object code and/or source code for the Application, including any data +and utility programs needed for reproducing the Combined Work from the +Application, but excluding the System Libraries of the Combined Work. + + 1. Exception to Section 3 of the GNU GPL. + + You may convey a covered work under sections 3 and 4 of this License +without being bound by section 3 of the GNU GPL. + + 2. Conveying Modified Versions. + + If you modify a copy of the Library, and, in your modifications, a +facility refers to a function or data to be supplied by an Application +that uses the facility (other than as an argument passed when the +facility is invoked), then you may convey a copy of the modified +version: + + a) under this License, provided that you make a good faith effort to + ensure that, in the event an Application does not supply the + function or data, the facility still operates, and performs + whatever part of its purpose remains meaningful, or + + b) under the GNU GPL, with none of the additional permissions of + this License applicable to that copy. + + 3. Object Code Incorporating Material from Library Header Files. + + The object code form of an Application may incorporate material from +a header file that is part of the Library. You may convey such object +code under terms of your choice, provided that, if the incorporated +material is not limited to numerical parameters, data structure +layouts and accessors, or small macros, inline functions and templates +(ten or fewer lines in length), you do both of the following: + + a) Give prominent notice with each copy of the object code that the + Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the object code with a copy of the GNU GPL and this license + document. + + 4. Combined Works. + + You may convey a Combined Work under terms of your choice that, +taken together, effectively do not restrict modification of the +portions of the Library contained in the Combined Work and reverse +engineering for debugging such modifications, if you also do each of +the following: + + a) Give prominent notice with each copy of the Combined Work that + the Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the Combined Work with a copy of the GNU GPL and this license + document. + + c) For a Combined Work that displays copyright notices during + execution, include the copyright notice for the Library among + these notices, as well as a reference directing the user to the + copies of the GNU GPL and this license document. + + d) Do one of the following: + + 0) Convey the Minimal Corresponding Source under the terms of this + License, and the Corresponding Application Code in a form + suitable for, and under terms that permit, the user to + recombine or relink the Application with a modified version of + the Linked Version to produce a modified Combined Work, in the + manner specified by section 6 of the GNU GPL for conveying + Corresponding Source. + + 1) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (a) uses at run time + a copy of the Library already present on the user's computer + system, and (b) will operate properly with a modified version + of the Library that is interface-compatible with the Linked + Version. + + e) Provide Installation Information, but only if you would otherwise + be required to provide such information under section 6 of the + GNU GPL, and only to the extent that such information is + necessary to install and execute a modified version of the + Combined Work produced by recombining or relinking the + Application with a modified version of the Linked Version. (If + you use option 4d0, the Installation Information must accompany + the Minimal Corresponding Source and Corresponding Application + Code. If you use option 4d1, you must provide the Installation + Information in the manner specified by section 6 of the GNU GPL + for conveying Corresponding Source.) + + 5. Combined Libraries. + + You may place library facilities that are a work based on the +Library side by side in a single library together with other library +facilities that are not Applications and are not covered by this +License, and convey such a combined library under terms of your +choice, if you do both of the following: + + a) Accompany the combined library with a copy of the same work based + on the Library, uncombined with any other library facilities, + conveyed under the terms of this License. + + b) Give prominent notice with the combined library that part of it + is a work based on the Library, and explaining where to find the + accompanying uncombined form of the same work. + + 6. Revised Versions of the GNU Lesser General Public License. + + The Free Software Foundation may publish revised and/or new versions +of the GNU Lesser General Public License from time to time. Such new +versions will be similar in spirit to the present version, but may +differ in detail to address new problems or concerns. + + Each version is given a distinguishing version number. If the +Library as you received it specifies that a certain numbered version +of the GNU Lesser General Public License "or any later version" +applies to it, you have the option of following the terms and +conditions either of that published version or of any later version +published by the Free Software Foundation. If the Library as you +received it does not specify a version number of the GNU Lesser +General Public License, you may choose any version of the GNU Lesser +General Public License ever published by the Free Software Foundation. + + If the Library as you received it specifies that a proxy can decide +whether future versions of the GNU Lesser General Public License shall +apply, that proxy's public statement of acceptance of any version is +permanent authorization for you to choose that version for the +Library. diff --git a/INSTALL b/INSTALL new file mode 100644 index 0000000..1ca5875 --- /dev/null +++ b/INSTALL @@ -0,0 +1,21 @@ + +babl 0.1.18 + + Dynamic; any to any, pixel format conversion library. + +----------------------------------------------------------------------- + +Installation instructions: +-------------------------- + +From a released version the following is the expected method of +installation (or a variation on this theme): + + ------------------------------------------------------------ + foo$ wget ftp://ftp.gtk.org/pub/babl/0.1/babl-0.1.18.tar.bz2 + foo$ tar jxf babl-0.1.18.tar.gz + foo$ cd babl-0.1.18 + foo/babl-0.1.18$ ./configure && make && sudo make install + ------------------------------------------------------------ + + diff --git a/INSTALL.in b/INSTALL.in new file mode 100644 index 0000000..5fa1570 --- /dev/null +++ b/INSTALL.in @@ -0,0 +1,21 @@ + +babl @BABL_VERSION@ + + Dynamic; any to any, pixel format conversion library. + +----------------------------------------------------------------------- + +Installation instructions: +-------------------------- + +From a released version the following is the expected method of +installation (or a variation on this theme): + + ------------------------------------------------------------ + foo$ wget ftp://ftp.gtk.org/pub/babl/0.1/babl-@BABL_VERSION@.tar.bz2 + foo$ tar jxf babl-@BABL_VERSION@.tar.gz + foo$ cd babl-@BABL_VERSION@ + foo/babl-@BABL_VERSION@$ ./configure && make && sudo make install + ------------------------------------------------------------ + + diff --git a/Makefile.am b/Makefile.am new file mode 100644 index 0000000..e46014c --- /dev/null +++ b/Makefile.am @@ -0,0 +1,53 @@ +ACLOCAL_AMFLAGS = -I m4 ${ACLOCAL_FLAGS} + +SUBDIRS = \ + babl \ + extensions \ + tests \ + tools + +if ENABLE_DOCS +SUBDIRS+= docs +endif + +pkgconfigdir = $(libdir)/pkgconfig +pkgconfig_DATA = babl.pc + +built_dist_files = README + +EXTRA_DIST = \ + $(built_dist_files) \ + AUTHORS \ + COPYING \ + INSTALL \ + NEWS \ + TODO \ + autogen.sh \ + babl.pc.in + +DISTCLEANFILES = \ + $(built_dist_files) \ + babl.pc + +.PHONY: snapshot + + +if HAVE_W3M +README: all docs/index.html + $(W3M) -cols 72 -dump docs/index.html > $@ +else +README: + @echo "*** w3m must be available in order to make dist" + @false +endif + +snapshot: + $(MAKE) dist distdir=$(PACKAGE)-`date +"%Y%m%d"` +snapcheck: + $(MAKE) distcheck distdir=$(PACKAGE)-`date +"%Y%m%d"` + +distclean-local: + if test $(srcdir) = .; then :; else \ + rm -f $(BUILT_EXTRA_DIST); \ + fi + diff --git a/Makefile.in b/Makefile.in new file mode 100644 index 0000000..5186c19 --- /dev/null +++ b/Makefile.in @@ -0,0 +1,939 @@ +# Makefile.in generated by automake 1.15 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2014 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +VPATH = @srcdir@ +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +@ENABLE_DOCS_TRUE@am__append_1 = docs +subdir = . +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(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)/acinclude.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(top_srcdir)/configure \ + $(am__configure_deps) $(am__DIST_COMMON) +am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ + configure.lineno config.status.lineno +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = config.h +CONFIG_CLEAN_FILES = babl.pc INSTALL +CONFIG_CLEAN_VPATH_FILES = +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +SOURCES = +DIST_SOURCES = +RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ + ctags-recursive dvi-recursive html-recursive info-recursive \ + install-data-recursive install-dvi-recursive \ + install-exec-recursive install-html-recursive \ + install-info-recursive install-pdf-recursive \ + install-ps-recursive install-recursive installcheck-recursive \ + installdirs-recursive pdf-recursive ps-recursive \ + tags-recursive uninstall-recursive +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +am__installdirs = "$(DESTDIR)$(pkgconfigdir)" +DATA = $(pkgconfig_DATA) +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +am__recursive_targets = \ + $(RECURSIVE_TARGETS) \ + $(RECURSIVE_CLEAN_TARGETS) \ + $(am__extra_recursive_targets) +AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ + cscope distdir dist dist-all distcheck +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) \ + $(LISP)config.h.in +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +ETAGS = etags +CTAGS = ctags +CSCOPE = cscope +DIST_SUBDIRS = babl extensions tests tools docs +am__DIST_COMMON = $(srcdir)/INSTALL.in $(srcdir)/Makefile.in \ + $(srcdir)/babl.pc.in $(srcdir)/config.h.in AUTHORS COPYING \ + NEWS README TODO compile config.guess config.sub install-sh \ + ltmain.sh missing +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +distdir = $(PACKAGE)-$(VERSION) +top_distdir = $(distdir) +am__remove_distdir = \ + if test -d "$(distdir)"; then \ + find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ + && rm -rf "$(distdir)" \ + || { sleep 5 && rm -rf "$(distdir)"; }; \ + else :; fi +am__post_remove_distdir = $(am__remove_distdir) +am__relativize = \ + dir0=`pwd`; \ + sed_first='s,^\([^/]*\)/.*$$,\1,'; \ + sed_rest='s,^[^/]*/*,,'; \ + sed_last='s,^.*/\([^/]*\)$$,\1,'; \ + sed_butlast='s,/*[^/]*$$,,'; \ + while test -n "$$dir1"; do \ + first=`echo "$$dir1" | sed -e "$$sed_first"`; \ + if test "$$first" != "."; then \ + if test "$$first" = ".."; then \ + dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ + dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ + else \ + first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ + if test "$$first2" = "$$first"; then \ + dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ + else \ + dir2="../$$dir2"; \ + fi; \ + dir0="$$dir0"/"$$first"; \ + fi; \ + fi; \ + dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ + done; \ + reldir="$$dir2" +GZIP_ENV = --best +DIST_ARCHIVES = $(distdir).tar.bz2 +DIST_TARGETS = dist-bzip2 +distuninstallcheck_listfiles = find . -type f -print +am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \ + | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$' +distcleancheck_listfiles = find . -type f -print +ACLOCAL = @ACLOCAL@ +ALTIVEC_EXTRA_CFLAGS = @ALTIVEC_EXTRA_CFLAGS@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BABL_API_VERSION = @BABL_API_VERSION@ +BABL_BINARY_AGE = @BABL_BINARY_AGE@ +BABL_CURRENT_MINUS_AGE = @BABL_CURRENT_MINUS_AGE@ +BABL_INTERFACE_AGE = @BABL_INTERFACE_AGE@ +BABL_LIBRARY_VERSION = @BABL_LIBRARY_VERSION@ +BABL_MAJOR_VERSION = @BABL_MAJOR_VERSION@ +BABL_MICRO_VERSION = @BABL_MICRO_VERSION@ +BABL_MINOR_VERSION = @BABL_MINOR_VERSION@ +BABL_REAL_VERSION = @BABL_REAL_VERSION@ +BABL_RELEASE = @BABL_RELEASE@ +BABL_UNSTABLE = @BABL_UNSTABLE@ +BABL_VERSION = @BABL_VERSION@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DIR_SEP = @DIR_SEP@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F16C_EXTRA_CFLAGS = @F16C_EXTRA_CFLAGS@ +FGREP = @FGREP@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MATH_LIB = @MATH_LIB@ +MKDIR_P = @MKDIR_P@ +MMX_EXTRA_CFLAGS = @MMX_EXTRA_CFLAGS@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEP = @PATH_SEP@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +RANLIB = @RANLIB@ +RSVG = @RSVG@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHREXT = @SHREXT@ +SSE2_EXTRA_CFLAGS = @SSE2_EXTRA_CFLAGS@ +SSE4_1_EXTRA_CFLAGS = @SSE4_1_EXTRA_CFLAGS@ +SSE_EXTRA_CFLAGS = @SSE_EXTRA_CFLAGS@ +STRIP = @STRIP@ +THREAD_LIB = @THREAD_LIB@ +VERSION = @VERSION@ +W3M = @W3M@ +WEBSITE_HOST = @WEBSITE_HOST@ +WEBSITE_LOCATION = @WEBSITE_LOCATION@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +ACLOCAL_AMFLAGS = -I m4 ${ACLOCAL_FLAGS} +SUBDIRS = babl extensions tests tools $(am__append_1) +pkgconfigdir = $(libdir)/pkgconfig +pkgconfig_DATA = babl.pc +built_dist_files = README +EXTRA_DIST = \ + $(built_dist_files) \ + AUTHORS \ + COPYING \ + INSTALL \ + NEWS \ + TODO \ + autogen.sh \ + babl.pc.in + +DISTCLEANFILES = \ + $(built_dist_files) \ + babl.pc + +all: config.h + $(MAKE) $(AM_MAKEFLAGS) all-recursive + +.SUFFIXES: +am--refresh: Makefile + @: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \ + $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + echo ' $(SHELL) ./config.status'; \ + $(SHELL) ./config.status;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + $(SHELL) ./config.status --recheck + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + $(am__cd) $(srcdir) && $(AUTOCONF) +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) +$(am__aclocal_m4_deps): + +config.h: stamp-h1 + @test -f $@ || rm -f stamp-h1 + @test -f $@ || $(MAKE) $(AM_MAKEFLAGS) stamp-h1 + +stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status + @rm -f stamp-h1 + cd $(top_builddir) && $(SHELL) ./config.status config.h +$(srcdir)/config.h.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) + rm -f stamp-h1 + touch $@ + +distclean-hdr: + -rm -f config.h stamp-h1 +babl.pc: $(top_builddir)/config.status $(srcdir)/babl.pc.in + cd $(top_builddir) && $(SHELL) ./config.status $@ +INSTALL: $(top_builddir)/config.status $(srcdir)/INSTALL.in + cd $(top_builddir) && $(SHELL) ./config.status $@ + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +distclean-libtool: + -rm -f libtool config.lt +install-pkgconfigDATA: $(pkgconfig_DATA) + @$(NORMAL_INSTALL) + @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(pkgconfigdir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(pkgconfigdir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgconfigdir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgconfigdir)" || exit $$?; \ + done + +uninstall-pkgconfigDATA: + @$(NORMAL_UNINSTALL) + @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(pkgconfigdir)'; $(am__uninstall_files_from_dir) + +# This directory's subdirectories are mostly independent; you can cd +# into them and run 'make' without going through this Makefile. +# To change the values of 'make' variables: instead of editing Makefiles, +# (1) if the variable is set in 'config.status', edit 'config.status' +# (which will cause the Makefiles to be regenerated when you run 'make'); +# (2) otherwise, pass the desired values on the 'make' command line. +$(am__recursive_targets): + @fail=; \ + if $(am__make_keepgoing); then \ + failcom='fail=yes'; \ + else \ + failcom='exit 1'; \ + fi; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-recursive +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: ctags-recursive + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscope: cscope.files + test ! -s cscope.files \ + || $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS) +clean-cscope: + -rm -f cscope.files +cscope.files: clean-cscope cscopelist +cscopelist: cscopelist-recursive + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + -rm -f cscope.out cscope.in.out cscope.po.out cscope.files + +distdir: $(DISTFILES) + $(am__remove_distdir) + test -d "$(distdir)" || mkdir "$(distdir)" + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + $(am__make_dryrun) \ + || test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ + $(am__relativize); \ + new_distdir=$$reldir; \ + dir1=$$subdir; dir2="$(top_distdir)"; \ + $(am__relativize); \ + new_top_distdir=$$reldir; \ + echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ + echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ + ($(am__cd) $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$new_top_distdir" \ + distdir="$$new_distdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + am__skip_mode_fix=: \ + distdir) \ + || exit 1; \ + fi; \ + done + -test -n "$(am__skip_mode_fix)" \ + || find "$(distdir)" -type d ! -perm -755 \ + -exec chmod u+rwx,go+rx {} \; -o \ + ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ + ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ + ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ + || chmod -R a+r "$(distdir)" +dist-gzip: distdir + tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz + $(am__post_remove_distdir) +dist-bzip2: distdir + tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2 + $(am__post_remove_distdir) + +dist-lzip: distdir + tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz + $(am__post_remove_distdir) + +dist-xz: distdir + tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz + $(am__post_remove_distdir) + +dist-tarZ: distdir + @echo WARNING: "Support for distribution archives compressed with" \ + "legacy program 'compress' is deprecated." >&2 + @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 + tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z + $(am__post_remove_distdir) + +dist-shar: distdir + @echo WARNING: "Support for shar distribution archives is" \ + "deprecated." >&2 + @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 + shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz + $(am__post_remove_distdir) + +dist-zip: distdir + -rm -f $(distdir).zip + zip -rq $(distdir).zip $(distdir) + $(am__post_remove_distdir) + +dist dist-all: + $(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:' + $(am__post_remove_distdir) + +# This target untars the dist file and tries a VPATH configuration. Then +# it guarantees that the distribution is self-contained by making another +# tarfile. +distcheck: dist + case '$(DIST_ARCHIVES)' in \ + *.tar.gz*) \ + GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\ + *.tar.bz2*) \ + bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ + *.tar.lz*) \ + lzip -dc $(distdir).tar.lz | $(am__untar) ;;\ + *.tar.xz*) \ + xz -dc $(distdir).tar.xz | $(am__untar) ;;\ + *.tar.Z*) \ + uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ + *.shar.gz*) \ + GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\ + *.zip*) \ + unzip $(distdir).zip ;;\ + esac + chmod -R a-w $(distdir) + chmod u+w $(distdir) + mkdir $(distdir)/_build $(distdir)/_build/sub $(distdir)/_inst + chmod a-w $(distdir) + test -d $(distdir)/_build || exit 0; \ + dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ + && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ + && am__cwd=`pwd` \ + && $(am__cd) $(distdir)/_build/sub \ + && ../../configure \ + $(AM_DISTCHECK_CONFIGURE_FLAGS) \ + $(DISTCHECK_CONFIGURE_FLAGS) \ + --srcdir=../.. --prefix="$$dc_install_base" \ + && $(MAKE) $(AM_MAKEFLAGS) \ + && $(MAKE) $(AM_MAKEFLAGS) dvi \ + && $(MAKE) $(AM_MAKEFLAGS) check \ + && $(MAKE) $(AM_MAKEFLAGS) install \ + && $(MAKE) $(AM_MAKEFLAGS) installcheck \ + && $(MAKE) $(AM_MAKEFLAGS) uninstall \ + && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ + distuninstallcheck \ + && chmod -R a-w "$$dc_install_base" \ + && ({ \ + (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ + distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ + } || { rm -rf "$$dc_destdir"; exit 1; }) \ + && rm -rf "$$dc_destdir" \ + && $(MAKE) $(AM_MAKEFLAGS) dist \ + && rm -rf $(DIST_ARCHIVES) \ + && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ + && cd "$$am__cwd" \ + || exit 1 + $(am__post_remove_distdir) + @(echo "$(distdir) archives ready for distribution: "; \ + list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ + sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' +distuninstallcheck: + @test -n '$(distuninstallcheck_dir)' || { \ + echo 'ERROR: trying to run $@ with an empty' \ + '$$(distuninstallcheck_dir)' >&2; \ + exit 1; \ + }; \ + $(am__cd) '$(distuninstallcheck_dir)' || { \ + echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \ + exit 1; \ + }; \ + test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \ + || { echo "ERROR: files left after uninstall:" ; \ + if test -n "$(DESTDIR)"; then \ + echo " (check DESTDIR support)"; \ + fi ; \ + $(distuninstallcheck_listfiles) ; \ + exit 1; } >&2 +distcleancheck: distclean + @if test '$(srcdir)' = . ; then \ + echo "ERROR: distcleancheck can only run from a VPATH build" ; \ + exit 1 ; \ + fi + @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ + || { echo "ERROR: files left in build directory after distclean:" ; \ + $(distcleancheck_listfiles) ; \ + exit 1; } >&2 +check-am: all-am +check: check-recursive +all-am: Makefile $(DATA) config.h +installdirs: installdirs-recursive +installdirs-am: + for dir in "$(DESTDIR)$(pkgconfigdir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-recursive + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-recursive + -rm -f $(am__CONFIG_DISTCLEAN_FILES) + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-hdr \ + distclean-libtool distclean-local distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +html-am: + +info: info-recursive + +info-am: + +install-data-am: install-pkgconfigDATA + +install-dvi: install-dvi-recursive + +install-dvi-am: + +install-exec-am: + +install-html: install-html-recursive + +install-html-am: + +install-info: install-info-recursive + +install-info-am: + +install-man: + +install-pdf: install-pdf-recursive + +install-pdf-am: + +install-ps: install-ps-recursive + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f $(am__CONFIG_DISTCLEAN_FILES) + -rm -rf $(top_srcdir)/autom4te.cache + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: uninstall-pkgconfigDATA + +.MAKE: $(am__recursive_targets) all install-am install-strip + +.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \ + am--refresh check check-am clean clean-cscope clean-generic \ + clean-libtool cscope cscopelist-am ctags ctags-am dist \ + dist-all dist-bzip2 dist-gzip dist-lzip dist-shar dist-tarZ \ + dist-xz dist-zip distcheck distclean distclean-generic \ + distclean-hdr distclean-libtool distclean-local distclean-tags \ + distcleancheck distdir distuninstallcheck dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-pkgconfigDATA install-ps install-ps-am install-strip \ + installcheck installcheck-am installdirs installdirs-am \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags tags-am uninstall uninstall-am uninstall-pkgconfigDATA + +.PRECIOUS: Makefile + + +.PHONY: snapshot + +@HAVE_W3M_TRUE@README: all docs/index.html +@HAVE_W3M_TRUE@ $(W3M) -cols 72 -dump docs/index.html > $@ +@HAVE_W3M_FALSE@README: +@HAVE_W3M_FALSE@ @echo "*** w3m must be available in order to make dist" +@HAVE_W3M_FALSE@ @false + +snapshot: + $(MAKE) dist distdir=$(PACKAGE)-`date +"%Y%m%d"` +snapcheck: + $(MAKE) distcheck distdir=$(PACKAGE)-`date +"%Y%m%d"` + +distclean-local: + if test $(srcdir) = .; then :; else \ + rm -f $(BUILT_EXTRA_DIST); \ + fi + +# 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. +.NOEXPORT: diff --git a/NEWS b/NEWS new file mode 100644 index 0000000..a993e33 --- /dev/null +++ b/NEWS @@ -0,0 +1,109 @@ +
+2016-06-13 babl-0.1.18
+Bugfix: take alpha threshold in consideration when processing floats in SSE2. +
+2016-02-12 babl-0.1.16
+Improvements to half float reference, SIMD, and fast-paths, and CIE float fast +paths; cleanups of fast path extensions. +
+2015-11-19 babl-0.1.14
+sRGB precision tuning, stability fixes, locale fix for setting error tolerance. +
+2015-02-03 babl-0.1.12
+optimizations for floating point conversions, HSV and HSL color models, +removal of dead code, fixed CIE Lab conversions. +
+2012-03-30 babl-0.1.10
+LUT based speedups for gamma correction / uncorrection. +
+2012-03-30 babl-0.1.8
+Added support for indexed/pallette based formats, constified API. +
+2011-11-18 babl-0.1.6
+Build improvements, remove blatantly wrong conversions from extensions, +made it possible to distinguish format_n formats from others, improvements +to vala/gobject introspection support. + +
+2011-01-20 babl-0.1.4
+Improved cross platform build ability, added code to handle n-component formats, +remove extraenous runtime profiling that impacted performance. + +
+2010-01-15 babl-0.1.2
+Made babl mostly threadsafe (sufficient for GIMP/GEGLs needs). Streamlined core functionality, reducing number of function calls and removing overeager instrumentation. +
+2009-05-20 babl-0.1.0
+Support for RGBA representation in the frequency domain, +un-pre-multiply close-to-zero alpha values to complete black instead +of slightly brighter than black, add a BABL_ALPHA_THRESHOLD constant +to the API, do a complete overhaul of the babl API and do some +changes to increase portability of the library. +
+2008-06-12 babl-0.0.22
+Speed improvements due to: coalesced hashing, early bail out upon creation of +duplicate formats, caching of non existing paths. Large amounts of the core has +also been reviewed and refactored. Improved conversion coverage in the matrix. +
+2008-02-27 babl-0.0.20
+Builds on OSX +Check <0.0 and >1.0 values conversions for accuracy as well. + +
+ + diff --git a/README b/README new file mode 100644 index 0000000..8fed1c2 --- /dev/null +++ b/README @@ -0,0 +1,2197 @@ +Babl-0.1.18 + +Contents + + • Babl + • Features + • Download + • Documentation + • Usage + • Vocabulary + • Shortcut Coverage + • Environment + • Extending + • Directory Overview + • Todo + • Copyright + • Authors + + +babl is a dynamic, any to any, pixel format translation library. + +It allows converting between different methods of storing pixels known +as pixel formats that have with different bitdepths and other data +representations, color models and component permutations. + +A vocabulary to formulate new pixel formats from existing primitives is +provided as well as the framework to add new color models and data +types. + +Features + + • Fast. + • Accurate. + • Stable, small API. + • Self profiling and optimizing. + • ANSI C, works on win32, linux and mac, 32bit and 64bit systems. + • Extendable with new formats, color models, components and + datatypes. + • Reference 64bit floating point conversions for datatypes and color + models. + +GEGL through GeglBuffer provides tiled buffers with on disk storage as +well as linear buffers with accessor functions for efficient data +access transparently using babl fishes for translation to the desired +pixel formats. + +Download + +The latest versioned development version of babl can be found in ftp:// +ftp.gtk.org/pub/babl/. + +Babl uses git. The main repository is hosted by GNOME. It can be +browsed online and cloned with: + +git clone git://git.gnome.org/babl + +The following is a list of the major changes that have gone into each +babl release. If there are significant improvements to babl when a GEGL +release is done a babl release is most often put out just prior to the +GEGL release. + +2016-06-13 babl-0.1.18 + Bugfix: take alpha threshold in consideration when processing + floats in SSE2. +2016-02-12 babl-0.1.16 + Improvements to half float reference, SIMD, and fast-paths, and CIE + float fast paths; cleanups of fast path extensions. +2015-11-19 babl-0.1.14 + sRGB precision tuning, stability fixes, locale fix for setting + error tolerance. +2015-02-03 babl-0.1.12 + optimizations for floating point conversions, HSV and HSL color + models, removal of dead code, fixed CIE Lab conversions. +2012-03-30 babl-0.1.10 + LUT based speedups for gamma correction / uncorrection. +2012-03-30 babl-0.1.8 + Added support for indexed/pallette based formats, constified API. +2011-11-18 babl-0.1.6 + Build improvements, remove blatantly wrong conversions from + extensions, made it possible to distinguish format_n formats from + others, improvements to vala/gobject introspection support. +2011-01-20 babl-0.1.4 + Improved cross platform build ability, added code to handle + n-component formats, remove extraenous runtime profiling that + impacted performance. +2010-01-15 babl-0.1.2 + Made babl mostly threadsafe (sufficient for GIMP/GEGLs needs). + Streamlined core functionality, reducing number of function calls + and removing overeager instrumentation. +2009-05-20 babl-0.1.0 + Support for RGBA representation in the frequency domain, + un-pre-multiply close-to-zero alpha values to complete black + instead of slightly brighter than black, add a BABL_ALPHA_THRESHOLD + constant to the API, do a complete overhaul of the babl API and do + some changes to increase portability of the library. +2008-06-12 babl-0.0.22 + Speed improvements due to: coalesced hashing, early bail out upon + creation of duplicate formats, caching of non existing paths. Large + amounts of the core has also been reviewed and refactored. Improved + conversion coverage in the matrix. +2008-02-27 babl-0.0.20 + Builds on OSX Check <0.0 and >1.0 values conversions for accuracy + as well. + +For more news see git log. + +Documentation + +When using BablFishes to do your conversions, you request a fish to +convert between two formats, and an optimal fish to babls capability is +provided that you can use to do your conversions. Babl also provides +the capability to describe new formats based on a vocabulary of user +registered color models and data types. + +Babl provides a base vocabulary in BablBase and some extensions that +are thought to be generally useful. + +When performing further extensions to the vocabulary of babl, the +internal consistency is governed by reference conversions that operate +on double (64 bit floating point values). The only color model created +during BablCore bootstrap is RGBA (linear light RGB, 0.0 - 1.0, with a +linear 0.0 - 1.0 opacity channel) backed by the double datatype. +Defined similarily to scRGB using 64bit floating point. + +If babls conversion isn't fast enough, you can provide your own +conversion shortcut between two formats. The registered shortcut might +also be used by babl as an intermediate conversion when constructing +BablFishes for other conversions. + +Babl extensions are shared objects. If you have already developed some +fast conversion functions, wrapping them as babl extensions should not +take much time and will speed up babl for other users as well. + +Usage + +babl_process (babl_fish (source_format, destination_format), + source_buffer, destination_buffer, + pixel_count); + +The processing operation that babl performs is copying including +conversions if needed between linear buffers containing the same count +of pixels, with different pixel formats. + +int width = 123, height = 581, pixel_count = width * height; + +const Babl *srgb = babl_format ("R'G'B' u8"); +const Babl *lab = babl_format ("CIE Lab float"); +const Babl *srgb_to_lab_fish = babl_fish (srgb, lab); + +float *lab_buffer; +unsigned char *srgb_buffer; + +babl_init (); + +srgb_buffer = malloc (pixel_count * babl_format_get_bytes_per_pixel (srgb)); +lab_buffer = malloc (pixel_count * 3 * sizeof (float)); + +...... load data into srgb_buffer ....... + +babl_process (srgb_to_lab_fish, srgb_buffer, lab_buffer, pixel_count); + +...... do operation in lab space ........ + +babl_process (babl_fish(lab, srgb), + lab_buffer, srgb_buffer, pixel_count); + +/* the data has now been transformed back to srgb data */ + +If the existing pixel formats are not sufficient for your conversion +needs, new ones can be created on the fly. The constructor will provide +the prior created one if duplicates are registered. + +const Babl *format = babl_format_new (babl_model ("R'G'B'"), + babl_type ("u16"), + babl_component ("B'"), + babl_component ("G'"), + babl_component ("R'"), + NULL); + +Vocabulary + + ++- +Data types +double + +bits + 64 +bytes + 8 + +u15 + +bits + 16 +bytes + 2 + +half + +bits + 16 +bytes + 2 + +float + +bits + 32 +bytes + 4 + +u8 + +bits + 8 +bytes + 1 + +u8-luma + +bits + 8 +bytes + 1 + +u8-chroma + +bits + 8 +bytes + 1 + +u16 + +bits + 16 +bytes + 2 + +u32 + +bits + 32 +bytes + 4 + +CIE u8 L + +bits + 8 +bytes + 1 + +CIE u8 ab + +bits + 8 +bytes + 1 + +CIE u16 L + +bits + 16 +bytes + 2 + +CIE u16 ab + +bits + 16 +bytes + 2 + +Color models +RGBA + +components + + R + G + B + A + +RGB + +components + + R + G + B + +RaGaBaA + +components + + Ra + Ga + Ba + A + +R'G'B' + +components + + R' + G' + B' + +R'G'B'A + +components + + R' + G' + B' + A + +R'aG'aB'aA + +components + + R'a + G'a + B'a + A + +Y + +components + + Y + +YA + +components + + Y + A + +YaA + +components + + Ya + A + +Y' + +components + + Y' + +Y'A + +components + + Y' + A + +Y'aA + +components + + Y'a + A + +Y'CbCr + +components + + Y' + Cb + Cr + +Y'CbCrA + +components + + Y' + Cb + Cr + A + +HSLA + +components + + hue + saturation + lightness + alpha + +HSL + +components + + hue + saturation + lightness + +HSVA + +components + + hue + saturation + value + alpha + +HSV + +components + + hue + saturation + value + +Y'CbCr709 + +components + + Y' + Cb + Cr + +Y'CbCrA709 + +components + + Y' + Cb + Cr + alpha + +CMYK + +components + + cyan + magenta + yellow + key + +CMY + +components + + cyan + magenta + yellow + +CIE Lab + +components + + CIE L + CIE a + CIE b + +CIE Lab alpha + +components + + CIE L + CIE a + CIE b + A + +CIE LCH(ab) + +components + + CIE L + CIE C(ab) + CIE H(ab) + +CIE LCH(ab) alpha + +components + + CIE L + CIE C(ab) + CIE H(ab) + A + +Pixel formats +RGBA double + +bytes/pixel + 32 +model + RGBA +components + + double R + double G + double B + double A + +RGB double + +bytes/pixel + 24 +model + RGB +components + + double R + double G + double B + +RaGaBaA double + +bytes/pixel + 32 +model + RaGaBaA +components + + double Ra + double Ga + double Ba + double A + +R'G'B' double + +bytes/pixel + 24 +model + R'G'B' +components + + double R' + double G' + double B' + +R'G'B'A double + +bytes/pixel + 32 +model + R'G'B'A +components + + double R' + double G' + double B' + double A + +R'aG'aB'aA double + +bytes/pixel + 32 +model + R'aG'aB'aA +components + + double R'a + double G'a + double B'a + double A + +R'G'B' u8 + +bytes/pixel + 3 +model + R'G'B' +components + + u8 R' + u8 G' + u8 B' + +R'G'B'A u8 + +bytes/pixel + 4 +model + R'G'B'A +components + + u8 R' + u8 G' + u8 B' + u8 A + +RGBA float + +bytes/pixel + 16 +model + RGBA +components + + float R + float G + float B + float A + +RGB float + +bytes/pixel + 12 +model + RGB +components + + float R + float G + float B + +RGB half + +bytes/pixel + 6 +model + RGB +components + + half R + half G + half B + +RGBA half + +bytes/pixel + 8 +model + RGBA +components + + half R + half G + half B + half A + +RaGaBaA half + +bytes/pixel + 8 +model + RaGaBaA +components + + half Ra + half Ga + half Ba + half A + +R'G'B' half + +bytes/pixel + 6 +model + R'G'B' +components + + half R' + half G' + half B' + +R'G'B'A half + +bytes/pixel + 8 +model + R'G'B'A +components + + half R' + half G' + half B' + half A + +R'aG'aB'aA half + +bytes/pixel + 8 +model + R'aG'aB'aA +components + + half R'a + half G'a + half B'a + half A + +RGB u15 + +bytes/pixel + 6 +model + RGB +components + + u15 R + u15 G + u15 B + +RGBA u15 + +bytes/pixel + 8 +model + RGBA +components + + u15 R + u15 G + u15 B + u15 A + +RaGaBaA u15 + +bytes/pixel + 8 +model + RaGaBaA +components + + u15 Ra + u15 Ga + u15 Ba + u15 A + +R'G'B' u15 + +bytes/pixel + 6 +model + R'G'B' +components + + u15 R' + u15 G' + u15 B' + +R'G'B'A u15 + +bytes/pixel + 8 +model + R'G'B'A +components + + u15 R' + u15 G' + u15 B' + u15 A + +R'aG'aB'aA u15 + +bytes/pixel + 8 +model + R'aG'aB'aA +components + + u15 R'a + u15 G'a + u15 B'a + u15 A + +RGB u32 + +bytes/pixel + 12 +model + RGB +components + + u32 R + u32 G + u32 B + +RGBA u32 + +bytes/pixel + 16 +model + RGBA +components + + u32 R + u32 G + u32 B + u32 A + +RaGaBaA u32 + +bytes/pixel + 16 +model + RaGaBaA +components + + u32 Ra + u32 Ga + u32 Ba + u32 A + +R'G'B' u32 + +bytes/pixel + 12 +model + R'G'B' +components + + u32 R' + u32 G' + u32 B' + +R'G'B'A u32 + +bytes/pixel + 16 +model + R'G'B'A +components + + u32 R' + u32 G' + u32 B' + u32 A + +R'aG'aB'aA u32 + +bytes/pixel + 16 +model + R'aG'aB'aA +components + + u32 R'a + u32 G'a + u32 B'a + u32 A + +Y double + +bytes/pixel + 8 +model + Y +components + + double Y + +YA double + +bytes/pixel + 16 +model + YA +components + + double Y + double A + +YaA double + +bytes/pixel + 16 +model + YaA +components + + double Ya + double A + +Y' double + +bytes/pixel + 8 +model + Y' +components + + double Y' + +Y'A double + +bytes/pixel + 16 +model + Y'A +components + + double Y' + double A + +Y'aA double + +bytes/pixel + 16 +model + Y'aA +components + + double Y'a + double A + +YA half + +bytes/pixel + 4 +model + YA +components + + half Y + half A + +YaA half + +bytes/pixel + 4 +model + YaA +components + + half Ya + half A + +Y half + +bytes/pixel + 2 +model + Y +components + + half Y + +Y'A half + +bytes/pixel + 4 +model + Y'A +components + + half Y' + half A + +Y'aA half + +bytes/pixel + 4 +model + Y'aA +components + + half Y'a + half A + +Y' half + +bytes/pixel + 2 +model + Y' +components + + half Y' + +YA u15 + +bytes/pixel + 4 +model + YA +components + + u15 Y + u15 A + +YaA u15 + +bytes/pixel + 4 +model + YaA +components + + u15 Ya + u15 A + +Y u15 + +bytes/pixel + 2 +model + Y +components + + u15 Y + +Y'A u15 + +bytes/pixel + 4 +model + Y'A +components + + u15 Y' + u15 A + +Y'aA u15 + +bytes/pixel + 4 +model + Y'aA +components + + u15 Y'a + u15 A + +Y' u15 + +bytes/pixel + 2 +model + Y' +components + + u15 Y' + +YA u32 + +bytes/pixel + 8 +model + YA +components + + u32 Y + u32 A + +YaA u32 + +bytes/pixel + 8 +model + YaA +components + + u32 Ya + u32 A + +Y u32 + +bytes/pixel + 4 +model + Y +components + + u32 Y + +Y'A u32 + +bytes/pixel + 8 +model + Y'A +components + + u32 Y' + u32 A + +Y'aA u32 + +bytes/pixel + 8 +model + Y'aA +components + + u32 Y'a + u32 A + +Y' u32 + +bytes/pixel + 4 +model + Y' +components + + u32 Y' + +Y'CbCr double + +bytes/pixel + 24 +model + Y'CbCr +components + + double Y' + double Cb + double Cr + +Y'CbCrA double + +bytes/pixel + 32 +model + Y'CbCrA +components + + double Y' + double Cb + double Cr + double A + +Y'CbCr u8 + +bytes/pixel + 3 +model + Y'CbCr +components + + u8-luma Y' + u8-chroma Cb + u8-chroma Cr + +R'G'B'A float + +bytes/pixel + 16 +model + R'G'B'A +components + + float R' + float G' + float B' + float A + +R'G'B'A u16 + +bytes/pixel + 8 +model + R'G'B'A +components + + u16 R' + u16 G' + u16 B' + u16 A + +R'aG'aB'aA float + +bytes/pixel + 16 +model + R'aG'aB'aA +components + + float R'a + float G'a + float B'a + float A + +R'aG'aB'aA u16 + +bytes/pixel + 8 +model + R'aG'aB'aA +components + + u16 R'a + u16 G'a + u16 B'a + u16 A + +R'aG'aB'aA u8 + +bytes/pixel + 4 +model + R'aG'aB'aA +components + + u8 R'a + u8 G'a + u8 B'a + u8 A + +R'G'B' float + +bytes/pixel + 12 +model + R'G'B' +components + + float R' + float G' + float B' + +R'G'B' u16 + +bytes/pixel + 6 +model + R'G'B' +components + + u16 R' + u16 G' + u16 B' + +Y'A float + +bytes/pixel + 8 +model + Y'A +components + + float Y' + float A + +Y'aA float + +bytes/pixel + 8 +model + Y'aA +components + + float Y'a + float A + +Y' float + +bytes/pixel + 4 +model + Y' +components + + float Y' + +Y'A u16 + +bytes/pixel + 4 +model + Y'A +components + + u16 Y' + u16 A + +Y'aA u16 + +bytes/pixel + 4 +model + Y'aA +components + + u16 Y'a + u16 A + +Y' u16 + +bytes/pixel + 2 +model + Y' +components + + u16 Y' + +Y'A u8 + +bytes/pixel + 2 +model + Y'A +components + + u8 Y' + u8 A + +Y'aA u8 + +bytes/pixel + 2 +model + Y'aA +components + + u8 Y'a + u8 A + +Y' u8 + +bytes/pixel + 1 +model + Y' +components + + u8 Y' + +Y'CbCr float + +bytes/pixel + 12 +model + Y'CbCr +components + + float Y' + float Cb + float Cr + +Y'CbCrA float + +bytes/pixel + 16 +model + Y'CbCrA +components + + float Y' + float Cb + float Cr + float A + +RGBA u16 + +bytes/pixel + 8 +model + RGBA +components + + u16 R + u16 G + u16 B + u16 A + +RGBA u8 + +bytes/pixel + 4 +model + RGBA +components + + u8 R + u8 G + u8 B + u8 A + +RaGaBaA float + +bytes/pixel + 16 +model + RaGaBaA +components + + float Ra + float Ga + float Ba + float A + +RaGaBaA u16 + +bytes/pixel + 8 +model + RaGaBaA +components + + u16 Ra + u16 Ga + u16 Ba + u16 A + +RaGaBaA u8 + +bytes/pixel + 4 +model + RaGaBaA +components + + u8 Ra + u8 Ga + u8 Ba + u8 A + +RGB u16 + +bytes/pixel + 6 +model + RGB +components + + u16 R + u16 G + u16 B + +RGB u8 + +bytes/pixel + 3 +model + RGB +components + + u8 R + u8 G + u8 B + +YA float + +bytes/pixel + 8 +model + YA +components + + float Y + float A + +YaA float + +bytes/pixel + 8 +model + YaA +components + + float Ya + float A + +Y float + +bytes/pixel + 4 +model + Y +components + + float Y + +YA u16 + +bytes/pixel + 4 +model + YA +components + + u16 Y + u16 A + +YaA u16 + +bytes/pixel + 4 +model + YaA +components + + u16 Ya + u16 A + +Y u16 + +bytes/pixel + 2 +model + Y +components + + u16 Y + +YA u8 + +bytes/pixel + 2 +model + YA +components + + u8 Y + u8 A + +YaA u8 + +bytes/pixel + 2 +model + YaA +components + + u8 Ya + u8 A + +Y u8 + +bytes/pixel + 1 +model + Y +components + + u8 Y + +HSLA double + +bytes/pixel + 32 +model + HSLA +components + + double hue + double saturation + double lightness + double alpha + +HSL double + +bytes/pixel + 24 +model + HSL +components + + double hue + double saturation + double lightness + +HSLA float + +bytes/pixel + 16 +model + HSLA +components + + float hue + float saturation + float lightness + float alpha + +HSL float + +bytes/pixel + 12 +model + HSL +components + + float hue + float saturation + float lightness + +HSVA double + +bytes/pixel + 32 +model + HSVA +components + + double hue + double saturation + double value + double alpha + +HSV double + +bytes/pixel + 24 +model + HSV +components + + double hue + double saturation + double value + +HSVA float + +bytes/pixel + 16 +model + HSVA +components + + float hue + float saturation + float value + float alpha + +HSV float + +bytes/pixel + 12 +model + HSV +components + + float hue + float saturation + float value + +Y'CbCr709 double + +bytes/pixel + 24 +model + Y'CbCr709 +components + + double Y' + double Cb + double Cr + +Y'CbCrA709 double + +bytes/pixel + 32 +model + Y'CbCrA709 +components + + double Y' + double Cb + double Cr + double alpha + +Y'CbCrA709 float + +bytes/pixel + 16 +model + Y'CbCrA709 +components + + float Y' + float Cb + float Cr + float alpha + +Y'CbCr709 float + +bytes/pixel + 12 +model + Y'CbCr709 +components + + float Y' + float Cb + float Cr + +CMYK double + +bytes/pixel + 32 +model + CMYK +components + + double cyan + double magenta + double yellow + double key + +CMY double + +bytes/pixel + 24 +model + CMY +components + + double cyan + double magenta + double yellow + +CMYK float + +bytes/pixel + 16 +model + CMYK +components + + float cyan + float magenta + float yellow + float key + +CMY float + +bytes/pixel + 12 +model + CMY +components + + float cyan + float magenta + float yellow + +CMYK u8 + +bytes/pixel + 4 +model + CMYK +components + + u8 cyan + u8 magenta + u8 yellow + u8 key + +B'aG'aR'aA u8 + +bytes/pixel + 4 +model + R'aG'aB'aA +components + + u8 B'a + u8 G'a + u8 R'a + u8 A + +cairo-ARGB32 + +bytes/pixel + 4 +model + R'aG'aB'aA +components + + u8 B'a + u8 G'a + u8 R'a + u8 A + +cairo-RGB24 + +bytes/pixel + 4 +model + R'G'B' +components + + u8 B' + u8 G' + u8 R' + u8 PAD + +cairo-A8 + +bytes/pixel + 1 +model + YA +components + + u8 A + +CIE Lab double + +bytes/pixel + 24 +model + CIE Lab +components + + double CIE L + double CIE a + double CIE b + +CIE Lab alpha double + +bytes/pixel + 32 +model + CIE Lab alpha +components + + double CIE L + double CIE a + double CIE b + double A + +CIE LCH(ab) double + +bytes/pixel + 24 +model + CIE LCH(ab) +components + + double CIE L + double CIE C(ab) + double CIE H(ab) + +CIE LCH(ab) alpha double + +bytes/pixel + 32 +model + CIE LCH(ab) alpha +components + + double CIE L + double CIE C(ab) + double CIE H(ab) + double A + +CIE Lab float + +bytes/pixel + 12 +model + CIE Lab +components + + float CIE L + float CIE a + float CIE b + +CIE Lab alpha float + +bytes/pixel + 16 +model + CIE Lab alpha +components + + float CIE L + float CIE a + float CIE b + float A + +CIE L alpha float + +bytes/pixel + 8 +model + CIE Lab alpha +components + + float CIE L + float A + +CIE Lab u8 + +bytes/pixel + 3 +model + CIE Lab +components + + CIE u8 L CIE L + CIE u8 ab CIE a + CIE u8 ab CIE b + +CIE Lab u16 + +bytes/pixel + 6 +model + CIE Lab +components + + CIE u16 L CIE L + CIE u16 ab CIE a + CIE u16 ab CIE b + +CIE LCH(ab) float + +bytes/pixel + 12 +model + CIE LCH(ab) +components + + float CIE L + float CIE C(ab) + float CIE H(ab) + +CIE LCH(ab) alpha float + +bytes/pixel + 16 +model + CIE LCH(ab) alpha +components + + float CIE L + float CIE C(ab) + float CIE H(ab) + float A + +Shortcut Coverage + +The diagram shown below visualizes the coverage of current shortcut +conversions. Dots indicate a direct conversion is provided for, the +height of the bar indicates the number of conversions steps needed in a +chain of conversions. A DHTML version is also available. + + + ▂·▃▂·▁▂▁ ▃▂ ·· ·▂ ▂▃ ▃ ·· ▁▂▂▃▃▂▃▂▃▂▃ ▃▂ ▃ ▁▁▁▂▂▂▂▁▂▁▂▃▂▂▃▂·· ·· ·· ·· ▃▃ ····▂▁▂ ── 0 RGBA double + ── 1 RGB double + ── 2 RaGaBaA double + ── 3 R'G'B' double +▂ ▃▂▁▁▂▃▂ ▂▁ ▃▃ ▃▃ ▃ ▃▃ ·▁▁▂▂▁▂▃ ▃ ▃ ▃ ▂▂▂▃▃▃▃▂▃▂▃ ▃▃ ▃▃▃ ▃▃ ▃▃ ▃▃ ▃▂ ▃▃▃▃▃▂▃ ── 4 R'G'B'A double +· ▂▃▁▂▃▂ ▃ ▁▁ ▁▃ ▃ ▁▁ ▂▃ ▃ ▃ ▃ ▃ ▃ ▂▂▂▃▃▃▃▂▃▃▃ ▃▃ ▃▁▁ ▁▁ ▁▁ ▁▁ ▂ ▁▁▁▁▃▂▃ ── 5 R'aG'aB'aA double +▁ ▁ ···▁▁ ▁▁ ▂▂ ▂▂ ▂▃ ▃ ▂▂ ▁▁▁▁···▂▃▂▃ ▃▂ ▃ ▁▁·▁▂▁▁▁▂▁▂▃▂▂▃▂▂▂ ▂▂ ▂▂ ▂▂ ▁· ▂▂▂▂▁▁▂ ── 6 R'G'B' u8 +▁ ▁▂ ·▁▂▁ ▂▁ ▂▂ ▂▂ ▂▃ ▃ ▂▂ ··▁▂▂▁▁▂▃▂▃ ▃▂ ▃ ▁▁▁▂▂▁▂▁▂▁▂▃▂▂ ▂▂▂ ▂▂ ▂▂ ▂▂ ▃· ▂▂▂▂▂▁▂ ── 7 R'G'B'A u8 +· ▁▁▂ ·▁· ▂▁ ▁▁ ▁▁ ▁▂ ▂ ▁▁ ·▁▁▂▂▁▂▁▂▁▂▃▂▂▃▂ ···▁▁▁▁·▁·▁▂▁▁▂▁▁▁ ▁▁ ▁▁ ▁▁ ▃▂ ▁▁▁▁▁·▁ ── 8 RGBA float +▁ ▂▂▁▂ ·▁ ▁▂ ▂▂ ▂▂ ▂▃ ▃ ▂▂ ▁▂▁▂▂·▁▂▃▂▃ ▃▃ ▃ ▁▁·▁▁··▁▂▁▃▃▂▂▃▂▂▂ ▂▂ ▂▂ ▂▂ ▃▂ ▂▂▂▂·▁▂ ── 9 RGB float +▂ ▃▃▂▃▁ ▂ ▂▃ ▃▃ ▃▃ ▃ ▃▃ ▂▃▂▃▃▁▂▃ ▃ ▃ ▃ ▂▂▁▂▂ ▁▃▃▂▃ ▃▃ ▃▃▃ ▃▃ ▃▃ ▃▃ ▃▃ ▃▃▃▃▁▂▃ ──10 RGB half +▁ ▂▂▃▂·▁ ▃▂ ▂▂ ▂▂ ▂▃ ▃ ▂▂ ▁▂▂▃▃▂▃▂▃▂▃ ▃▃ ▃ ▁▁▁▂▂▂▂▁▂▁▂▃▂▂▃▂▂▂ ▂▂ ▂▂ ▂▂ ▃▃ ▂▂▂▂▂▁▂ ──11 RGBA half + ──12 RaGaBaA half +▃ ▂ ▁▂▂▁▂▃ ▂ ▁▂▁▂▂· ▃▃▂▃▃▂▂▃ ▃ ▃ ▃▂ ▂▃ ──13 R'G'B' half +▂ ▁▃▂▁▁▂▃▂ ▃▃ ▃▃ ▃ ▃▃ ·▁▁▂▂▁▂▃ ▃ ▃ ▃ ▂▂▂▃▃▃▃▂▃▂▃ ▃▃ ▃▃▃ ▃▃ ▃▃ ▃▃ ▃▂ ▃▃▃▃▃▂▃ ──14 R'G'B'A half + ──15 R'aG'aB'aA half + ──16 RGB u15 + ──17 RGBA u15 + ──18 RaGaBaA u15 + ──19 R'G'B' u15 + ──20 R'G'B'A u15 + ──21 R'aG'aB'aA u15 + ──22 RGB u32 + ──23 RGBA u32 + ──24 RaGaBaA u32 + ──25 R'G'B' u32 + ──26 R'G'B'A u32 + ──27 R'aG'aB'aA u32 +· ▃▁▂▃▁▂▃▂ ▃ ▁ ▁▃ ▁▁ ▂▃▃▃▃▃ ▃ ▃ ▃ ▃ ▂▂▂▃▃▃▃▂▃ ▃ ▃ ▁▁ ▁▁ ▁▁ ▁▁ ▂ ▁▁▁▁▃▂▃ ──28 Y double +· ▃▁▂▃▁▂▃▂ ▃ ▁ ▃ ▁▁ ▂▃▃▃▃▃ ▃ ▃ ▃ ▃ ▂▂▂▃▃▃▃ ▃▂ ▃▃ ▃▁▁ ▁▁ ▁▁ ▁▁ ▂ ▁▁▁▁▃▂▃ ──29 YA double + ──30 YaA double + ──31 Y' double + ──32 Y'A double +· ▃▁▂▃▁▂▃▂ ▃ ▁▁ ▃ ▃ ▁▁ ▂▃▃▃▃▃ ▃ ▃ ▃ ▃ ▂▂▂▃▃▃▃▂▃▂▃ ▃▃ ▃▁▁ ▁▁ ▁▁ ▁▁ ▂ ▁▁▁▁▃▂▃ ──33 Y'aA double +▂ ▃▃▃▃▁▂▃▂ ▃ ▃ ▂▂ ▃ ▃▃ ▂▃▃▃▃▃ ▁▂▂▂▃▃▂▃▃ ▂▂▂▃▃▃▃·▁▁ ▂▂▁▂▂▃▃ ▃▃ ▃▃ ▃▃ ▃ ▃▃▃▃▃▂▁ ──34 YA half + ──35 YaA half +▃ ▃▃▂▁▂▃ ▃ ▂ ▃ ▂ ▃ ▃ ▃▂▃▂▂▁▃▃▂▃▃▂ ▃▃▂▃▃▂▂▁▁·▂▂ ▂▂▁ ▃▂ ▂▃▂ ──36 Y half +▃ ▂ ▃▂▂▃ ▃ ▃▂ ▂ ▂ ▁▂▂▃▃▂▃·▁▁ ▃▂▁▂▂ ▃▃▃ ▃▁▂▂▂▃▃▂▃▃ ▃ ▃▂ ──37 Y'A half + ──38 Y'aA half + ▃ ▂▃▃▂▃ ▂▃ ▃ ▂▂ ▂▃▂▃▃▁▂▁▁·▂▂▁▂▂▁ ▃ ▃▃▂▂▁▃▃▂▃▃▂ ▃▃ ▃ ▃ ──39 Y' half + ──40 YA u15 + ──41 YaA u15 + ──42 Y u15 + ──43 Y'A u15 + ──44 Y'aA u15 + ──45 Y' u15 + ──46 YA u32 + ──47 YaA u32 + ──48 Y u32 + ──49 Y'A u32 + ──50 Y'aA u32 + ──51 Y' u32 +· ▃▁▂▃▁▂▃▂ ▃ ▁▁ ▁▃ ▃ ▁ ▂▃▃▃▃▃ ▃ ▃ ▃ ▃ ▂▂▂▃▃▃▃▂▃▂▃ ▃▃ ▃▁▁ ▁▁ ▁▁ ▁▁ ▂ ▁▁▁▁▃▂▃ ──52 Y'CbCr double +· ▃▁▂▃▁▂▃▂ ▃ ▁▁ ▁▃ ▃ ▂▃▃▃▃▃ ▃ ▃ ▃ ▃ ▂▂▂▃▃▃▃▂▃▂▃ ▃▃ ▃▁▁ ▁▁ ▁▁ ▁▁ ▂ ▁▁▁▁▃▂▃ ──53 Y'CbCrA double + ──54 Y'CbCr u8 +▁ ·▂▁··▁▂▁ ▁· ▂▂ ▃▂ ▂▃ ▃ ▂▂ ··▁▁·▁▂▃▂▃ ▃▂ ▃ ▁▁▁▂▂▂▂▁▂▁▂▃▂▂▃▂▂▂ ▂▂ ▂▂ ▂▂ ▂▁ ▂▂▂▂▂▁▂ ──55 R'G'B'A float +▂ ▁▃▂▁▁▂▃▂ ▂▁ ▃▃ ▃▃ ▃ ▃▃ ·▁▁▁▁▃ ▃ ▃ ▃ ▂▂▂▃▃▂▃▂▃▂▃ ▃▃ ▃▃▃ ▃▃ ▃▃ ▃▃ ▃▂ ▃▃▃▃▃▂▃ ──56 R'G'B'A u16 +▂ ▁ ▂▁▁▂▃▂ ▂▁ ▃▃ ▃▃ ▃ ▃▃ · ··▁▂▃ ▃ ▃ ▃ ▂▂▂▃▃▃▃▂▃▂▃ ▃▃ ▃▃▃ ▃▃ ▃▃ ▃▃ ▁▂ ▃▃▃▃▃▂▃ ──57 R'aG'aB'aA float +▃ ▂ ▃▂▂▃▃▃ ▃▂ ▃▃ ▃▃ ▃ ▃▃ ▁▂ ·▂▂▃ ▃ ▃ ▃ ▃▃▃▃▃▃▃▃▃▃▃ ▃▃ ▃▃▃ ▃▃ ▃▃ ▃▃ ▁▃ ▃▃▃▃▃▃▃ ──58 R'aG'aB'aA u16 +▃ ▂ ▂▃ ▃ ▃▂ ▁▂· ▂▂ ▃▃▃ ▃▃▃▃ ▃ ▃ · ▃ ──59 R'aG'aB'aA u8 +▂ ▁▃·▁▁·▁▂ ·▁ ▃▃ ▃▃ ▃ ▃▃ ·▁·▁ ·▃ ▃ ▃ ▃ ▂▂▁▂▂▁▁▂▃▂▃ ▃▃ ▃▃▃ ▃▃ ▃▃ ▃▃ ▂▁ ▃▃▃▃▁▂▃ ──60 R'G'B' float +▃ ▂ ·▁▂▁▂▃ ▁▂ ▁▂▁▂▁ ▃▃▂▃▃▃▂▃ ▃ ▃ ▃▁ ▂▃ ──61 R'G'B' u16 +▂ ▁▃▂▁▁▂▃▂ ▂▁ ▃▃ ▃▁ ▂· ▁ ▃▃ ·▁▁▂▂▁ ···▂▁·▁▁ ▂▂▂▃▃▃▃·▁▁▁▂▂▁▂▂▃▃ ▃▃ ▃▃ ▃▃ ▃▃ ▃▃▃▃▃▂▁ ──62 Y'A float +▃ ▂ ▃▂▂▃ ▃ ▃▂ ▂ ▃▁ ▂ ▁▂·▁▁▂▃ ▁▁▁▂▁·▂ ▃▃▃ ▃▁▂▂▂▃▃▂▃▃ ▂▃ ▃▂ ──63 Y'aA float +▃ ▂ ▁▂▂▁▂▃ ▁▂ ▂ ▁▁ · ▁▂▁▂▂·▁· ▁▁·▁▁· ▃▃▂▃▃▂▂▁▁·▂▂▁▂▂▁ ▃▂ ▂▃▂ ──64 Y' float +▃ ▂ ▃▃▂▃ ▃ ▃▂ ▃▂ ▃▁ ▂ ▁▂▂▃▃▂▂·▂ ▃▂·▃▃ ▃▃▃ ▃▃▃▁▂▂▂▃▃▂▃▃ ▃▃ ▃▂ ──65 Y'A u16 + ▃ ▃▃ ▃ ▂ ▃ ▂▃▁▂▂▃ ▁·▂ ▃▂▁▃ ▃ ▃ ▃ ──66 Y'aA u16 + ▃ ▃▃▃▂▃ ▂▃ ▃ ▂▂ ▁ ▂▃▂▃▃▁▃▁▁·▂ ▃▃· ▃ ▃▃▂▂▁▃▃▂▃▃▂ ▂▃ ▃ ▃ ──67 Y' u16 +▁ ▂▂▃▂·▂▂▁ ▃▂ ▂▂ ▃▁ ▂▁ ▂ ▂▃ ▁▃▂▃▃▂▂·▁▁·▃ ▂▂ ▁▁▁▂▂▁▃·▁▁▁▂▂▁▂▂▂▂ ▂▂ ▂▂ ▂▂ ▃▃ ▃▂▂▂▃▂▁ ──68 Y'A u8 + ▃ ▃ ▃ ▃ ▂ ▃ ▂▃▁▂▂▃ ▁·▂▂·▃ ▃▃▃ ▃ ▃ ──69 Y'aA u8 +▁ ▃▂▂▃·▁▂▁ ▂▃ ▂▂ ▂▂ ▁▂ ▁ ▂▂ ▂▃▂▃▃▁▃▁▁·▃▃·▂ ▁▁▁▂▂▁▂▁▁·▂▂▁▂▂▁▂▂ ▂▂ ▂▂ ▂▂ ▃▃ ▂▂▂▂▂▁▂ ──70 Y' u8 +▃ ▂ ▁▂▂▁▂▃ ▁▂ ▁▂▁▂▂·▁ ▃▃▂▃▃▂▂▃ ▃ ▃ ▃▂ ▂▃ ──71 Y'CbCr float +▂ ▁▃▂▁▁▂▃▂ ▂▁ ▃▃ ▃▃ ▃ ▃ ·▁▁▂▂▁▂▃ ▃ ▃ ▃ ▂▂▂▃▃▃▃▂▃▂▃ ▃▃ ▃▃▃ ▃▃ ▃▃ ▃▃ ▃▂ ▃▃▃▃▃▂▃ ──72 Y'CbCrA float +▁ ▂▂▃▂·▁▂▁ ▃▂ ▂▂ ▂▂ ▂▃ ▃ ▂▂ ▁▂▂▃▃▂▂▂▃▂▃ ▃▃ ▃ ▁·▁▂▁▂▁▂▁▂▃▂▂▃▂▂▂ ▂▂ ▂▂ ▂▂ ▃▃ ▂▂▂▂▂▁▂ ──73 RGBA u16 +▁ ▂▂▃▂·▁▂▁ ▃▂ ▂▂ ▂▂ ▂▃ ▃ ▂▂ ▁▂▂▃▃▂▂▂▃▂▃ ▃▂ ▃ ·▁▁▁·▁▂▂▂▃▂▂▃▂▂▂ ▂▂ ▂▂ ▂▂ ▃▃ ▂▂▂▂▂▁▂ ──74 RGBA u8 +▁ ▂▂▃▂·▁▂▁ ▃▂ ▂▂ ▂▂ ▂▃ ▃ ▂▂ ▁▂▂▃▃▂▃▂▃▂▃ ▃▂ ▃ ▁ ··▂▂▁▂▁▂▃▂▂▃▂▂▂ ▂▂ ▂▂ ▂▂ ▃▃ ▂▂▂▂▂▁▂ ──75 RaGaBaA float +▂ ▃▃▂▃▁▂▃▂ ▃ ▃▃ ▃▃ ▃ ▃▃ ▂▃▃▃▃▃▃▃ ▃ ▃ ▃ ▂▂ ·▂▃▂▃▂▃ ▃▃ ▃▃▃ ▃▃ ▃▃ ▃▃ ▃▂ ▃▃▃▃▃▂▃ ──76 RaGaBaA u16 +▂ ▃▃▂▃▁▂▃▂ ▃ ▃▃ ▃▃ ▃ ▃▃ ▂▃▃▃▃▃▃▃ ▃ ▃ ▃ ▂ · ▂ ▂▃▂▃ ▃▃ ▃▃▃ ▃▃ ▃▃ ▃▃ ▃▂ ▃▃▃▃▃▂▃ ──77 RaGaBaA u8 +▂ ▃▃▂▃▁·▁▂ ▂▃ ▃▃ ▃▃ ▃ ▃▃ ▂▃▂▃▃▁▃▃ ▃ ▃ ▃ ▂▁▁▂ ·▂▃▂▃ ▃▃ ▃▃▃ ▃▃ ▃▃ ▃▃ ▃▃ ▃▃▃▃▁▂▃ ──78 RGB u16 +▁ ▂▃▂▂··▁▁ ▂▂ ▂▂ ▂▂ ▂▃ ▃ ▂▃ ▁▂▂▃▃▁▂▂▃▂▃ ▃▃ ▃ ▁··▁· ▁▂▁▂▃▂▃▃▂▂▃ ▂▂ ▂▂ ▂▂ ▃▃ ▃▃▃▃▁▁▂ ──79 RGB u8 +▁ ▂▂▃▂·▁▂▁ ▃▂ ▂ ▃· ▁▁ ▂ ▂▂ ▁▂▂▃▃▂▃·▁▁▁▃▂▁▂▂ ▁▁▁▂▂▂ ···▁▁·▁▁▂▂ ▂▂ ▂▂ ▂▂ ▃▃ ▂▂▂▂▂▁· ──80 YA float +▂ ▃▃▃▃▁▂▃▂ ▃ ▃▃ ▃▃ ▃ ▃▃ ▂▃▃▃▃▃ ▃▃▃▂▃▃▂▃▃ ▂▂·▁▁▃▃ ▂▁·▂▁·▂▃▃ ▃▃ ▃▃ ▃▃ ▃▂ ▃▃▃▃▃▂▃ ──81 YaA float +▂ ▃▃▂▃▁·▁▂ ▂▃ ▃ ▃▁ ·▂ ▁ ▃▃ ▂▃▂▃▃▁▂▁▁·▂▂▁▂▃▁ ▂▂▁▂▂▁▁· ▁▁·▁▁·▃▃ ▃▃ ▃▃ ▃▃ ▃▃ ▃▃▃▃▁▂▁ ──82 Y float +▂ ▃▃▃▃▁▂▃▂ ▃ ▃▃ ▃▁ ▂▂ ▃ ▃▃ ▂▃▃▃▃▃▃▁▃▂▂▃▃▂▃▃ ▂▂▂▃▃▂▃·▁ ▂▂·▂▃▃▃ ▃▃ ▃▃ ▃▃ ▃▃▃▃▃▂▁ ──83 YA u16 +▃ ▃ ▂▃ ▃ ▃ ▃ ▂▃▃ ▂▃▃▃ ▃ ▃▃▁▂▂▃▃▃·▃ ▁▃ ▃ ▃▂ ──84 YaA u16 +▃ ▃ ▂▁▂▃ ▃ ▂ ▁▃ ▂ ▃ ▃ ▂▃▂▂▁▃▃▂▃▃▂ ▃▂▂▃▃▃▃▁▁·▂ ▃▃· ▂▃▂ ──85 Y u16 +▁ ▃▂▃▃·▂▂▁ ▃▃ ▂▂ ▂▁ ▂▂ ▃ ▂▂ ▂▃▃▃▃▃▃▁▂▂▂▃▃▂▃▃ ▂▁▁▂▂▃▃·▁▁·▂ ▂▂▂▂ ▃▂ ▂▃ ▂▂ ▃▃ ▂▃▂▃▃▂▁ ──86 YA u8 +▃ ▃ ▂▃ ▃ ▂ ▃▃ ▃ ▂▃▃ ▂▃▃▃ ▃ ▃ ▁▂▂▃ ▁·▂ · ▃ ▃▂ ──87 YaA u8 +▁ ▂▂▃▂·▁▂▁ ▃▂ ▂ ▂▂ ▁▃ ▂ ▂▂ ▃▂▃▃▃▂▃▂▂▁▃▃▂▃▃▂ ▂▁▁▃▂▃▂▁▁·▃▂·▂ ▂▂ ▂▂ ▂▂ ▂▂ ▃▃ ▂▂▂▂▂▁▂ ──88 Y u8 +· ▃▁▂▃▁▂▃▂ ▃ ▁▁ ▁▃ ▃ ▁▁ ▂▃▃▃▃▃ ▃ ▃ ▃ ▃ ▂▂▂▃▃▃▃▂▃▃▃ ▃▃ ▁ ▁▁ ▁▁ ▁▁ ▂ ▁▁▁▁▃▂▃ ──89 HSLA double +· ▃▁▂▃▁▂▃▂ ▃ ▁▁ ▁▃ ▃ ▁▁ ▂▃▃▃▃▃ ▃ ▃ ▃ ▃ ▂▂▂▃▃▃▃▃▃▃▃ ▃▃ ▃ ▁▁ ▁▁ ▁▁ ▂ ▁▁▁▁▃▂▃ ──90 HSL double + ──91 HSLA float + ──92 HSL float +· ▃▁▂▃▁▂▃▂ ▃ ▁▁ ▁▃ ▃ ▁▁ ▂▃▃▃▃▃ ▃ ▃ ▃ ▃ ▂▂▂▃▃▃▃▂▃▂▃ ▃▃ ▃▁▁ ▁ ▁▁ ▁▁ ▂ ▁▁▁▁▃▂▃ ──93 HSVA double +· ▃▁▂▃▁▂▃▂ ▃ ▁▁ ▁▃ ▃ ▁▁ ▂▃▃▃▃▃ ▃ ▃ ▃ ▃ ▂▂▂▃▃▃▃▂▃▂▃ ▃▃ ▃▁▁ ▁▁ ▁▁ ▂ ▁▁▁▁▃▂▃ ──94 HSV double + ──95 HSVA float + ──96 HSV float +· ▃▁▂▃▁▂▃▂ ▃ ▁▁ ▁▃ ▃ ▁▁ ▂▃▃▃▃▃ ▃ ▃ ▃ ▃ ▂▂▂▃▃▃▃▃▃▂▃ ▃▃ ▃▁▁ ▁▁ ▁ ▁▁ ▂ ▁▁▁▁▃▂▃ ──97 Y'CbCr709 double +· ▃▁▂▃▁▂▃▂ ▃ ▁▁ ▁▃ ▃ ▁▁ ▂▃▃▃▃▃ ▃ ▃ ▃ ▃ ▂▂▂▃▃▃▃▂▃▃▃ ▃▃ ▃▁▁ ▁▁ ▁▁ ▂ ▁▁▁▁▃▂▃ ──98 Y'CbCrA709 double + ──99 Y'CbCrA709 float + ──100 Y'CbCr709 float +· ▃▁▂▃▁▂▃▂ ▃ ▁▁ ▁▃ ▃ ▁▁ ▂▃▃▃▃▃ ▃ ▃ ▃ ▃ ▂▂▂▃▃▃▃▂▃▂▃ ▃▃ ▃▁▁ ▁▁ ▁▁ ▁ ▂ ▁▁▁▁▃▂▃ ──101 CMYK double +· ▃▁▂▃▁▂▃▂ ▃ ▁▁ ▁▃ ▃ ▁▁ ▂▃▃▃▃▃ ▃ ▃ ▃ ▃ ▂▂▂▃▃▃▃▂▃▂▃ ▃▃ ▃▁▁ ▁▁ ▁▁ ▂ ▁▁▁▁▃▂▃ ──102 CMY double + ──103 CMYK float + ──104 CMY float + ──105 CMYK u8 + ──106 B'aG'aR'aA u8 + ──107 cairo-ARGB32 + ──108 cairo-RGB24 + ──109 cairo-A8 +· ▃▁▂▃▁▂▃▂ ▃ ▁▁ ▁▃ ▃ ▁▁ ▂▃▃▃▃▃ ▃ ▃ ▃ ▃ ▂▂▂▃▃▃▃▂▃▂▃ ▃▃ ▃▁▁ ▁▁ ▁▁ ▁▁ ▂ ▁▁▁ ▂▃ ──110 CIE Lab double +· ▃▁▂▃▁▂▃▂ ▃ ▁▁ ▁▃ ▃ ▁▁ ▂▃▃▃▃▃ ▃ ▃ ▃ ▃ ▂▂▂▃▃▃▃▂▃▂▃ ▃▃ ▃▁▁ ▁▁ ▁▁ ▁▁ ▂ ▁▁▃ ──111 CIE Lab alpha double +· ▃▁▂▃▁▂▃▂ ▃ ▁▁ ▁▃ ▃ ▁▁ ▂▃▃▃▃▃ ▃ ▃ ▃ ▃ ▂▂▂▃▃▃▃▃▃▂▃ ▃▃ ▃▁▁ ▁▁ ▁▁ ▁▁ ▂ ▁ ▁▃▂▃ ──112 CIE LCH(ab) double +· ▃▁▂▃▁▂▃▂ ▃ ▁▁ ▁▃ ▃ ▁▁ ▂▃▃▃▃▃ ▃ ▃ ▃ ▃ ▂▂▂▃▃▃▃▂▃▂▃ ▃▃ ▃▁▁ ▁▁ ▁▁ ▁▁ ▂ ▁▁ ▃▂▃ ──113 CIE LCH(ab) alpha double +▂ ▃▃▂▃▁·▁▂ ▂▃ ▃▃ ▃▃ ▃ ▃▃ ▂▃▂▃▃▁▂▃ ▃ ▃ ▃ ▂▂▁▂▂▁▁▂▃▂▃ ▃▃ ▃▃▃ ▃▃ ▃▃ ▃▃ ▃▃ ▃▃ ▂▃ ──114 CIE Lab float +▁ ▂▂▃▂·▁▂▁ ▃▂ ▂▂ ▂▂ ▂▃ ▃ ▂▂ ▁▂▂▃▃▂▃▂▃▂▃ ▃▂ ▃ ▁▁▁▂▂▂▂▁▂▁▂▃▂▂▃▂▂▂ ▂▂ ▂▂ ▂▂ ▃▃ ▂ ▂▂ ──115 CIE Lab alpha float + ──116 CIE L alpha float + ──117 CIE Lab u8 + ──118 CIE Lab u16 + ──119 CIE LCH(ab) float + ──120 CIE LCH(ab) alpha float +||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| +||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||111111111111111111111 +||||||||||111111111122222222223333333333444444444455555555556666666666777777777788888888889999999999000000000011111111112 +0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 +total length: 11519 +total cost : 20679660 + +Environment + +If the environment variable BABL_STATS is set containting a html pixel +format conversion usage matrix will be written to /tmp/babl-stats.html. +This allows figuring out which conversions is taking up time during +processing, and what shortcuts extensions might be created or improved +to make babl do it's job faster. + +Through the environment variable BABL_TOLERANCE you can control a speed +/performance trade off that by default is set very low (0.000001) +values in the range 0.01-0.1 can provide reasonable preview performance +by allowing lower numerical accuracy + +. + +Extending + +For samples of how the current internal API specification of data +types, color models, and conversions look in the extensions/ directory. +The tables in this HTML file is directly generated based on the data +registered by BablCore (double and RGBA), BablBase (core datatypes, and +RGB models), extensions (CIE Lab, naive CMYK, various shortcut +conversions). + +Directory Overview + +babl-dist-root + │ + ├──babl the babl core + │ └──base reference implementations for RGB and Grayscale Color Models, + │ 8bit 16bit, and 32bit and 64bit floating point. + ├──extensions CIE-Lab color model as well as a naive-CMYK color model. + │ also contains a random cribbage of old conversion optimized + │ code from gggl. Finding more exsisting conversions in third + │ part libraries (hermes, lcms?, liboil?) could improve the + │ speed of babl. + ├──tests tests used to keep babl sane during development. + └──docs Documentation/webpage for babl (the document you are reading + originated there. + +TODO + + • Support for conversions between formats that have higher + dimensionality than RGBA. (arbitrary meaningless components) + • Support for datatypes that are not a multiple of 8bit. + • dithering + • dynamic data attached to format, or internal handling of icc + through a registered set of profiles + • Stocastic runtime profiling with running average of the peformance + for conversions, to avoid problems incurred if other cpu intense is + happening when babl tests a conversions. + +Copyright + +Babl is free software; you can redistribute it and/or modify it under +the terms of the GNU Lesser General Public License as published by the +Free Software Foundation; either version 3 of the License, or (at your +option) any later version. + +Authors + +Øyvind Kolås pippin at gimp.org + Original author. +Sven Neumann sven at gimp.org + Build sanity and optimizations. +Michael Natterer mitch at gimp.org + Build sanity. +Kevin Cozens kcozens at cvs.gnome.org + Build sanity. +Tim Mooney + Portability fixes. +Michael Schumacher schumaml at cvs.gnome.org + win32 support for dynamic extensions. + Portability fixes. +Jan Heller jheller at svn.gnome.org + Optimizations, refactoring and documentation. +Mukund Sivaraman muks at mukund.org + Sparse fixes and sanity. +dmacks at netspace.org + Build sanity +Sam Hocevar + Build sanity. +Zhang Junbo + Frequency domain color model. +Martin Nordholts + Optimizations and API overhaul. +Gary V. Vaughan + Multiplatform build support. +Stanislav Brabec + Portability patch. +Hubert Figuiere + C++ friendliness patch. +Danny Robson + Code cleanups. +Fryderyk Dziarmagowski freetz at gmx.net + Code cleanups. +Daniel Paredes García danipga at gmail.com + Initial work to make babl threadsafe +Rupert Weber gimp at leguanease.org + Documentation and other improvements +Jehan jehan at girinstud.io + win32 portabilitiy +Sven Claussner + Update DOAP file +Alexander Larsson + Math optimizations +Nils Philippsen + code cleanups +Simon Budig + cleanups +Micheal Muré + portability fixes +Maxime Nicco + + HSV color model extension + +Teo Mazars + Color spaces/models in extensions +Daniel Sabo + Dead code elimination, general cleanups, +Michael Henning + Conversion fixes +Elle Stone + Verification and improvements to accuracy of color space + conversions. +Thomas Manni + CIE related fixupsRoman Lebedev + Stability/crasher fixes +Jon Nordby + Portability, Stability and more +Massimo Valentini + stability fixes + +/babl-0.1.18 diff --git a/TODO b/TODO new file mode 100644 index 0000000..1c5aefc --- /dev/null +++ b/TODO @@ -0,0 +1,13 @@ +

TODO

+ + diff --git a/acinclude.m4 b/acinclude.m4 new file mode 100644 index 0000000..4ea58bd --- /dev/null +++ b/acinclude.m4 @@ -0,0 +1,82 @@ +dnl BABL_DETECT_CFLAGS(RESULT, FLAGSET) +dnl Detect if the compiler supports a set of flags + +AC_DEFUN([BABL_DETECT_CFLAGS], +[ + $1= + for flag in $2; do + if test -z "[$]$1"; then + $1_save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS $flag" + AC_MSG_CHECKING([whether [$]CC understands [$]flag]) + AC_TRY_COMPILE([], [], [$1_works=yes], [$1_works=no]) + AC_MSG_RESULT([$]$1_works) + CFLAGS="[$]$1_save_CFLAGS" + if test "x[$]$1_works" = "xyes"; then + $1="$flag" + fi + fi + done +]) + + +# BABL_VARIADIC_MACROS +# -------------------- +# check for flavours of variadic macros +AC_DEFUN([BABL_VARIADIC_MACROS], +[AC_BEFORE([$0], [AC_PROG_CXX]) +AC_REQUIRE([AC_PROG_CPP]) +AC_CACHE_CHECK([for GNUC variadic macros], + [babl_cv_prog_gnuc_variadic_macros], + [# gcc-2.95.x supports both gnu style and ISO varargs, but if -ansi + # is passed ISO vararg support is turned off, and there is no work + # around to turn it on, so we unconditionally turn it off. + { echo '#if __GNUC__ == 2 && __GNUC_MINOR__ == 95' + echo ' yes ' + echo '#endif'; } > conftest.c + if ${CPP} conftest.c | grep yes > /dev/null; then + babl_cv_prog_c_variadic_macros=no + babl_cv_prog_cxx_variadic_macros=no + fi + AC_TRY_COMPILE([],[int a(int p1, int p2, int p3); +#define call_a(params...) a(1,params) +call_a(2,3); + ], + babl_cv_prog_gnuc_variadic_macros=yes, + babl_cv_prog_gnuc_variadic_macros=no) +]) +if test x$babl_cv_prog_gnuc_variadic_macros = xyes; then + AC_DEFINE(BABL_GNUC_VARIADIC_MACROS, 1, [Define if the C pre-processor supports GNU style variadic macros]) +fi + +AC_CACHE_CHECK([for ISO C99 variadic macros in C], + [babl_cv_prog_c_variadic_macros], + [AC_TRY_COMPILE([],[int a(int p1, int p2, int p3); +#define call_a(...) a(1,__VA_ARGS__) +call_a(2,3); + ], + babl_cv_prog_c_variadic_macros=yes, + babl_cv_prog_c_variadic_macros=no) +]) +if test x$babl_cv_prog_c_variadic_macros = xyes ; then + AC_DEFINE(BABL_ISO_VARIADIC_MACROS, 1, [Define if the C pre-processor supports variadic macros]) +fi + +AC_PROVIDE_IFELSE([AC_PROG_CXX], + [AC_CACHE_CHECK([for ISO C99 variadic macros in C++], + [babl_cv_prog_cxx_variadic_macros], + [AC_LANG_PUSH(C++) + AC_TRY_COMPILE([],[int a(int p1, int p2, int p3); +#define call_a(...) a(1,__VA_ARGS__) +call_a(2,3); + ], + babl_cv_prog_cxx_variadic_macros=yes, + babl_cv_prog_cxx_variadic_macros=no) + AC_LANG_POP])], + [# No C++ compiler + babl_cv_prog_cxx_variadic_macros=no]) +if test x$babl_cv_prog_cxx_variadic_macros = xyes ; then + AC_DEFINE(BABL_ISO_CXX_VARIADIC_MACROS, 1, [Define if the C++ pre-processor supports variadic macros]) +fi +]) + diff --git a/aclocal.m4 b/aclocal.m4 new file mode 100644 index 0000000..a0c40b0 --- /dev/null +++ b/aclocal.m4 @@ -0,0 +1,1194 @@ +# generated automatically by aclocal 1.15 -*- Autoconf -*- + +# Copyright (C) 1996-2014 Free Software Foundation, Inc. + +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])]) +m4_ifndef([AC_AUTOCONF_VERSION], + [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl +m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.69],, +[m4_warning([this file was generated for autoconf 2.69. +You have another version of autoconf. It may work, but is not guaranteed to. +If you have problems, you may need to regenerate the build system entirely. +To do so, use the procedure documented by the package, typically 'autoreconf'.])]) + +# Copyright (C) 2002-2014 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_AUTOMAKE_VERSION(VERSION) +# ---------------------------- +# Automake X.Y traces this macro to ensure aclocal.m4 has been +# generated from the m4 files accompanying Automake X.Y. +# (This private macro should not be called outside this file.) +AC_DEFUN([AM_AUTOMAKE_VERSION], +[am__api_version='1.15' +dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to +dnl require some minimum version. Point them to the right macro. +m4_if([$1], [1.15], [], + [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl +]) + +# _AM_AUTOCONF_VERSION(VERSION) +# ----------------------------- +# aclocal traces this macro to find the Autoconf version. +# This is a private macro too. Using m4_define simplifies +# the logic in aclocal, which can simply ignore this definition. +m4_define([_AM_AUTOCONF_VERSION], []) + +# AM_SET_CURRENT_AUTOMAKE_VERSION +# ------------------------------- +# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. +# This function is AC_REQUIREd by AM_INIT_AUTOMAKE. +AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], +[AM_AUTOMAKE_VERSION([1.15])dnl +m4_ifndef([AC_AUTOCONF_VERSION], + [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl +_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) + +# AM_AUX_DIR_EXPAND -*- Autoconf -*- + +# Copyright (C) 2001-2014 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets +# $ac_aux_dir to '$srcdir/foo'. In other projects, it is set to +# '$srcdir', '$srcdir/..', or '$srcdir/../..'. +# +# Of course, Automake must honor this variable whenever it calls a +# tool from the auxiliary directory. The problem is that $srcdir (and +# therefore $ac_aux_dir as well) can be either absolute or relative, +# depending on how configure is run. This is pretty annoying, since +# it makes $ac_aux_dir quite unusable in subdirectories: in the top +# source directory, any form will work fine, but in subdirectories a +# relative path needs to be adjusted first. +# +# $ac_aux_dir/missing +# fails when called from a subdirectory if $ac_aux_dir is relative +# $top_srcdir/$ac_aux_dir/missing +# fails if $ac_aux_dir is absolute, +# fails when called from a subdirectory in a VPATH build with +# a relative $ac_aux_dir +# +# The reason of the latter failure is that $top_srcdir and $ac_aux_dir +# are both prefixed by $srcdir. In an in-source build this is usually +# harmless because $srcdir is '.', but things will broke when you +# start a VPATH build or use an absolute $srcdir. +# +# So we could use something similar to $top_srcdir/$ac_aux_dir/missing, +# iff we strip the leading $srcdir from $ac_aux_dir. That would be: +# am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` +# and then we would define $MISSING as +# MISSING="\${SHELL} $am_aux_dir/missing" +# This will work as long as MISSING is not called from configure, because +# unfortunately $(top_srcdir) has no meaning in configure. +# However there are other variables, like CC, which are often used in +# configure, and could therefore not use this "fixed" $ac_aux_dir. +# +# Another solution, used here, is to always expand $ac_aux_dir to an +# absolute PATH. The drawback is that using absolute paths prevent a +# configured tree to be moved without reconfiguration. + +AC_DEFUN([AM_AUX_DIR_EXPAND], +[AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl +# Expand $ac_aux_dir to an absolute path. +am_aux_dir=`cd "$ac_aux_dir" && pwd` +]) + +# AM_CONDITIONAL -*- Autoconf -*- + +# Copyright (C) 1997-2014 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_CONDITIONAL(NAME, SHELL-CONDITION) +# ------------------------------------- +# Define a conditional. +AC_DEFUN([AM_CONDITIONAL], +[AC_PREREQ([2.52])dnl + m4_if([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], + [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl +AC_SUBST([$1_TRUE])dnl +AC_SUBST([$1_FALSE])dnl +_AM_SUBST_NOTMAKE([$1_TRUE])dnl +_AM_SUBST_NOTMAKE([$1_FALSE])dnl +m4_define([_AM_COND_VALUE_$1], [$2])dnl +if $2; then + $1_TRUE= + $1_FALSE='#' +else + $1_TRUE='#' + $1_FALSE= +fi +AC_CONFIG_COMMANDS_PRE( +[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then + AC_MSG_ERROR([[conditional "$1" was never defined. +Usually this means the macro was only invoked conditionally.]]) +fi])]) + +# Copyright (C) 1999-2014 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + + +# There are a few dirty hacks below to avoid letting 'AC_PROG_CC' be +# written in clear, in which case automake, when reading aclocal.m4, +# will think it sees a *use*, and therefore will trigger all it's +# C support machinery. Also note that it means that autoscan, seeing +# CC etc. in the Makefile, will ask for an AC_PROG_CC use... + + +# _AM_DEPENDENCIES(NAME) +# ---------------------- +# See how the compiler implements dependency checking. +# NAME is "CC", "CXX", "OBJC", "OBJCXX", "UPC", or "GJC". +# We try a few techniques and use that to set a single cache variable. +# +# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was +# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular +# dependency, and given that the user is not expected to run this macro, +# just rely on AC_PROG_CC. +AC_DEFUN([_AM_DEPENDENCIES], +[AC_REQUIRE([AM_SET_DEPDIR])dnl +AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl +AC_REQUIRE([AM_MAKE_INCLUDE])dnl +AC_REQUIRE([AM_DEP_TRACK])dnl + +m4_if([$1], [CC], [depcc="$CC" am_compiler_list=], + [$1], [CXX], [depcc="$CXX" am_compiler_list=], + [$1], [OBJC], [depcc="$OBJC" am_compiler_list='gcc3 gcc'], + [$1], [OBJCXX], [depcc="$OBJCXX" am_compiler_list='gcc3 gcc'], + [$1], [UPC], [depcc="$UPC" am_compiler_list=], + [$1], [GCJ], [depcc="$GCJ" am_compiler_list='gcc3 gcc'], + [depcc="$$1" am_compiler_list=]) + +AC_CACHE_CHECK([dependency style of $depcc], + [am_cv_$1_dependencies_compiler_type], +[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named 'D' -- because '-MD' means "put the output + # in D". + rm -rf conftest.dir + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_$1_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` + fi + am__universal=false + m4_case([$1], [CC], + [case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac], + [CXX], + [case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac]) + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with + # Solaris 10 /bin/sh. + echo '/* dummy */' > sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with '-c' and '-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle '-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs. + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # After this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested. + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvc7 | msvc7msys | msvisualcpp | msvcmsys) + # This compiler won't grok '-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_$1_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_$1_dependencies_compiler_type=none +fi +]) +AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) +AM_CONDITIONAL([am__fastdep$1], [ + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) +]) + + +# AM_SET_DEPDIR +# ------------- +# Choose a directory name for dependency files. +# This macro is AC_REQUIREd in _AM_DEPENDENCIES. +AC_DEFUN([AM_SET_DEPDIR], +[AC_REQUIRE([AM_SET_LEADING_DOT])dnl +AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl +]) + + +# AM_DEP_TRACK +# ------------ +AC_DEFUN([AM_DEP_TRACK], +[AC_ARG_ENABLE([dependency-tracking], [dnl +AS_HELP_STRING( + [--enable-dependency-tracking], + [do not reject slow dependency extractors]) +AS_HELP_STRING( + [--disable-dependency-tracking], + [speeds up one-time build])]) +if test "x$enable_dependency_tracking" != xno; then + am_depcomp="$ac_aux_dir/depcomp" + AMDEPBACKSLASH='\' + am__nodep='_no' +fi +AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) +AC_SUBST([AMDEPBACKSLASH])dnl +_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl +AC_SUBST([am__nodep])dnl +_AM_SUBST_NOTMAKE([am__nodep])dnl +]) + +# Generate code to set up dependency tracking. -*- Autoconf -*- + +# Copyright (C) 1999-2014 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + + +# _AM_OUTPUT_DEPENDENCY_COMMANDS +# ------------------------------ +AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], +[{ + # Older Autoconf quotes --file arguments for eval, but not when files + # are listed without --file. Let's play safe and only enable the eval + # if we detect the quoting. + case $CONFIG_FILES in + *\'*) eval set x "$CONFIG_FILES" ;; + *) set x $CONFIG_FILES ;; + esac + shift + for mf + do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named 'Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # Grep'ing the whole file is not good either: AIX grep has a line + # limit of 2048, but all sed's we know have understand at least 4000. + if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then + dirpart=`AS_DIRNAME("$mf")` + else + continue + fi + # Extract the definition of DEPDIR, am__include, and am__quote + # from the Makefile without running 'make'. + DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` + test -z "$DEPDIR" && continue + am__include=`sed -n 's/^am__include = //p' < "$mf"` + test -z "$am__include" && continue + am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # Find all dependency output files, they are included files with + # $(DEPDIR) in their names. We invoke sed twice because it is the + # simplest approach to changing $(DEPDIR) to its actual value in the + # expansion. + for file in `sed -n " + s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`AS_DIRNAME(["$file"])` + AS_MKDIR_P([$dirpart/$fdir]) + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done + done +} +])# _AM_OUTPUT_DEPENDENCY_COMMANDS + + +# AM_OUTPUT_DEPENDENCY_COMMANDS +# ----------------------------- +# This macro should only be invoked once -- use via AC_REQUIRE. +# +# This code is only required when automatic dependency tracking +# is enabled. FIXME. This creates each '.P' file that we will +# need in order to bootstrap the dependency handling code. +AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], +[AC_CONFIG_COMMANDS([depfiles], + [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], + [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) +]) + +# Do all the work for Automake. -*- Autoconf -*- + +# Copyright (C) 1996-2014 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This macro actually does too much. Some checks are only needed if +# your package does certain things. But this isn't really a big deal. + +dnl Redefine AC_PROG_CC to automatically invoke _AM_PROG_CC_C_O. +m4_define([AC_PROG_CC], +m4_defn([AC_PROG_CC]) +[_AM_PROG_CC_C_O +]) + +# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) +# AM_INIT_AUTOMAKE([OPTIONS]) +# ----------------------------------------------- +# The call with PACKAGE and VERSION arguments is the old style +# call (pre autoconf-2.50), which is being phased out. PACKAGE +# and VERSION should now be passed to AC_INIT and removed from +# the call to AM_INIT_AUTOMAKE. +# We support both call styles for the transition. After +# the next Automake release, Autoconf can make the AC_INIT +# arguments mandatory, and then we can depend on a new Autoconf +# release and drop the old call support. +AC_DEFUN([AM_INIT_AUTOMAKE], +[AC_PREREQ([2.65])dnl +dnl Autoconf wants to disallow AM_ names. We explicitly allow +dnl the ones we care about. +m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl +AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl +AC_REQUIRE([AC_PROG_INSTALL])dnl +if test "`cd $srcdir && pwd`" != "`pwd`"; then + # Use -I$(srcdir) only when $(srcdir) != ., so that make's output + # is not polluted with repeated "-I." + AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl + # test to see if srcdir already configured + if test -f $srcdir/config.status; then + AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) + fi +fi + +# test whether we have cygpath +if test -z "$CYGPATH_W"; then + if (cygpath --version) >/dev/null 2>/dev/null; then + CYGPATH_W='cygpath -w' + else + CYGPATH_W=echo + fi +fi +AC_SUBST([CYGPATH_W]) + +# Define the identity of the package. +dnl Distinguish between old-style and new-style calls. +m4_ifval([$2], +[AC_DIAGNOSE([obsolete], + [$0: two- and three-arguments forms are deprecated.]) +m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl + AC_SUBST([PACKAGE], [$1])dnl + AC_SUBST([VERSION], [$2])], +[_AM_SET_OPTIONS([$1])dnl +dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. +m4_if( + m4_ifdef([AC_PACKAGE_NAME], [ok]):m4_ifdef([AC_PACKAGE_VERSION], [ok]), + [ok:ok],, + [m4_fatal([AC_INIT should be called with package and version arguments])])dnl + AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl + AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl + +_AM_IF_OPTION([no-define],, +[AC_DEFINE_UNQUOTED([PACKAGE], ["$PACKAGE"], [Name of package]) + AC_DEFINE_UNQUOTED([VERSION], ["$VERSION"], [Version number of package])])dnl + +# Some tools Automake needs. +AC_REQUIRE([AM_SANITY_CHECK])dnl +AC_REQUIRE([AC_ARG_PROGRAM])dnl +AM_MISSING_PROG([ACLOCAL], [aclocal-${am__api_version}]) +AM_MISSING_PROG([AUTOCONF], [autoconf]) +AM_MISSING_PROG([AUTOMAKE], [automake-${am__api_version}]) +AM_MISSING_PROG([AUTOHEADER], [autoheader]) +AM_MISSING_PROG([MAKEINFO], [makeinfo]) +AC_REQUIRE([AM_PROG_INSTALL_SH])dnl +AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl +AC_REQUIRE([AC_PROG_MKDIR_P])dnl +# For better backward compatibility. To be removed once Automake 1.9.x +# dies out for good. For more background, see: +# +# +AC_SUBST([mkdir_p], ['$(MKDIR_P)']) +# We need awk for the "check" target (and possibly the TAP driver). The +# system "awk" is bad on some platforms. +AC_REQUIRE([AC_PROG_AWK])dnl +AC_REQUIRE([AC_PROG_MAKE_SET])dnl +AC_REQUIRE([AM_SET_LEADING_DOT])dnl +_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], + [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], + [_AM_PROG_TAR([v7])])]) +_AM_IF_OPTION([no-dependencies],, +[AC_PROVIDE_IFELSE([AC_PROG_CC], + [_AM_DEPENDENCIES([CC])], + [m4_define([AC_PROG_CC], + m4_defn([AC_PROG_CC])[_AM_DEPENDENCIES([CC])])])dnl +AC_PROVIDE_IFELSE([AC_PROG_CXX], + [_AM_DEPENDENCIES([CXX])], + [m4_define([AC_PROG_CXX], + m4_defn([AC_PROG_CXX])[_AM_DEPENDENCIES([CXX])])])dnl +AC_PROVIDE_IFELSE([AC_PROG_OBJC], + [_AM_DEPENDENCIES([OBJC])], + [m4_define([AC_PROG_OBJC], + m4_defn([AC_PROG_OBJC])[_AM_DEPENDENCIES([OBJC])])])dnl +AC_PROVIDE_IFELSE([AC_PROG_OBJCXX], + [_AM_DEPENDENCIES([OBJCXX])], + [m4_define([AC_PROG_OBJCXX], + m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])dnl +]) +AC_REQUIRE([AM_SILENT_RULES])dnl +dnl The testsuite driver may need to know about EXEEXT, so add the +dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This +dnl macro is hooked onto _AC_COMPILER_EXEEXT early, see below. +AC_CONFIG_COMMANDS_PRE(dnl +[m4_provide_if([_AM_COMPILER_EXEEXT], + [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl + +# POSIX will say in a future version that running "rm -f" with no argument +# is OK; and we want to be able to make that assumption in our Makefile +# recipes. So use an aggressive probe to check that the usage we want is +# actually supported "in the wild" to an acceptable degree. +# See automake bug#10828. +# To make any issue more visible, cause the running configure to be aborted +# by default if the 'rm' program in use doesn't match our expectations; the +# user can still override this though. +if rm -f && rm -fr && rm -rf; then : OK; else + cat >&2 <<'END' +Oops! + +Your 'rm' program seems unable to run without file operands specified +on the command line, even when the '-f' option is present. This is contrary +to the behaviour of most rm programs out there, and not conforming with +the upcoming POSIX standard: + +Please tell bug-automake@gnu.org about your system, including the value +of your $PATH and any error possibly output before this message. This +can help us improve future automake versions. + +END + if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then + echo 'Configuration will proceed anyway, since you have set the' >&2 + echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 + echo >&2 + else + cat >&2 <<'END' +Aborting the configuration process, to ensure you take notice of the issue. + +You can download and install GNU coreutils to get an 'rm' implementation +that behaves properly: . + +If you want to complete the configuration process using your problematic +'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM +to "yes", and re-run configure. + +END + AC_MSG_ERROR([Your 'rm' program is bad, sorry.]) + fi +fi +dnl The trailing newline in this macro's definition is deliberate, for +dnl backward compatibility and to allow trailing 'dnl'-style comments +dnl after the AM_INIT_AUTOMAKE invocation. See automake bug#16841. +]) + +dnl Hook into '_AC_COMPILER_EXEEXT' early to learn its expansion. Do not +dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further +dnl mangled by Autoconf and run in a shell conditional statement. +m4_define([_AC_COMPILER_EXEEXT], +m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) + +# When config.status generates a header, we must update the stamp-h file. +# This file resides in the same directory as the config header +# that is generated. The stamp files are numbered to have different names. + +# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the +# loop where config.status creates the headers, so we can generate +# our stamp files there. +AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], +[# Compute $1's index in $config_headers. +_am_arg=$1 +_am_stamp_count=1 +for _am_header in $config_headers :; do + case $_am_header in + $_am_arg | $_am_arg:* ) + break ;; + * ) + _am_stamp_count=`expr $_am_stamp_count + 1` ;; + esac +done +echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) + +# Copyright (C) 2001-2014 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_PROG_INSTALL_SH +# ------------------ +# Define $install_sh. +AC_DEFUN([AM_PROG_INSTALL_SH], +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +if test x"${install_sh+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; + *) + install_sh="\${SHELL} $am_aux_dir/install-sh" + esac +fi +AC_SUBST([install_sh])]) + +# Copyright (C) 2003-2014 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# Check whether the underlying file-system supports filenames +# with a leading dot. For instance MS-DOS doesn't. +AC_DEFUN([AM_SET_LEADING_DOT], +[rm -rf .tst 2>/dev/null +mkdir .tst 2>/dev/null +if test -d .tst; then + am__leading_dot=. +else + am__leading_dot=_ +fi +rmdir .tst 2>/dev/null +AC_SUBST([am__leading_dot])]) + +# Add --enable-maintainer-mode option to configure. -*- Autoconf -*- +# From Jim Meyering + +# Copyright (C) 1996-2014 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_MAINTAINER_MODE([DEFAULT-MODE]) +# ---------------------------------- +# Control maintainer-specific portions of Makefiles. +# Default is to disable them, unless 'enable' is passed literally. +# For symmetry, 'disable' may be passed as well. Anyway, the user +# can override the default with the --enable/--disable switch. +AC_DEFUN([AM_MAINTAINER_MODE], +[m4_case(m4_default([$1], [disable]), + [enable], [m4_define([am_maintainer_other], [disable])], + [disable], [m4_define([am_maintainer_other], [enable])], + [m4_define([am_maintainer_other], [enable]) + m4_warn([syntax], [unexpected argument to AM@&t@_MAINTAINER_MODE: $1])]) +AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles]) + dnl maintainer-mode's default is 'disable' unless 'enable' is passed + AC_ARG_ENABLE([maintainer-mode], + [AS_HELP_STRING([--]am_maintainer_other[-maintainer-mode], + am_maintainer_other[ make rules and dependencies not useful + (and sometimes confusing) to the casual installer])], + [USE_MAINTAINER_MODE=$enableval], + [USE_MAINTAINER_MODE=]m4_if(am_maintainer_other, [enable], [no], [yes])) + AC_MSG_RESULT([$USE_MAINTAINER_MODE]) + AM_CONDITIONAL([MAINTAINER_MODE], [test $USE_MAINTAINER_MODE = yes]) + MAINT=$MAINTAINER_MODE_TRUE + AC_SUBST([MAINT])dnl +] +) + +# Check to see how 'make' treats includes. -*- Autoconf -*- + +# Copyright (C) 2001-2014 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_MAKE_INCLUDE() +# ----------------- +# Check to see how make treats includes. +AC_DEFUN([AM_MAKE_INCLUDE], +[am_make=${MAKE-make} +cat > confinc << 'END' +am__doit: + @echo this is the am__doit target +.PHONY: am__doit +END +# If we don't find an include directive, just comment out the code. +AC_MSG_CHECKING([for style of include used by $am_make]) +am__include="#" +am__quote= +_am_result=none +# First try GNU make style include. +echo "include confinc" > confmf +# Ignore all kinds of additional output from 'make'. +case `$am_make -s -f confmf 2> /dev/null` in #( +*the\ am__doit\ target*) + am__include=include + am__quote= + _am_result=GNU + ;; +esac +# Now try BSD make style include. +if test "$am__include" = "#"; then + echo '.include "confinc"' > confmf + case `$am_make -s -f confmf 2> /dev/null` in #( + *the\ am__doit\ target*) + am__include=.include + am__quote="\"" + _am_result=BSD + ;; + esac +fi +AC_SUBST([am__include]) +AC_SUBST([am__quote]) +AC_MSG_RESULT([$_am_result]) +rm -f confinc confmf +]) + +# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- + +# Copyright (C) 1997-2014 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_MISSING_PROG(NAME, PROGRAM) +# ------------------------------ +AC_DEFUN([AM_MISSING_PROG], +[AC_REQUIRE([AM_MISSING_HAS_RUN]) +$1=${$1-"${am_missing_run}$2"} +AC_SUBST($1)]) + +# AM_MISSING_HAS_RUN +# ------------------ +# Define MISSING if not defined so far and test if it is modern enough. +# If it is, set am_missing_run to use it, otherwise, to nothing. +AC_DEFUN([AM_MISSING_HAS_RUN], +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +AC_REQUIRE_AUX_FILE([missing])dnl +if test x"${MISSING+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; + *) + MISSING="\${SHELL} $am_aux_dir/missing" ;; + esac +fi +# Use eval to expand $SHELL +if eval "$MISSING --is-lightweight"; then + am_missing_run="$MISSING " +else + am_missing_run= + AC_MSG_WARN(['missing' script is too old or missing]) +fi +]) + +# Helper functions for option handling. -*- Autoconf -*- + +# Copyright (C) 2001-2014 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# _AM_MANGLE_OPTION(NAME) +# ----------------------- +AC_DEFUN([_AM_MANGLE_OPTION], +[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) + +# _AM_SET_OPTION(NAME) +# -------------------- +# Set option NAME. Presently that only means defining a flag for this option. +AC_DEFUN([_AM_SET_OPTION], +[m4_define(_AM_MANGLE_OPTION([$1]), [1])]) + +# _AM_SET_OPTIONS(OPTIONS) +# ------------------------ +# OPTIONS is a space-separated list of Automake options. +AC_DEFUN([_AM_SET_OPTIONS], +[m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) + +# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) +# ------------------------------------------- +# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. +AC_DEFUN([_AM_IF_OPTION], +[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) + +# Copyright (C) 1999-2014 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# _AM_PROG_CC_C_O +# --------------- +# Like AC_PROG_CC_C_O, but changed for automake. We rewrite AC_PROG_CC +# to automatically call this. +AC_DEFUN([_AM_PROG_CC_C_O], +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +AC_REQUIRE_AUX_FILE([compile])dnl +AC_LANG_PUSH([C])dnl +AC_CACHE_CHECK( + [whether $CC understands -c and -o together], + [am_cv_prog_cc_c_o], + [AC_LANG_CONFTEST([AC_LANG_PROGRAM([])]) + # Make sure it works both with $CC and with simple cc. + # Following AC_PROG_CC_C_O, we do the test twice because some + # compilers refuse to overwrite an existing .o file with -o, + # though they will create one. + am_cv_prog_cc_c_o=yes + for am_i in 1 2; do + if AM_RUN_LOG([$CC -c conftest.$ac_ext -o conftest2.$ac_objext]) \ + && test -f conftest2.$ac_objext; then + : OK + else + am_cv_prog_cc_c_o=no + break + fi + done + rm -f core conftest* + unset am_i]) +if test "$am_cv_prog_cc_c_o" != yes; then + # Losing compiler, so override with the script. + # FIXME: It is wrong to rewrite CC. + # But if we don't then we get into trouble of one sort or another. + # A longer-term fix would be to have automake use am__CC in this case, + # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" + CC="$am_aux_dir/compile $CC" +fi +AC_LANG_POP([C])]) + +# For backward compatibility. +AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])]) + +# Copyright (C) 2001-2014 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_RUN_LOG(COMMAND) +# ------------------- +# Run COMMAND, save the exit status in ac_status, and log it. +# (This has been adapted from Autoconf's _AC_RUN_LOG macro.) +AC_DEFUN([AM_RUN_LOG], +[{ echo "$as_me:$LINENO: $1" >&AS_MESSAGE_LOG_FD + ($1) >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD + (exit $ac_status); }]) + +# Check to make sure that the build environment is sane. -*- Autoconf -*- + +# Copyright (C) 1996-2014 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_SANITY_CHECK +# --------------- +AC_DEFUN([AM_SANITY_CHECK], +[AC_MSG_CHECKING([whether build environment is sane]) +# Reject unsafe characters in $srcdir or the absolute working directory +# name. Accept space and tab only in the latter. +am_lf=' +' +case `pwd` in + *[[\\\"\#\$\&\'\`$am_lf]]*) + AC_MSG_ERROR([unsafe absolute working directory name]);; +esac +case $srcdir in + *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) + AC_MSG_ERROR([unsafe srcdir value: '$srcdir']);; +esac + +# Do 'set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + am_has_slept=no + for am_try in 1 2; do + echo "timestamp, slept: $am_has_slept" > conftest.file + set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` + if test "$[*]" = "X"; then + # -L didn't work. + set X `ls -t "$srcdir/configure" conftest.file` + fi + if test "$[*]" != "X $srcdir/configure conftest.file" \ + && test "$[*]" != "X conftest.file $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken + alias in your environment]) + fi + if test "$[2]" = conftest.file || test $am_try -eq 2; then + break + fi + # Just in case. + sleep 1 + am_has_slept=yes + done + test "$[2]" = conftest.file + ) +then + # Ok. + : +else + AC_MSG_ERROR([newly created file is older than distributed files! +Check your system clock]) +fi +AC_MSG_RESULT([yes]) +# If we didn't sleep, we still need to ensure time stamps of config.status and +# generated files are strictly newer. +am_sleep_pid= +if grep 'slept: no' conftest.file >/dev/null 2>&1; then + ( sleep 1 ) & + am_sleep_pid=$! +fi +AC_CONFIG_COMMANDS_PRE( + [AC_MSG_CHECKING([that generated files are newer than configure]) + if test -n "$am_sleep_pid"; then + # Hide warnings about reused PIDs. + wait $am_sleep_pid 2>/dev/null + fi + AC_MSG_RESULT([done])]) +rm -f conftest.file +]) + +# Copyright (C) 2009-2014 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_SILENT_RULES([DEFAULT]) +# -------------------------- +# Enable less verbose build rules; with the default set to DEFAULT +# ("yes" being less verbose, "no" or empty being verbose). +AC_DEFUN([AM_SILENT_RULES], +[AC_ARG_ENABLE([silent-rules], [dnl +AS_HELP_STRING( + [--enable-silent-rules], + [less verbose build output (undo: "make V=1")]) +AS_HELP_STRING( + [--disable-silent-rules], + [verbose build output (undo: "make V=0")])dnl +]) +case $enable_silent_rules in @%:@ ((( + yes) AM_DEFAULT_VERBOSITY=0;; + no) AM_DEFAULT_VERBOSITY=1;; + *) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);; +esac +dnl +dnl A few 'make' implementations (e.g., NonStop OS and NextStep) +dnl do not support nested variable expansions. +dnl See automake bug#9928 and bug#10237. +am_make=${MAKE-make} +AC_CACHE_CHECK([whether $am_make supports nested variables], + [am_cv_make_support_nested_variables], + [if AS_ECHO([['TRUE=$(BAR$(V)) +BAR0=false +BAR1=true +V=1 +am__doit: + @$(TRUE) +.PHONY: am__doit']]) | $am_make -f - >/dev/null 2>&1; then + am_cv_make_support_nested_variables=yes +else + am_cv_make_support_nested_variables=no +fi]) +if test $am_cv_make_support_nested_variables = yes; then + dnl Using '$V' instead of '$(V)' breaks IRIX make. + AM_V='$(V)' + AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' +else + AM_V=$AM_DEFAULT_VERBOSITY + AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY +fi +AC_SUBST([AM_V])dnl +AM_SUBST_NOTMAKE([AM_V])dnl +AC_SUBST([AM_DEFAULT_V])dnl +AM_SUBST_NOTMAKE([AM_DEFAULT_V])dnl +AC_SUBST([AM_DEFAULT_VERBOSITY])dnl +AM_BACKSLASH='\' +AC_SUBST([AM_BACKSLASH])dnl +_AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl +]) + +# Copyright (C) 2001-2014 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_PROG_INSTALL_STRIP +# --------------------- +# One issue with vendor 'install' (even GNU) is that you can't +# specify the program used to strip binaries. This is especially +# annoying in cross-compiling environments, where the build's strip +# is unlikely to handle the host's binaries. +# Fortunately install-sh will honor a STRIPPROG variable, so we +# always use install-sh in "make install-strip", and initialize +# STRIPPROG with the value of the STRIP variable (set by the user). +AC_DEFUN([AM_PROG_INSTALL_STRIP], +[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl +# Installed binaries are usually stripped using 'strip' when the user +# run "make install-strip". However 'strip' might not be the right +# tool to use in cross-compilation environments, therefore Automake +# will honor the 'STRIP' environment variable to overrule this program. +dnl Don't test for $cross_compiling = yes, because it might be 'maybe'. +if test "$cross_compiling" != no; then + AC_CHECK_TOOL([STRIP], [strip], :) +fi +INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" +AC_SUBST([INSTALL_STRIP_PROGRAM])]) + +# Copyright (C) 2006-2014 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# _AM_SUBST_NOTMAKE(VARIABLE) +# --------------------------- +# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. +# This macro is traced by Automake. +AC_DEFUN([_AM_SUBST_NOTMAKE]) + +# AM_SUBST_NOTMAKE(VARIABLE) +# -------------------------- +# Public sister of _AM_SUBST_NOTMAKE. +AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) + +# Check how to create a tarball. -*- Autoconf -*- + +# Copyright (C) 2004-2014 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# _AM_PROG_TAR(FORMAT) +# -------------------- +# Check how to create a tarball in format FORMAT. +# FORMAT should be one of 'v7', 'ustar', or 'pax'. +# +# Substitute a variable $(am__tar) that is a command +# writing to stdout a FORMAT-tarball containing the directory +# $tardir. +# tardir=directory && $(am__tar) > result.tar +# +# Substitute a variable $(am__untar) that extract such +# a tarball read from stdin. +# $(am__untar) < result.tar +# +AC_DEFUN([_AM_PROG_TAR], +[# Always define AMTAR for backward compatibility. Yes, it's still used +# in the wild :-( We should find a proper way to deprecate it ... +AC_SUBST([AMTAR], ['$${TAR-tar}']) + +# We'll loop over all known methods to create a tar archive until one works. +_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' + +m4_if([$1], [v7], + [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'], + + [m4_case([$1], + [ustar], + [# The POSIX 1988 'ustar' format is defined with fixed-size fields. + # There is notably a 21 bits limit for the UID and the GID. In fact, + # the 'pax' utility can hang on bigger UID/GID (see automake bug#8343 + # and bug#13588). + am_max_uid=2097151 # 2^21 - 1 + am_max_gid=$am_max_uid + # The $UID and $GID variables are not portable, so we need to resort + # to the POSIX-mandated id(1) utility. Errors in the 'id' calls + # below are definitely unexpected, so allow the users to see them + # (that is, avoid stderr redirection). + am_uid=`id -u || echo unknown` + am_gid=`id -g || echo unknown` + AC_MSG_CHECKING([whether UID '$am_uid' is supported by ustar format]) + if test $am_uid -le $am_max_uid; then + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + _am_tools=none + fi + AC_MSG_CHECKING([whether GID '$am_gid' is supported by ustar format]) + if test $am_gid -le $am_max_gid; then + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + _am_tools=none + fi], + + [pax], + [], + + [m4_fatal([Unknown tar format])]) + + AC_MSG_CHECKING([how to create a $1 tar archive]) + + # Go ahead even if we have the value already cached. We do so because we + # need to set the values for the 'am__tar' and 'am__untar' variables. + _am_tools=${am_cv_prog_tar_$1-$_am_tools} + + for _am_tool in $_am_tools; do + case $_am_tool in + gnutar) + for _am_tar in tar gnutar gtar; do + AM_RUN_LOG([$_am_tar --version]) && break + done + am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' + am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' + am__untar="$_am_tar -xf -" + ;; + plaintar) + # Must skip GNU tar: if it does not support --format= it doesn't create + # ustar tarball either. + (tar --version) >/dev/null 2>&1 && continue + am__tar='tar chf - "$$tardir"' + am__tar_='tar chf - "$tardir"' + am__untar='tar xf -' + ;; + pax) + am__tar='pax -L -x $1 -w "$$tardir"' + am__tar_='pax -L -x $1 -w "$tardir"' + am__untar='pax -r' + ;; + cpio) + am__tar='find "$$tardir" -print | cpio -o -H $1 -L' + am__tar_='find "$tardir" -print | cpio -o -H $1 -L' + am__untar='cpio -i -H $1 -d' + ;; + none) + am__tar=false + am__tar_=false + am__untar=false + ;; + esac + + # If the value was cached, stop now. We just wanted to have am__tar + # and am__untar set. + test -n "${am_cv_prog_tar_$1}" && break + + # tar/untar a dummy directory, and stop if the command works. + rm -rf conftest.dir + mkdir conftest.dir + echo GrepMe > conftest.dir/file + AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) + rm -rf conftest.dir + if test -s conftest.tar; then + AM_RUN_LOG([$am__untar /dev/null 2>&1 && break + fi + done + rm -rf conftest.dir + + AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) + AC_MSG_RESULT([$am_cv_prog_tar_$1])]) + +AC_SUBST([am__tar]) +AC_SUBST([am__untar]) +]) # _AM_PROG_TAR + +m4_include([m4/libtool.m4]) +m4_include([m4/ltoptions.m4]) +m4_include([m4/ltsugar.m4]) +m4_include([m4/ltversion.m4]) +m4_include([m4/lt~obsolete.m4]) +m4_include([acinclude.m4]) diff --git a/autogen.sh b/autogen.sh new file mode 100755 index 0000000..aa5b7a9 --- /dev/null +++ b/autogen.sh @@ -0,0 +1,27 @@ +#!/bin/sh + +# This script does all the magic calls to automake/autoconf and +# friends that are needed to configure a cvs checkout. As described in +# the file HACKING you need a couple of extra tools to run this script +# successfully. +# +# If you are compiling from a released tarball you don't need these +# tools and you shouldn't use this script. Just call ./configure +# directly. + +test -n "$srcdir" || srcdir=`dirname "$0"` +test -n "$srcdir" || srcdir=. + +ORIGDIR=`pwd` +cd $srcdir + +AUTORECONF=`which autoreconf` +if test -z $AUTORECONF; then + echo "*** No autoreconf found, please intall it ***" + exit 1 +fi + +autoreconf --force --install --verbose + +cd $ORIGDIR +test -n "$NOCONFIGURE" || "$srcdir/configure" "$@" diff --git a/babl.pc.in b/babl.pc.in new file mode 100644 index 0000000..3f2049f --- /dev/null +++ b/babl.pc.in @@ -0,0 +1,11 @@ +prefix=@prefix@ +exec_prefix=@exec_prefix@ +libdir=@libdir@ +includedir=@includedir@ + +Name: babl +Description: Dynamic, any to any, pixel format conversion library +Version: @BABL_REAL_VERSION@ +Cflags: -I${includedir}/@PACKAGE_NAME@-@BABL_API_VERSION@ +Libs: -L${libdir} -l@PACKAGE_NAME@-@BABL_API_VERSION@ +Libs.private: @MATH_LIB@ @THREAD_LIB@ diff --git a/babl/Makefile.am b/babl/Makefile.am new file mode 100644 index 0000000..6827faa --- /dev/null +++ b/babl/Makefile.am @@ -0,0 +1,93 @@ +## Source directory + +if PLATFORM_WIN32 +no_undefined = -no-undefined +endif + +SUBDIRS = base + +c_sources = \ + babl.c \ + babl-component.c \ + babl-conversion.c \ + babl-core.c \ + babl-db.c \ + babl-extension.c \ + babl-fish-path.c \ + babl-fish-reference.c \ + babl-fish-simple.c \ + babl-fish-stats.c \ + babl-fish.c \ + babl-format.c \ + babl-hash-table.c \ + babl-image.c \ + babl-internal.c \ + babl-introspect.c \ + babl-list.c \ + babl-memory.c \ + babl-model.c \ + babl-mutex.c \ + babl-palette.c \ + babl-ref-pixels.c \ + babl-sampling.c \ + babl-sanity.c \ + babl-type.c \ + babl-util.c \ + babl-cpuaccel.c \ + babl-version.c + +h_sources = \ + babl.h \ + babl-class.h \ + babl-classes.h \ + babl-component.h \ + babl-conversion.h \ + babl-cpuaccel.h \ + babl-db.h \ + babl-extension.h \ + babl-fish.h \ + babl-format.h \ + babl-hash-table.h \ + babl-ids.h \ + babl-image.h \ + babl-internal.h \ + babl-introspect.h \ + babl-list.h \ + babl-macros.h \ + babl-memory.h \ + babl-model.h \ + babl-mutex.h \ + babl-ref-pixels.h \ + babl-sampling.h \ + babl-type.h \ + babl-types.h \ + babl-util.h + +library_includedir=$(includedir)/babl-$(BABL_API_VERSION)/babl +libinc_hdrs = \ + babl-introspect.h \ + babl-macros.h \ + babl-types.h \ + babl.h +libinc_generated_hdrs = \ + babl-version.h +library_include_HEADERS = \ + $(libinc_hdrs) $(libinc_generated_hdrs) + +AM_CPPFLAGS = \ + -DLIBDIR=\""$(libdir)"\" \ + -I$(top_srcdir) \ + -I$(top_srcdir)/babl/base + +lib_LTLIBRARIES= libbabl-@BABL_API_VERSION@.la +libbabl_@BABL_API_VERSION@_la_SOURCES= $(h_sources) $(c_sources) +libbabl_@BABL_API_VERSION@_la_LIBADD=\ + base/libbase.la \ + @LTLIBOBJS@ + +libbabl_@BABL_API_VERSION@_la_LDFLAGS= \ + ${no_undefined} $(MATH_LIB) $(THREAD_LIB) \ + -version-info $(BABL_LIBRARY_VERSION) + +EXTRA_DIST = babl-ref-pixels.inc +# CLEANFILES = diff --git a/babl/Makefile.in b/babl/Makefile.in new file mode 100644 index 0000000..2e5feaf --- /dev/null +++ b/babl/Makefile.in @@ -0,0 +1,949 @@ +# Makefile.in generated by automake 1.15 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2014 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + + +VPATH = @srcdir@ +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +subdir = babl +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(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)/acinclude.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(library_include_HEADERS) \ + $(am__DIST_COMMON) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = babl-version.h +CONFIG_CLEAN_VPATH_FILES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +am__installdirs = "$(DESTDIR)$(libdir)" \ + "$(DESTDIR)$(library_includedir)" +LTLIBRARIES = $(lib_LTLIBRARIES) +libbabl_@BABL_API_VERSION@_la_DEPENDENCIES = base/libbase.la \ + @LTLIBOBJS@ $(am__empty) +am__objects_1 = +am__objects_2 = babl.lo babl-component.lo babl-conversion.lo \ + babl-core.lo babl-db.lo babl-extension.lo babl-fish-path.lo \ + babl-fish-reference.lo babl-fish-simple.lo babl-fish-stats.lo \ + babl-fish.lo babl-format.lo babl-hash-table.lo babl-image.lo \ + babl-internal.lo babl-introspect.lo babl-list.lo \ + babl-memory.lo babl-model.lo babl-mutex.lo babl-palette.lo \ + babl-ref-pixels.lo babl-sampling.lo babl-sanity.lo \ + babl-type.lo babl-util.lo babl-cpuaccel.lo babl-version.lo +am_libbabl_@BABL_API_VERSION@_la_OBJECTS = $(am__objects_1) \ + $(am__objects_2) +libbabl_@BABL_API_VERSION@_la_OBJECTS = \ + $(am_libbabl_@BABL_API_VERSION@_la_OBJECTS) +AM_V_lt = $(am__v_lt_@AM_V@) +am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) +am__v_lt_0 = --silent +am__v_lt_1 = +libbabl_@BABL_API_VERSION@_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ + $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ + $(AM_CFLAGS) $(CFLAGS) \ + $(libbabl_@BABL_API_VERSION@_la_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_@AM_V@) +am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) +am__v_CC_0 = @echo " CC " $@; +am__v_CC_1 = +CCLD = $(CC) +LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_@AM_V@) +am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) +am__v_CCLD_0 = @echo " CCLD " $@; +am__v_CCLD_1 = +SOURCES = $(libbabl_@BABL_API_VERSION@_la_SOURCES) +DIST_SOURCES = $(libbabl_@BABL_API_VERSION@_la_SOURCES) +RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ + ctags-recursive dvi-recursive html-recursive info-recursive \ + install-data-recursive install-dvi-recursive \ + install-exec-recursive install-html-recursive \ + install-info-recursive install-pdf-recursive \ + install-ps-recursive install-recursive installcheck-recursive \ + installdirs-recursive pdf-recursive ps-recursive \ + tags-recursive uninstall-recursive +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +HEADERS = $(library_include_HEADERS) +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +am__recursive_targets = \ + $(RECURSIVE_TARGETS) \ + $(RECURSIVE_CLEAN_TARGETS) \ + $(am__extra_recursive_targets) +AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ + distdir +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = $(SUBDIRS) +am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/babl-version.h.in \ + $(top_srcdir)/depcomp gettimeofday.c +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +am__relativize = \ + dir0=`pwd`; \ + sed_first='s,^\([^/]*\)/.*$$,\1,'; \ + sed_rest='s,^[^/]*/*,,'; \ + sed_last='s,^.*/\([^/]*\)$$,\1,'; \ + sed_butlast='s,/*[^/]*$$,,'; \ + while test -n "$$dir1"; do \ + first=`echo "$$dir1" | sed -e "$$sed_first"`; \ + if test "$$first" != "."; then \ + if test "$$first" = ".."; then \ + dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ + dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ + else \ + first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ + if test "$$first2" = "$$first"; then \ + dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ + else \ + dir2="../$$dir2"; \ + fi; \ + dir0="$$dir0"/"$$first"; \ + fi; \ + fi; \ + dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ + done; \ + reldir="$$dir2" +ACLOCAL = @ACLOCAL@ +ALTIVEC_EXTRA_CFLAGS = @ALTIVEC_EXTRA_CFLAGS@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BABL_API_VERSION = @BABL_API_VERSION@ +BABL_BINARY_AGE = @BABL_BINARY_AGE@ +BABL_CURRENT_MINUS_AGE = @BABL_CURRENT_MINUS_AGE@ +BABL_INTERFACE_AGE = @BABL_INTERFACE_AGE@ +BABL_LIBRARY_VERSION = @BABL_LIBRARY_VERSION@ +BABL_MAJOR_VERSION = @BABL_MAJOR_VERSION@ +BABL_MICRO_VERSION = @BABL_MICRO_VERSION@ +BABL_MINOR_VERSION = @BABL_MINOR_VERSION@ +BABL_REAL_VERSION = @BABL_REAL_VERSION@ +BABL_RELEASE = @BABL_RELEASE@ +BABL_UNSTABLE = @BABL_UNSTABLE@ +BABL_VERSION = @BABL_VERSION@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DIR_SEP = @DIR_SEP@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F16C_EXTRA_CFLAGS = @F16C_EXTRA_CFLAGS@ +FGREP = @FGREP@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MATH_LIB = @MATH_LIB@ +MKDIR_P = @MKDIR_P@ +MMX_EXTRA_CFLAGS = @MMX_EXTRA_CFLAGS@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEP = @PATH_SEP@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +RANLIB = @RANLIB@ +RSVG = @RSVG@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHREXT = @SHREXT@ +SSE2_EXTRA_CFLAGS = @SSE2_EXTRA_CFLAGS@ +SSE4_1_EXTRA_CFLAGS = @SSE4_1_EXTRA_CFLAGS@ +SSE_EXTRA_CFLAGS = @SSE_EXTRA_CFLAGS@ +STRIP = @STRIP@ +THREAD_LIB = @THREAD_LIB@ +VERSION = @VERSION@ +W3M = @W3M@ +WEBSITE_HOST = @WEBSITE_HOST@ +WEBSITE_LOCATION = @WEBSITE_LOCATION@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +@PLATFORM_WIN32_TRUE@no_undefined = -no-undefined +SUBDIRS = base +c_sources = \ + babl.c \ + babl-component.c \ + babl-conversion.c \ + babl-core.c \ + babl-db.c \ + babl-extension.c \ + babl-fish-path.c \ + babl-fish-reference.c \ + babl-fish-simple.c \ + babl-fish-stats.c \ + babl-fish.c \ + babl-format.c \ + babl-hash-table.c \ + babl-image.c \ + babl-internal.c \ + babl-introspect.c \ + babl-list.c \ + babl-memory.c \ + babl-model.c \ + babl-mutex.c \ + babl-palette.c \ + babl-ref-pixels.c \ + babl-sampling.c \ + babl-sanity.c \ + babl-type.c \ + babl-util.c \ + babl-cpuaccel.c \ + babl-version.c + +h_sources = \ + babl.h \ + babl-class.h \ + babl-classes.h \ + babl-component.h \ + babl-conversion.h \ + babl-cpuaccel.h \ + babl-db.h \ + babl-extension.h \ + babl-fish.h \ + babl-format.h \ + babl-hash-table.h \ + babl-ids.h \ + babl-image.h \ + babl-internal.h \ + babl-introspect.h \ + babl-list.h \ + babl-macros.h \ + babl-memory.h \ + babl-model.h \ + babl-mutex.h \ + babl-ref-pixels.h \ + babl-sampling.h \ + babl-type.h \ + babl-types.h \ + babl-util.h + +library_includedir = $(includedir)/babl-$(BABL_API_VERSION)/babl +libinc_hdrs = \ + babl-introspect.h \ + babl-macros.h \ + babl-types.h \ + babl.h + +libinc_generated_hdrs = \ + babl-version.h + +library_include_HEADERS = \ + $(libinc_hdrs) $(libinc_generated_hdrs) + +AM_CPPFLAGS = \ + -DLIBDIR=\""$(libdir)"\" \ + -I$(top_srcdir) \ + -I$(top_srcdir)/babl/base + +lib_LTLIBRARIES = libbabl-@BABL_API_VERSION@.la +libbabl_@BABL_API_VERSION@_la_SOURCES = $(h_sources) $(c_sources) +libbabl_@BABL_API_VERSION@_la_LIBADD = \ + base/libbase.la \ + @LTLIBOBJS@ + +libbabl_@BABL_API_VERSION@_la_LDFLAGS = \ + ${no_undefined} $(MATH_LIB) $(THREAD_LIB) \ + -version-info $(BABL_LIBRARY_VERSION) + +EXTRA_DIST = babl-ref-pixels.inc +all: all-recursive + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign babl/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign babl/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +babl-version.h: $(top_builddir)/config.status $(srcdir)/babl-version.h.in + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ + +install-libLTLIBRARIES: $(lib_LTLIBRARIES) + @$(NORMAL_INSTALL) + @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ + list2=; for p in $$list; do \ + if test -f $$p; then \ + list2="$$list2 $$p"; \ + else :; fi; \ + done; \ + test -z "$$list2" || { \ + echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ + } + +uninstall-libLTLIBRARIES: + @$(NORMAL_UNINSTALL) + @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ + for p in $$list; do \ + $(am__strip_dir) \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ + done + +clean-libLTLIBRARIES: + -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) + @list='$(lib_LTLIBRARIES)'; \ + locs=`for p in $$list; do echo $$p; done | \ + sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ + sort -u`; \ + test -z "$$locs" || { \ + echo rm -f $${locs}; \ + rm -f $${locs}; \ + } + +libbabl-@BABL_API_VERSION@.la: $(libbabl_@BABL_API_VERSION@_la_OBJECTS) $(libbabl_@BABL_API_VERSION@_la_DEPENDENCIES) $(EXTRA_libbabl_@BABL_API_VERSION@_la_DEPENDENCIES) + $(AM_V_CCLD)$(libbabl_@BABL_API_VERSION@_la_LINK) -rpath $(libdir) $(libbabl_@BABL_API_VERSION@_la_OBJECTS) $(libbabl_@BABL_API_VERSION@_la_LIBADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/gettimeofday.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/babl-component.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/babl-conversion.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/babl-core.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/babl-cpuaccel.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/babl-db.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/babl-extension.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/babl-fish-path.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/babl-fish-reference.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/babl-fish-simple.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/babl-fish-stats.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/babl-fish.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/babl-format.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/babl-hash-table.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/babl-image.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/babl-internal.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/babl-introspect.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/babl-list.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/babl-memory.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/babl-model.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/babl-mutex.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/babl-palette.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/babl-ref-pixels.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/babl-sampling.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/babl-sanity.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/babl-type.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/babl-util.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/babl-version.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/babl.Plo@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< + +.c.obj: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-library_includeHEADERS: $(library_include_HEADERS) + @$(NORMAL_INSTALL) + @list='$(library_include_HEADERS)'; test -n "$(library_includedir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(library_includedir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(library_includedir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(library_includedir)'"; \ + $(INSTALL_HEADER) $$files "$(DESTDIR)$(library_includedir)" || exit $$?; \ + done + +uninstall-library_includeHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(library_include_HEADERS)'; test -n "$(library_includedir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(library_includedir)'; $(am__uninstall_files_from_dir) + +# This directory's subdirectories are mostly independent; you can cd +# into them and run 'make' without going through this Makefile. +# To change the values of 'make' variables: instead of editing Makefiles, +# (1) if the variable is set in 'config.status', edit 'config.status' +# (which will cause the Makefiles to be regenerated when you run 'make'); +# (2) otherwise, pass the desired values on the 'make' command line. +$(am__recursive_targets): + @fail=; \ + if $(am__make_keepgoing); then \ + failcom='fail=yes'; \ + else \ + failcom='exit 1'; \ + fi; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-recursive +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: ctags-recursive + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscopelist: cscopelist-recursive + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + $(am__make_dryrun) \ + || test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ + $(am__relativize); \ + new_distdir=$$reldir; \ + dir1=$$subdir; dir2="$(top_distdir)"; \ + $(am__relativize); \ + new_top_distdir=$$reldir; \ + echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ + echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ + ($(am__cd) $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$new_top_distdir" \ + distdir="$$new_distdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + am__skip_mode_fix=: \ + distdir) \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-recursive +all-am: Makefile $(LTLIBRARIES) $(HEADERS) +installdirs: installdirs-recursive +installdirs-am: + for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(library_includedir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-recursive + +clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ + mostlyclean-am + +distclean: distclean-recursive + -rm -rf $(DEPDIR) ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +html-am: + +info: info-recursive + +info-am: + +install-data-am: install-library_includeHEADERS + +install-dvi: install-dvi-recursive + +install-dvi-am: + +install-exec-am: install-libLTLIBRARIES + +install-html: install-html-recursive + +install-html-am: + +install-info: install-info-recursive + +install-info-am: + +install-man: + +install-pdf: install-pdf-recursive + +install-pdf-am: + +install-ps: install-ps-recursive + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -rf $(DEPDIR) ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: uninstall-libLTLIBRARIES \ + uninstall-library_includeHEADERS + +.MAKE: $(am__recursive_targets) install-am install-strip + +.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ + check-am clean clean-generic clean-libLTLIBRARIES \ + clean-libtool cscopelist-am ctags ctags-am distclean \ + distclean-compile distclean-generic distclean-libtool \ + distclean-tags distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am \ + install-libLTLIBRARIES install-library_includeHEADERS \ + install-man install-pdf install-pdf-am install-ps \ + install-ps-am install-strip installcheck installcheck-am \ + installdirs installdirs-am maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags tags-am uninstall uninstall-am uninstall-libLTLIBRARIES \ + uninstall-library_includeHEADERS + +.PRECIOUS: Makefile + +# CLEANFILES = + +# 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. +.NOEXPORT: diff --git a/babl/babl-class.h b/babl/babl-class.h new file mode 100644 index 0000000..47c783d --- /dev/null +++ b/babl/babl-class.h @@ -0,0 +1,56 @@ +/* babl - dynamically extendable universal pixel conversion library. + * Copyright (C) 2005-2008, Øyvind KolÃ¥s and others. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, see + * . + */ + +#ifndef _BABL_CLASS_H +#define _BABL_CLASS_H + +#include "babl.h" + + +typedef struct _BablList BablList; + +typedef int BablClassType; + +typedef int (*BablEachFunction) (Babl *entry, + void *data); + +/* All Classes in babl have common functionality like the ability + * to be iterated over, common functionality is defined through these + * macros. + */ +#define BABL_CLASS_DECLARE(klass) \ + \ +BablDb * babl_##klass##_db (void); \ +const Babl * babl_##klass##_from_id (int id); \ +void babl_##klass##_class_for_each (BablEachFunction each_fun, \ + void *user_data) + +/* common header for any item inserted into database, the actual + * implementation of babl-instance is in babl-internal + */ +typedef struct +{ + BablClassType class_type; + int id; /*< a numerical id, look at 'babl-ids.h' for the reserved + ones */ + void *creator; + char *name; /*< the name this type exists under */ +} BablInstance; + + +#endif diff --git a/babl/babl-classes.h b/babl/babl-classes.h new file mode 100644 index 0000000..fa25c4e --- /dev/null +++ b/babl/babl-classes.h @@ -0,0 +1,91 @@ +/* babl - dynamically extendable universal pixel conversion library. + * Copyright (C) 2005-2008, Øyvind KolÃ¥s and others. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, see + * . + */ + +#ifndef _BABL_CLASSES_H +#define _BABL_CLASSES_H + +#include "babl-class.h" +#include "babl-db.h" + +/* magic number used at the start of all babl objects, used to do + * differentiation in polymorphic functions. (as well as manual type + * check assertions). + */ +#define BABL_MAGIC 0xbab100 + +/* class types */ +enum { + BABL_INSTANCE = BABL_MAGIC, + BABL_TYPE, + BABL_TYPE_INTEGER, + BABL_TYPE_FLOAT, + BABL_SAMPLING, + BABL_COMPONENT, + BABL_MODEL, + BABL_FORMAT, + + BABL_CONVERSION, + BABL_CONVERSION_LINEAR, + BABL_CONVERSION_PLANE, + BABL_CONVERSION_PLANAR, + + BABL_FISH, + BABL_FISH_REFERENCE, + BABL_FISH_SIMPLE, + BABL_FISH_PATH, + BABL_IMAGE, + + BABL_EXTENSION, + + BABL_SKY +}; + +#include "babl-type.h" +#include "babl-sampling.h" +#include "babl-component.h" +#include "babl-model.h" +#include "babl-format.h" +#include "babl-image.h" +#include "babl-conversion.h" +#include "babl-fish.h" +#include "babl-extension.h" + + +/* This union can be used for convenient access to any field without + * the need to cast if the variable already is of the type Babl* + */ +typedef union _Babl +{ + BablClassType class_type; + BablInstance instance; + BablType type; + BablSampling sampling; + BablComponent component; + BablModel model; + BablFormat format; + BablConversion conversion; + BablImage image; + BablFish fish; + BablFishReference fish_reference; + BablFishSimple fish_simple; + BablFishPath fish_path; + BablExtension extension; +} _Babl; + + +#endif diff --git a/babl/babl-component.c b/babl/babl-component.c new file mode 100644 index 0000000..c3b617e --- /dev/null +++ b/babl/babl-component.c @@ -0,0 +1,145 @@ +/* babl - dynamically extendable universal pixel conversion library. + * Copyright (C) 2005, Øyvind KolÃ¥s. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, see + * . + */ + +#include "config.h" +#define NEEDS_BABL_DB +#include "babl-internal.h" +#include "babl-db.h" +#include + +#include + +static Babl * +component_new (const char *name, + int id, + int luma, + int chroma, + int alpha) +{ + Babl *babl; + + babl = babl_malloc (sizeof (BablComponent) + strlen (name) + 1); + babl->instance.name = (char *) babl + sizeof (BablComponent); + strcpy (babl->instance.name, name); + + babl->class_type = BABL_COMPONENT; + babl->instance.id = id; + babl->component.luma = luma; + babl->component.chroma = chroma; + babl->component.alpha = alpha; + return babl; +} + + +static int +is_component_duplicate (Babl *babl, int luma, int chroma, int alpha) +{ + if (babl->component.luma != luma || + babl->component.chroma != chroma || + babl->component.alpha != alpha) + return 0; + + return 1; +} + + +const Babl * +babl_component_new (void *first_arg, + ...) +{ + va_list varg; + Babl *babl; + int id = 0; + int luma = 0; + int chroma = 0; + int alpha = 0; + const char *name = first_arg; + const char *arg; + + va_start (varg, first_arg); + + while (1) + { + arg = va_arg (varg, char *); + if (!arg) + break; + + /* first, we assume arguments to be strings */ + if (!strcmp (arg, "id")) + { + id = va_arg (varg, int); + } + + else if (!strcmp (arg, "luma")) + { + luma = 1; + } + + else if (!strcmp (arg, "chroma")) + { + chroma = 1; + } + + else if (!strcmp (arg, "alpha")) + { + alpha = 1; + } + + /* if we didn't point to a known string, we assume argument to be babl */ + else if (BABL_IS_BABL (arg)) + { +#ifdef BABL_LOG + Babl *babl = (Babl *) arg; + babl_log ("%s unexpected", babl_class_name (babl->class_type)); +#endif + } + + else + { + babl_fatal ("unhandled argument '%s' for component '%s'", arg, name); + } + } + + va_end (varg); + + babl = babl_db_exist (db, id, name); + if (id && !babl && babl_db_exist (db, 0, name)) + babl_fatal ("Trying to reregister BablComponent '%s' with different id!", + name); + + if (babl) + { + /* There is an instance already registered by the required id/name, + * returning the preexistent one instead if it doesn't differ. + */ + if (!is_component_duplicate (babl, luma, chroma, alpha)) + babl_fatal ("BablComponent '%s' already registered " + "with different attributes!", name); + return babl; + } + + babl = component_new (name, id, luma, chroma, alpha); + + /* Since there is not an already registered instance by the required + * id/name, inserting newly created class into database. + */ + babl_db_insert (db, babl); + return babl; +} + +BABL_CLASS_IMPLEMENT (component) diff --git a/babl/babl-component.h b/babl/babl-component.h new file mode 100644 index 0000000..2c45cdc --- /dev/null +++ b/babl/babl-component.h @@ -0,0 +1,36 @@ +/* babl - dynamically extendable universal pixel conversion library. + * Copyright (C) 2005-2008, Øyvind KolÃ¥s and others. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, see + * . + */ + +#ifndef _BABL_COMPONENT_H +#define _BABL_COMPONENT_H + + +/****************************************************************/ +/* BablComponent */ +BABL_CLASS_DECLARE (component); + + +typedef struct +{ + BablInstance instance; + int luma; + int chroma; + int alpha; +} BablComponent; + +#endif diff --git a/babl/babl-conversion.c b/babl/babl-conversion.c new file mode 100644 index 0000000..37453e0 --- /dev/null +++ b/babl/babl-conversion.c @@ -0,0 +1,551 @@ +/* babl - dynamically extendable universal pixel conversion library. + * Copyright (C) 2005, Øyvind KolÃ¥s. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, see + * . + */ + + +#include "config.h" +#include +#include +#include +#define NEEDS_BABL_DB +#include "babl-internal.h" +#include "babl-db.h" +#include "babl-ref-pixels.h" + +static Babl * +conversion_new (const char *name, + int id, + Babl *source, + Babl *destination, + BablFuncLinear linear, + BablFuncPlane plane, + BablFuncPlanar planar, + void *user_data) +{ + Babl *babl = NULL; + + babl_assert (source->class_type == + destination->class_type); + + babl = babl_malloc (sizeof (BablConversion) + strlen (name) + 1); + babl->instance.name = (char *) babl + sizeof (BablConversion); + strcpy (babl->instance.name, name); + + if (linear) + { + babl->class_type = BABL_CONVERSION_LINEAR; + babl->conversion.function.linear = linear; + } + else if (plane) + { + babl->class_type = BABL_CONVERSION_PLANE; + babl->conversion.function.plane = plane; + } + else if (planar) + { + babl->class_type = BABL_CONVERSION_PLANAR; + babl->conversion.function.planar = planar; + } + switch (source->class_type) + { + case BABL_TYPE: + if (linear) /* maybe linear could take a special argument, passed as an + additional key/value pair in the constructor. To cast it + as a generic N-element conversion, thus making it applicable + to being generic for any within model conversion of plain + buffers. + */ + { + babl_fatal ("linear conversions not supported for %s", + babl_class_name (source->class_type)); + } + else if (planar) + { + babl_fatal ("planar conversions not supported for %s", + babl_class_name (source->class_type)); + } + break; + + case BABL_MODEL: + if (plane) + { + babl_fatal ("plane conversions not supported for %s", + babl_class_name (source->class_type)); + } + break; + + case BABL_FORMAT: + break; + + default: + babl_fatal ("%s unexpected", babl_class_name (babl->class_type)); + break; + } + + babl->instance.id = id; + babl->conversion.source = source; + babl->conversion.destination = destination; + babl->conversion.error = -1.0; + babl->conversion.cost = 69L; + + babl->conversion.pixels = 0; + babl->conversion.processings = 0; + + babl->conversion.data = user_data; + + if (babl->class_type == BABL_CONVERSION_LINEAR && + BABL (babl->conversion.source)->class_type == BABL_MODEL) + { + const Babl *src_format = NULL; + const Babl *dst_format = NULL; + if (BABL (babl->conversion.source) == babl_model_from_id (BABL_RGBA)) + { + src_format = babl_format_from_id (BABL_RGBA_DOUBLE); + dst_format = babl_format_with_model_as_type ( + BABL (babl->conversion.destination), + babl_type_from_id (BABL_DOUBLE)); + } + else if (BABL (babl->conversion.destination) == babl_model_from_id (BABL_RGBA)) + { + src_format = babl_format_with_model_as_type ( + BABL (babl->conversion.source), + babl_type_from_id (BABL_DOUBLE)); + dst_format = babl_format_from_id (BABL_RGBA_DOUBLE); + } + else + { + babl_fatal ("neither source nor destination model is RGBA (requirement might be temporary)"); + } + babl_conversion_new ( + src_format, + dst_format, + "linear", linear, + "data", user_data, + NULL); + babl->conversion.error = 0.0; + } + + return babl; +} + +static char buf[512] = ""; +static int collisions = 0; +static char * +create_name (Babl *source, Babl *destination, int type) +{ + if (babl_extender ()) + { + snprintf (buf, 512 - 1, "%s %i: %s%s to %s", + BABL (babl_extender ())->instance.name, + collisions, + type == BABL_CONVERSION_LINEAR ? "" : + type == BABL_CONVERSION_PLANE ? "plane " : + type == BABL_CONVERSION_PLANAR ? "planar " : "Eeeek! ", + source->instance.name, + destination->instance.name); + buf[511] = '\0'; + } + else + { + snprintf (buf, 512 - 1, "%s %s to %s", + type == BABL_CONVERSION_LINEAR ? "" : + type == BABL_CONVERSION_PLANE ? "plane " : + type == BABL_CONVERSION_PLANAR ? "planar " : "Eeeek! ", + source->instance.name, + destination->instance.name); + buf[511] = '\0'; + } + return buf; +} + +const Babl * +babl_conversion_new (const void *first_arg, + ...) +{ + va_list varg; + Babl *babl; + + int id = 0; + BablFuncLinear linear = NULL; + BablFuncPlane plane = NULL; + BablFuncPlanar planar = NULL; + int type = 0; + int got_func = 0; + const char *arg = first_arg; + void *user_data= NULL; + + Babl *source; + Babl *destination; + + char *name; + + va_start (varg, first_arg); + source = (Babl *) arg; + destination = va_arg (varg, Babl *); + arg = va_arg (varg, char *); + + assert (BABL_IS_BABL (source)); + assert (BABL_IS_BABL (destination)); + + + while (arg) + { + if (!strcmp (arg, "id")) + { + id = va_arg (varg, int); + } + + else if (!strcmp (arg, "data")) + { + user_data = va_arg (varg, void*); + } + + else if (!strcmp (arg, "linear")) + { + if (got_func++) + { + babl_fatal ("already got a conversion func\n"); + } + linear = va_arg (varg, BablFuncLinear); + } + + else if (!strcmp (arg, "plane")) + { + if (got_func++) + { + babl_fatal ("already got a conversion func\n"); + } + plane = va_arg (varg, BablFuncPlane); + } + + else if (!strcmp (arg, "planar")) + { + if (got_func++) + { + babl_fatal ("already got a conversion func\n"); + } + planar = va_arg (varg, BablFuncPlanar); + } + + else + { + babl_fatal ("unhandled argument '%s'", arg); + } + + arg = va_arg (varg, char *); + } + + va_end (varg); + + assert (source); + assert (destination); + + if (linear) + { + type = BABL_CONVERSION_LINEAR; + } + else if (plane) + { + type = BABL_CONVERSION_PLANE; + } + else if (planar) + { + type = BABL_CONVERSION_PLANAR; + } + + collisions = 0; + name = create_name (source, destination, type); + + babl = babl_db_exist (db, id, name); + while (babl) + { + /* we allow multiple conversions to be registered per extender, each + of them ending up with their own unique name + */ + collisions++; + name = create_name (source, destination, type); + babl = babl_db_exist (db, id, name); + } + + babl = conversion_new (name, id, source, destination, linear, plane, planar, + user_data); + + /* Since there is not an already registered instance by the required + * id/name, inserting newly created class into database. + */ + babl_db_insert (db, babl); + if (!source->type.from_list) + source->type.from_list = babl_list_init_with_size (BABL_CONVERSIONS); + babl_list_insert_last (source->type.from_list, babl); + return babl; +} + +static long +babl_conversion_linear_process (BablConversion *conversion, + const void *source, + void *destination, + long n) +{ + return conversion->function.linear (source, destination, n, conversion->data); +} + +static long +babl_conversion_plane_process (BablConversion *conversion, + const void *source, + void *destination, + int src_pitch, + int dst_pitch, + long n) +{ + return conversion->function.plane (source, destination, + src_pitch, dst_pitch, + n, + conversion->data); +} + +static long +babl_conversion_planar_process (BablConversion *conversion, + BablImage *source, + BablImage *destination, + long n) +{ +#ifdef USE_ALLOCA + const char **src_data = alloca (sizeof (void *) * source->components); + char **dst_data = alloca (sizeof (void *) * destination->components); +#else + const char *src_data[BABL_MAX_COMPONENTS]; + char *dst_data[BABL_MAX_COMPONENTS]; +#endif + + memcpy (src_data, source->data, sizeof (void *) * source->components); + memcpy (dst_data, destination->data, sizeof (void *) * destination->components); + + return conversion->function.planar (source->components, + src_data, + source->pitch, + destination->components, + dst_data, + destination->pitch, + n, + conversion->data); +} + +long +babl_conversion_process (const Babl *babl, + const char *source, + char *destination, + long n) +{ + BablConversion *conversion = (BablConversion *) babl; + + babl_assert (BABL_IS_BABL (conversion)); + + switch (BABL (conversion)->class_type) + { + case BABL_CONVERSION_PLANE: + { + const void *src_data = NULL; + void *dst_data = NULL; + int src_pitch = 0; + int dst_pitch = 0; + + if (BABL_IS_BABL (source)) + { + BablImage *img; + + img = (BablImage *) source; + src_data = img->data[0]; + src_pitch = img->pitch[0]; + } + if (BABL_IS_BABL (destination)) + { + BablImage *img = (BablImage *) destination; + + dst_data = img->data[0]; + dst_pitch = img->pitch[0]; + } + + if (!src_data) + src_data = source; + if (!src_pitch) + src_pitch = BABL (conversion->source)->type.bits / 8; + if (!dst_data) + dst_data = destination; + if (!dst_pitch) + dst_pitch = BABL (conversion->destination)->type.bits / 8; + + babl_conversion_plane_process (conversion, + src_data, dst_data, + src_pitch, dst_pitch, + n); + } + break; + + case BABL_CONVERSION_PLANAR: + babl_assert (BABL_IS_BABL (source)); + babl_assert (BABL_IS_BABL (destination)); + + babl_conversion_planar_process (conversion, + (BablImage *) source, + (BablImage *) destination, + n); + break; + + case BABL_CONVERSION_LINEAR: + /* the assertions relied on a babl_malloc structure + * + * babl_assert (!BABL_IS_BABL (source)); + babl_assert (!BABL_IS_BABL (destination));*/ + + babl_conversion_linear_process (conversion, + source, + destination, + n); + break; + + default: + babl_log ("args=(%s, %p, %p, %li) unhandled conversion type: %s", + conversion->instance.name, source, destination, n, + babl_class_name (conversion->instance.class_type)); + return 0; + break; + } + + conversion->processings++; + conversion->pixels += n; + return n; +} + +long +babl_conversion_cost (BablConversion *conversion) +{ + if (!conversion) + return 100000000L; + if (conversion->error == -1.0) + babl_conversion_error (conversion); + return conversion->cost; +} + +double +babl_conversion_error (BablConversion *conversion) +{ + Babl *fmt_source; + Babl *fmt_destination; + + const Babl *fmt_rgba_double = babl_format_new (babl_model ("RGBA"), + babl_type ("double"), + babl_component ("R"), + babl_component ("G"), + babl_component ("B"), + babl_component ("A"), + NULL); + + double error = 0.0; + long ticks_start = 0; + long ticks_end = 0; + + const int test_pixels = babl_get_num_conversion_test_pixels (); + const double *test = babl_get_conversion_test_pixels (); + + void *source; + void *destination; + double *destination_rgba_double; + void *ref_destination; + double *ref_destination_rgba_double; + + Babl *fish_rgba_to_source; + Babl *fish_reference; + Babl *fish_destination_to_rgba; + + if (!conversion) + return 0.0; + + if (conversion->error != -1.0) /* double conversion against a set value should work */ + { + return conversion->error; + } + + fmt_source = BABL (conversion->source); + fmt_destination = BABL (conversion->destination); + + fish_rgba_to_source = babl_fish_reference (fmt_rgba_double, fmt_source); + fish_reference = babl_fish_reference (fmt_source, fmt_destination); + fish_destination_to_rgba = babl_fish_reference (fmt_destination, fmt_rgba_double); + + if (fmt_source == fmt_destination) + { + conversion->error = 0.0; + return 0.0; + } + + if (!(fmt_source->instance.id != BABL_RGBA && + fmt_destination->instance.id != BABL_RGBA && + fmt_source->instance.id != BABL_DOUBLE && + fmt_destination->instance.id != BABL_DOUBLE && + fmt_source->class_type == BABL_FORMAT && + fmt_destination->class_type == BABL_FORMAT)) + { + conversion->error = 0.000042; + } + + source = babl_calloc (test_pixels, fmt_source->format.bytes_per_pixel); + destination = babl_calloc (test_pixels, fmt_destination->format.bytes_per_pixel); + ref_destination = babl_calloc (test_pixels, fmt_destination->format.bytes_per_pixel); + destination_rgba_double = babl_calloc (test_pixels, fmt_rgba_double->format.bytes_per_pixel); + ref_destination_rgba_double = babl_calloc (test_pixels, fmt_rgba_double->format.bytes_per_pixel); + + babl_process (fish_rgba_to_source, + test, source, test_pixels); + + ticks_start = babl_ticks (); + babl_process (babl_fish_simple (conversion), + source, destination, test_pixels); + ticks_end = babl_ticks (); + + babl_process (fish_reference, + source, ref_destination, test_pixels); + + babl_process (fish_destination_to_rgba, + ref_destination, ref_destination_rgba_double, test_pixels); + babl_process (fish_destination_to_rgba, + destination, destination_rgba_double, test_pixels); + + error = babl_rel_avg_error (destination_rgba_double, + ref_destination_rgba_double, + test_pixels * 4); + + fish_rgba_to_source->fish.processings--; + fish_reference->fish.processings--; + fish_destination_to_rgba->fish.processings -= 2; + + fish_rgba_to_source->fish.pixels -= test_pixels; + fish_reference->fish.pixels -= test_pixels; + fish_destination_to_rgba->fish.pixels -= 2 * test_pixels; + + babl_free (source); + babl_free (destination); + babl_free (destination_rgba_double); + babl_free (ref_destination); + babl_free (ref_destination_rgba_double); + + conversion->error = error; + conversion->cost = babl_process_cost (ticks_start, ticks_end); + + return error; +} + +BABL_CLASS_IMPLEMENT (conversion) diff --git a/babl/babl-conversion.h b/babl/babl-conversion.h new file mode 100644 index 0000000..902beb5 --- /dev/null +++ b/babl/babl-conversion.h @@ -0,0 +1,55 @@ +/* babl - dynamically extendable universal pixel conversion library. + * Copyright (C) 2005-2008, Øyvind KolÃ¥s and others. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, see + * . + */ + +#ifndef _BABL_CONVERSION_H +#define _BABL_CONVERSION_H + +BABL_CLASS_DECLARE (conversion); + +const Babl * babl_conversion (const char *name); + +/* Signature of functions registered for reference type + * conversions, + */ +typedef long (*BablFuncPlane) (const char *src, + char *dst, + int src_pitch, + int dst_pitch, + long n, + void *user_data); + + +typedef struct +BablConversion { + BablInstance instance; + const Babl *source; + const Babl *destination; + long cost; + double error; + union + { + BablFuncLinear linear; + BablFuncPlane plane; + BablFuncPlanar planar; + } function; + void *data; /* user data */ + int processings; + long pixels; +} BablConversion; + +#endif diff --git a/babl/babl-core.c b/babl/babl-core.c new file mode 100644 index 0000000..00e43e8 --- /dev/null +++ b/babl/babl-core.c @@ -0,0 +1,158 @@ +/* babl - dynamically extendable universal pixel conversion library. + + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, see + * . + */ + +#include "config.h" +#include +#include "babl-internal.h" +#include "babl-ids.h" +#include "util.h" + +static long +convert_double_double (char *src, + char *dst, + int src_pitch, + int dst_pitch, + long n) +{ + if (src_pitch == 64 && + dst_pitch == 64) + { + memcpy (dst, src, n / 8); + return n; + } + + while (n--) + { + (*(double *) dst) = (*(double *) src); + dst += dst_pitch; + src += src_pitch; + } + return n; +} + +/* + static long + copy_strip_1 (int src_bands, + char **src, + int *src_pitch, + int dst_bands, + char **dst, + int *dst_pitch, + long n) + { + BABL_PLANAR_SANITY + while (n--) + { + int i; + + for (i=0;i. + */ + +/* + * x86 bits Copyright (C) Manish Singh + */ + +/* + * PPC CPU acceleration detection was taken from DirectFB but seems to be + * originating from mpeg2dec with the following copyright: + * + * Copyright (C) 1999-2001 Aaron Holtzman + */ + +#include "config.h" +#include +#include +#include + +#include "babl-cpuaccel.h" + +typedef unsigned int gboolean; +typedef unsigned int guint32; +typedef int gint; +typedef char gchar; +typedef size_t gsize; +#define TRUE 1 +#define FALSE 0 +#define G_GNUC_CONST + +static BablCpuAccelFlags cpu_accel (void) G_GNUC_CONST; + +static gboolean use_cpu_accel = TRUE; + + +/** + * babl_cpu_accel_get_support: + * + * Query for CPU acceleration support. + * + * Return value: #BablCpuAccelFlags as supported by the CPU. + */ +BablCpuAccelFlags +babl_cpu_accel_get_support (void) +{ + return use_cpu_accel ? cpu_accel () : BABL_CPU_ACCEL_NONE; +} + +/** + * babl_cpu_accel_set_use: + * @use: whether to use CPU acceleration features or not + * + * This function is for internal use only. + */ +void +babl_cpu_accel_set_use (gboolean use) +{ + use_cpu_accel = use ? TRUE : FALSE; +} + + +#if defined(ARCH_X86) && defined(USE_MMX) && defined(__GNUC__) + +#define HAVE_ACCEL 1 + + +typedef enum +{ + ARCH_X86_VENDOR_NONE, + ARCH_X86_VENDOR_INTEL, + ARCH_X86_VENDOR_AMD, + ARCH_X86_VENDOR_CENTAUR, + ARCH_X86_VENDOR_CYRIX, + ARCH_X86_VENDOR_NSC, + ARCH_X86_VENDOR_TRANSMETA, + ARCH_X86_VENDOR_NEXGEN, + ARCH_X86_VENDOR_RISE, + ARCH_X86_VENDOR_UMC, + ARCH_X86_VENDOR_SIS, + ARCH_X86_VENDOR_UNKNOWN = 0xff +} X86Vendor; + +enum +{ + ARCH_X86_INTEL_FEATURE_MMX = 1 << 23, + ARCH_X86_INTEL_FEATURE_XMM = 1 << 25, + ARCH_X86_INTEL_FEATURE_XMM2 = 1 << 26, + + ARCH_X86_AMD_FEATURE_MMXEXT = 1 << 22, + ARCH_X86_AMD_FEATURE_3DNOW = 1 << 31, + + ARCH_X86_CENTAUR_FEATURE_MMX = 1 << 23, + ARCH_X86_CENTAUR_FEATURE_MMXEXT = 1 << 24, + ARCH_X86_CENTAUR_FEATURE_3DNOW = 1 << 31, + + ARCH_X86_CYRIX_FEATURE_MMX = 1 << 23, + ARCH_X86_CYRIX_FEATURE_MMXEXT = 1 << 24 +}; + +enum +{ + ARCH_X86_INTEL_FEATURE_PNI = 1 << 0, + ARCH_X86_INTEL_FEATURE_SSSE3 = 1 << 9, + ARCH_X86_INTEL_FEATURE_SSE4_1 = 1 << 19, + ARCH_X86_INTEL_FEATURE_SSE4_2 = 1 << 20, + ARCH_X86_INTEL_FEATURE_AVX = 1 << 28, + ARCH_X86_INTEL_FEATURE_F16C = 1 << 29, +}; + +#if !defined(ARCH_X86_64) && (defined(PIC) || defined(__PIC__)) +#define cpuid(op,eax,ebx,ecx,edx) \ + __asm__ ("movl %%ebx, %%esi\n\t" \ + "cpuid\n\t" \ + "xchgl %%ebx,%%esi" \ + : "=a" (eax), \ + "=S" (ebx), \ + "=c" (ecx), \ + "=d" (edx) \ + : "0" (op)) +#else +#define cpuid(op,eax,ebx,ecx,edx) \ + __asm__ ("cpuid" \ + : "=a" (eax), \ + "=b" (ebx), \ + "=c" (ecx), \ + "=d" (edx) \ + : "0" (op)) +#endif + + +static X86Vendor +arch_get_vendor (void) +{ + guint32 eax, ebx, ecx, edx; + guint32 intid[4]; + char *id = (char *) intid; + +#ifndef ARCH_X86_64 + /* Only need to check this on ia32 */ + __asm__ ("pushfl\n\t" + "pushfl\n\t" + "popl %0\n\t" + "movl %0,%1\n\t" + "xorl $0x200000,%0\n\t" + "pushl %0\n\t" + "popfl\n\t" + "pushfl\n\t" + "popl %0\n\t" + "popfl" + : "=a" (eax), + "=c" (ecx) + : + : "cc"); + + if (eax == ecx) + return ARCH_X86_VENDOR_NONE; +#endif + + cpuid (0, eax, ebx, ecx, edx); + + if (eax == 0) + return ARCH_X86_VENDOR_NONE; + + intid[0] = ebx; + intid[1] = edx; + intid[2] = ecx; + + id[12] = '\0'; + +#ifdef ARCH_X86_64 + if (strcmp (id, "AuthenticAMD") == 0) + return ARCH_X86_VENDOR_AMD; + else if (strcmp (id, "GenuineIntel") == 0) + return ARCH_X86_VENDOR_INTEL; +#else + if (strcmp (id, "GenuineIntel") == 0) + return ARCH_X86_VENDOR_INTEL; + else if (strcmp (id, "AuthenticAMD") == 0) + return ARCH_X86_VENDOR_AMD; + else if (strcmp (id, "CentaurHauls") == 0) + return ARCH_X86_VENDOR_CENTAUR; + else if (strcmp (id, "CyrixInstead") == 0) + return ARCH_X86_VENDOR_CYRIX; + else if (strcmp (id, "Geode by NSC") == 0) + return ARCH_X86_VENDOR_NSC; + else if (strcmp (id, "GenuineTMx86") == 0 || + strcmp (id, "TransmetaCPU") == 0) + return ARCH_X86_VENDOR_TRANSMETA; + else if (strcmp (id, "NexGenDriven") == 0) + return ARCH_X86_VENDOR_NEXGEN; + else if (strcmp (id, "RiseRiseRise") == 0) + return ARCH_X86_VENDOR_RISE; + else if (strcmp (id, "UMC UMC UMC ") == 0) + return ARCH_X86_VENDOR_UMC; + else if (strcmp (id, "SiS SiS SiS ") == 0) + return ARCH_X86_VENDOR_SIS; +#endif + + return ARCH_X86_VENDOR_UNKNOWN; +} + +static guint32 +arch_accel_intel (void) +{ + guint32 caps = 0; + +#ifdef USE_MMX + { + guint32 eax, ebx, ecx, edx; + + cpuid (1, eax, ebx, ecx, edx); + + if ((edx & ARCH_X86_INTEL_FEATURE_MMX) == 0) + return 0; + + caps = BABL_CPU_ACCEL_X86_MMX; + +#ifdef USE_SSE + if (edx & ARCH_X86_INTEL_FEATURE_XMM) + caps |= BABL_CPU_ACCEL_X86_SSE | BABL_CPU_ACCEL_X86_MMXEXT; + + if (edx & ARCH_X86_INTEL_FEATURE_XMM2) + caps |= BABL_CPU_ACCEL_X86_SSE2; + + if (ecx & ARCH_X86_INTEL_FEATURE_PNI) + caps |= BABL_CPU_ACCEL_X86_SSE3; + + if (ecx & ARCH_X86_INTEL_FEATURE_SSSE3) + caps |= BABL_CPU_ACCEL_X86_SSSE3; + + if (ecx & ARCH_X86_INTEL_FEATURE_SSE4_1) + caps |= BABL_CPU_ACCEL_X86_SSE4_1; + + if (ecx & ARCH_X86_INTEL_FEATURE_F16C) + caps |= BABL_CPU_ACCEL_X86_F16C; +#endif /* USE_SSE */ + } +#endif /* USE_MMX */ + + return caps; +} + +static guint32 +arch_accel_amd (void) +{ + guint32 caps; + + caps = arch_accel_intel (); + +#ifdef USE_MMX + { + guint32 eax, ebx, ecx, edx; + + cpuid (0x80000000, eax, ebx, ecx, edx); + + if (eax < 0x80000001) + return caps; + +#ifdef USE_SSE + cpuid (0x80000001, eax, ebx, ecx, edx); + + if (edx & ARCH_X86_AMD_FEATURE_3DNOW) + caps |= BABL_CPU_ACCEL_X86_3DNOW; + + if (edx & ARCH_X86_AMD_FEATURE_MMXEXT) + caps |= BABL_CPU_ACCEL_X86_MMXEXT; +#endif /* USE_SSE */ + } +#endif /* USE_MMX */ + + return caps; +} + +static guint32 +arch_accel_centaur (void) +{ + guint32 caps; + + caps = arch_accel_intel (); + +#ifdef USE_MMX + { + guint32 eax, ebx, ecx, edx; + + cpuid (0x80000000, eax, ebx, ecx, edx); + + if (eax < 0x80000001) + return caps; + + cpuid (0x80000001, eax, ebx, ecx, edx); + + if (edx & ARCH_X86_CENTAUR_FEATURE_MMX) + caps |= BABL_CPU_ACCEL_X86_MMX; + +#ifdef USE_SSE + if (edx & ARCH_X86_CENTAUR_FEATURE_3DNOW) + caps |= BABL_CPU_ACCEL_X86_3DNOW; + + if (edx & ARCH_X86_CENTAUR_FEATURE_MMXEXT) + caps |= BABL_CPU_ACCEL_X86_MMXEXT; +#endif /* USE_SSE */ + } +#endif /* USE_MMX */ + + return caps; +} + +static guint32 +arch_accel_cyrix (void) +{ + guint32 caps; + + caps = arch_accel_intel (); + +#ifdef USE_MMX + { + guint32 eax, ebx, ecx, edx; + + cpuid (0, eax, ebx, ecx, edx); + + if (eax != 2) + return caps; + + cpuid (0x80000001, eax, ebx, ecx, edx); + + if (edx & ARCH_X86_CYRIX_FEATURE_MMX) + caps |= BABL_CPU_ACCEL_X86_MMX; + +#ifdef USE_SSE + if (edx & ARCH_X86_CYRIX_FEATURE_MMXEXT) + caps |= BABL_CPU_ACCEL_X86_MMXEXT; +#endif /* USE_SSE */ + } +#endif /* USE_MMX */ + + return caps; +} + +#ifdef USE_SSE +static jmp_buf sigill_return; + +static void +sigill_handler (gint n) +{ + longjmp (sigill_return, 1); +} + +static gboolean +arch_accel_sse_os_support (void) +{ + if (setjmp (sigill_return)) + { + return FALSE; + } + else + { + signal (SIGILL, sigill_handler); + __asm__ __volatile__ ("xorps %xmm0, %xmm0"); + signal (SIGILL, SIG_DFL); + } + + return TRUE; +} +#endif /* USE_SSE */ + +static guint32 +arch_accel (void) +{ + guint32 caps; + X86Vendor vendor; + + vendor = arch_get_vendor (); + + switch (vendor) + { + case ARCH_X86_VENDOR_NONE: + caps = 0; + break; + + case ARCH_X86_VENDOR_AMD: + caps = arch_accel_amd (); + break; + + case ARCH_X86_VENDOR_CENTAUR: + caps = arch_accel_centaur (); + break; + + case ARCH_X86_VENDOR_CYRIX: + case ARCH_X86_VENDOR_NSC: + caps = arch_accel_cyrix (); + break; + + /* check for what Intel speced, even if UNKNOWN */ + default: + caps = arch_accel_intel (); + break; + } + +#ifdef USE_SSE + if ((caps & BABL_CPU_ACCEL_X86_SSE) && !arch_accel_sse_os_support ()) + caps &= ~(BABL_CPU_ACCEL_X86_SSE | + BABL_CPU_ACCEL_X86_SSE2 | + BABL_CPU_ACCEL_X86_SSE3 | + BABL_CPU_ACCEL_X86_SSSE3 | + BABL_CPU_ACCEL_X86_SSE4_1); +#endif + + return caps; +} + +#endif /* ARCH_X86 && USE_MMX && __GNUC__ */ + + +#if defined(ARCH_PPC) && defined (USE_ALTIVEC) + +#if defined(HAVE_ALTIVEC_SYSCTL) + +#include + +#define HAVE_ACCEL 1 + +static guint32 +arch_accel (void) +{ + gint sels[2] = { CTL_HW, HW_VECTORUNIT }; + gboolean has_vu = FALSE; + gsize length = sizeof(has_vu); + gint err; + + err = sysctl (sels, 2, &has_vu, &length, NULL, 0); + + if (err == 0 && has_vu) + return BABL_CPU_ACCEL_PPC_ALTIVEC; + + return 0; +} + +#elif defined(__GNUC__) + +#define HAVE_ACCEL 1 + +static sigjmp_buf jmpbuf; +static volatile sig_atomic_t canjump = 0; + +static void +sigill_handler (gint sig) +{ + if (!canjump) + { + signal (sig, SIG_DFL); + raise (sig); + } + + canjump = 0; + siglongjmp (jmpbuf, 1); +} + +static guint32 +arch_accel (void) +{ + signal (SIGILL, sigill_handler); + + if (sigsetjmp (jmpbuf, 1)) + { + signal (SIGILL, SIG_DFL); + return 0; + } + + canjump = 1; + + asm volatile ("mtspr 256, %0\n\t" + "vand %%v0, %%v0, %%v0" + : + : "r" (-1)); + + signal (SIGILL, SIG_DFL); + + return BABL_CPU_ACCEL_PPC_ALTIVEC; +} +#endif /* __GNUC__ */ + +#endif /* ARCH_PPC && USE_ALTIVEC */ + + +static BablCpuAccelFlags +cpu_accel (void) +{ +#ifdef HAVE_ACCEL + static guint32 accel = ~0U; + + if (accel != ~0U) + return accel; + + accel = arch_accel (); + +#if defined(ARCH_X86_64) + accel |= BABL_CPU_ACCEL_X86_64; +#endif + + return (BablCpuAccelFlags) accel; + +#else /* !HAVE_ACCEL */ + return BABL_CPU_ACCEL_NONE; +#endif +} diff --git a/babl/babl-cpuaccel.h b/babl/babl-cpuaccel.h new file mode 100644 index 0000000..8040d73 --- /dev/null +++ b/babl/babl-cpuaccel.h @@ -0,0 +1,49 @@ +/* babl - dynamically extendable universal pixel conversion library. + * Copyright (C) 2005-2008, Øyvind KolÃ¥s and others. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, see + * . + */ + +#ifndef _BABL_CPU_ACCEL_H +#define _BABL_CPU_ACCEL_H + +typedef enum +{ + BABL_CPU_ACCEL_NONE = 0x0, + + /* x86 accelerations */ + BABL_CPU_ACCEL_X86_MMX = 0x01000000, + BABL_CPU_ACCEL_X86_3DNOW = 0x40000000, + BABL_CPU_ACCEL_X86_MMXEXT = 0x20000000, + BABL_CPU_ACCEL_X86_SSE = 0x10000000, + BABL_CPU_ACCEL_X86_SSE2 = 0x08000000, + BABL_CPU_ACCEL_X86_SSE3 = 0x02000000, + BABL_CPU_ACCEL_X86_SSSE3 = 0x00800000, + BABL_CPU_ACCEL_X86_SSE4_1 = 0x00400000, + /* BABL_CPU_ACCEL_X86_SSE4_2 = 0x00200000, */ + /* BABL_CPU_ACCEL_X86_AVX = 0x00080000, */ + BABL_CPU_ACCEL_X86_F16C = 0x00040000, + + /* powerpc accelerations */ + BABL_CPU_ACCEL_PPC_ALTIVEC = 0x04000000, + BABL_CPU_ACCEL_X86_64 = 0x00100000 +} BablCpuAccelFlags; + + +BablCpuAccelFlags babl_cpu_accel_get_support (void); +void babl_cpu_accel_set_use (unsigned int use); + + +#endif /* _BABL_CPU_ACCEL_H */ diff --git a/babl/babl-db.c b/babl/babl-db.c new file mode 100644 index 0000000..fed9a05 --- /dev/null +++ b/babl/babl-db.c @@ -0,0 +1,165 @@ +/* babl - dynamically extendable universal pixel conversion library. + * Copyright (C) 2005, Øyvind KolÃ¥s. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, see + * . + */ + +/* Reimplementation of database code using redundant hash tables + * for faster searching by id/name and using list for fast item enumeration. + * Copyright (C) 2008, Jan Heller + */ + +#define _BABL_DB_C + +#include "config.h" +#include +#include "babl-internal.h" + +static int +db_find_by_name (Babl *item, void *data) +{ + if (!strcmp (item->instance.name, (char *) data)) + return 1; + return 0; +} + +static int +db_find_by_id (Babl *item, void *data) +{ + if (item->instance.id == *((int *) data)) + return 1; + return 0; +} + +static int +db_hash_by_name (BablHashTable *htab, Babl *item) +{ + return babl_hash_by_str (htab, item->instance.name); +} + +static int +db_hash_by_id (BablHashTable *htab, Babl *item) +{ + return babl_hash_by_int (htab, item->instance.id); +} + +static int +each_free (Babl *data, + void *foo) +{ + babl_free (data); + return 0; +} + +static int +babl_db_destroy (void *data) +{ + BablDb *db = data; + babl_assert (db); + + babl_db_each (db, each_free, NULL); + babl_mutex_destroy (db->mutex); + babl_free (db->name_hash); + babl_free (db->id_hash); + babl_free (db->babl_list); + return 0; +} + +BablDb * +babl_db_init (void) +{ + BablDb *db = babl_calloc (sizeof (BablDb), 1); + babl_set_destructor (db, babl_db_destroy); + + db->name_hash = babl_hash_table_init (db_hash_by_name, db_find_by_name); + db->id_hash = babl_hash_table_init (db_hash_by_id, db_find_by_id); + db->babl_list = babl_list_init_with_size (512); + db->mutex = babl_mutex_new (); + + return db; +} + + +Babl * +babl_db_find (BablDb *db, + const char *name) +{ + return babl_hash_table_find (db->name_hash, babl_hash_by_str (db->name_hash, name), + NULL, (void *) name); +} + +int +babl_db_count (BablDb *db) +{ + return db->babl_list->count; +} + +Babl * +babl_db_insert (BablDb *db, + Babl *item) +{ + babl_mutex_lock (db->mutex); + if (item->instance.id) + babl_hash_table_insert (db->id_hash, item); + babl_hash_table_insert (db->name_hash, item); + babl_list_insert_last (db->babl_list, item); + + /* this point all registered items pass through, a nice + * place to brand them with where the item came from. */ + item->instance.creator = babl_extender (); + babl_mutex_unlock (db->mutex); + return item; +} + +void +babl_db_each (BablDb *db, + BablEachFunction each_fun, + void *user_data) +{ + babl_list_each (db->babl_list, each_fun, user_data); +} + + +Babl * +babl_db_exist (BablDb *db, + int id, + const char *name) +{ + Babl *ret; + if (id) + ret = babl_hash_table_find (db->id_hash, babl_hash_by_int (db->id_hash, id), NULL, &id); + else + ret = babl_hash_table_find (db->name_hash, babl_hash_by_str (db->name_hash, name), NULL, (void *) name); + return ret; +} + +Babl * +babl_db_exist_by_id (BablDb *db, + int id) +{ + Babl *ret; + ret = babl_hash_table_find (db->id_hash, babl_hash_by_int (db->id_hash, id), NULL, &id); + return ret; +} + +Babl * +babl_db_exist_by_name (BablDb *db, + const char *name) +{ + Babl *ret; + ret = babl_hash_table_find (db->name_hash, babl_hash_by_str (db->name_hash, name), + NULL, (void *) name); + return ret; +} diff --git a/babl/babl-db.h b/babl/babl-db.h new file mode 100644 index 0000000..d576e6c --- /dev/null +++ b/babl/babl-db.h @@ -0,0 +1,76 @@ +/* babl - dynamically extendable universal pixel conversion library. + * Copyright (C) 2005, Øyvind KolÃ¥s. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, see + * . + */ + +#ifndef _BABL_DB_H +#define _BABL_DB_H + +#ifndef _BABL_H +#error babl-db.h is only to be included after babl.h +#endif + +#include "babl-list.h" +#include "babl-hash-table.h" +#include "babl-memory.h" +#include "babl-mutex.h" + +typedef struct _BablDb BablDb; + +typedef struct _BablDb +{ + BablHashTable *name_hash; + BablHashTable *id_hash; + BablList *babl_list; + BablMutex *mutex; +} _BablDb; + +#ifdef NEEDS_BABL_DB +static BablDb *db = NULL; +#endif /* NEEDS_BABL_DB */ + +BablDb * +babl_db_init (void); + +void +babl_db_each (BablDb *db, + BablEachFunction each_fun, + void *user_data); + +int +babl_db_count (BablDb *db); + +Babl * +babl_db_insert (BablDb *db, + Babl *entry); + +Babl * +babl_db_exist (BablDb *db, + int id, + const char *name); + +Babl * +babl_db_exist_by_name (BablDb *db, + const char *name); +Babl * +babl_db_exist_by_id (BablDb *db, + int id); + +Babl * +babl_db_find (BablDb *db, + const char *name); + +#endif diff --git a/babl/babl-extension.c b/babl/babl-extension.c new file mode 100644 index 0000000..bc371f8 --- /dev/null +++ b/babl/babl-extension.c @@ -0,0 +1,365 @@ +/* babl - dynamically extendable universal pixel conversion library. + * Copyright (C) 2005, Øyvind KolÃ¥s. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, see + * . + */ + +#define BABL_DYNAMIC_EXTENSIONS + +#include "config.h" + + +#ifdef BABL_DYNAMIC_EXTENSIONS +/* must be defined before inclusion of babl-internal.h */ +#undef BABL_INIT_HOOK +#define BABL_INIT_HOOK init_hook (); dynamic_init_hook (); +#endif + +#define NEEDS_BABL_DB +#include "babl-internal.h" +#include "babl-db.h" +#include "babl-base.h" +#include +#include + +static Babl *babl_extension_current_extender = NULL; + +Babl * +babl_extender (void) +{ + if (babl_extension_current_extender) + return babl_extension_current_extender; + return NULL; +} + +void +babl_set_extender (Babl *new_extender) +{ + babl_extension_current_extender = new_extender; +} + +static int +babl_extension_destroy (void *data); + +static Babl * +extension_new (const char *path, + void *dl_handle, + void (*destroy)(void)) +{ + Babl *babl; + + babl = babl_malloc (sizeof (BablExtension) + strlen (path) + 1); + babl_set_destructor (babl, babl_extension_destroy); + babl->instance.name = (char *) babl + sizeof (BablExtension); + strcpy (babl->instance.name, path); + babl->instance.id = 0; + babl->class_type = BABL_EXTENSION; + babl->extension.dl_handle = dl_handle; + babl->extension.destroy = destroy; + + return babl; +} + +static Babl *babl_quiet = NULL; + +Babl * +babl_extension_quiet_log (void) +{ + if (babl_quiet) + return babl_quiet; + babl_quiet = extension_new ("", NULL, NULL); + return babl_quiet; +} + +Babl * +babl_extension_base (void) +{ + Babl *babl; + void *dl_handle = NULL; + + void (*destroy)(void) = NULL; + + if (!db) + { + babl_extension_quiet_log (); + babl_set_extender (NULL); + db = babl_db_init (); + } + babl = extension_new ("BablBase", + dl_handle, + destroy); + babl_set_extender (babl); + + { + Babl *ret = babl_db_insert (db, babl); + if (ret != babl) + babl_free (babl); + else + babl_base_init (); + babl = ret; + } + babl_set_extender (NULL); + return babl; +} + +void babl_extension_deinit (void) +{ + babl_free (babl_quiet); + babl_quiet = NULL; +} + +#ifdef BABL_DYNAMIC_EXTENSIONS + +#include +#include +#include +#include + +#ifdef HAVE_DLFCN_H +#ifndef WIN32 + +#include +#define HLIB void * + +#endif /* WIN32 */ +#elif HAVE_DL_H + + +#include +#include +#if !defined(DYNAMIC_PATH) +# define DYNAMIC_PATH 0 +#endif +#if !defined(BIND_RESTRICTED) +# define BIND_RESTRICTED 0 +#endif +#define RTLD_NOW (BIND_IMMEDIATE|BIND_NONFATAL|DYNAMIC_PATH) +#define HLIB shl_t +#define dlopen(path, flags) shl_load (path, flags, 0L) +#define dlclose(handle) shl_unload (handle) +#define dlerror() strerror (errno) +static void *dlsym (HLIB handle, const char *name) { + void *address = 0; + shl_findsym(&handle, name, TYPE_UNDEFINED, &address); + return address; +} + +#endif + +#ifndef RTLD_NOW +#define RTLD_NOW 0 +#endif + +#ifdef WIN32 +#define WIN32_LEAN_AND_MEAN +#include +#define HLIB HINSTANCE + +#define dlopen(a, b) LoadLibrary (a) +#define dlsym(l, s) GetProcAddress (l, s) +#define dlclose(l) FreeLibrary (l) +#define dlerror() GetLastError () +#endif + +typedef int (*BablExtensionInitFunc) (void); +typedef void (*BablExtensionDestroyFunc)(void); + + +static Babl * +load_failed (Babl *babl) +{ + if (babl) + { + babl_free (babl); + } + babl_set_extender (NULL); + return NULL; +} + +static Babl * +babl_extension_load (const char *path) +{ + Babl *babl = NULL; + /* do the actual loading thing */ + HLIB dl_handle = NULL; + + BablExtensionInitFunc init = NULL; + BablExtensionDestroyFunc destroy = NULL; + + dl_handle = dlopen (path, RTLD_NOW); + if (!dl_handle) + { + babl_log ("dlopen() failed:\n\t%s", dlerror ()); + return load_failed (babl); + } + init = (BablExtensionInitFunc) dlsym (dl_handle, "init"); + if (!init) + { + babl_log ("\n\tint babl_extension_init() function not found in extension '%s'", path); + dlclose (dl_handle); + return load_failed (babl); + } + + destroy = (BablExtensionDestroyFunc) dlsym (dl_handle, "destroy"); + babl = extension_new (path, + dl_handle, + destroy); + + babl_set_extender (babl); + if (init ()) + { + babl_log ("babl_extension_init() in extension '%s' failed (return!=0)", path); + dlclose (dl_handle); + return load_failed (babl); + } + + babl_db_insert (db, babl); + if (babl == babl_db_exist_by_name (db, path)) + { + babl_set_extender (NULL); + return babl; + } + else + { + return load_failed (babl); + } +} + +static void +babl_extension_load_dir (const char *base_path) +{ + DIR *dir; + + if ((dir = opendir (base_path))) + { + struct dirent *dentry; + + while ((dentry = readdir (dir)) != NULL) + { + if (dentry->d_name[0] != '.') + { + char *path = NULL; + char *extension; + + path = babl_strcat (path, base_path); + path = babl_strcat (path, BABL_DIR_SEPARATOR); + path = babl_strcat (path, dentry->d_name); + + if ((extension = strrchr (dentry->d_name, '.')) != NULL && + !strcmp (extension, SHREXT)) + { + babl_extension_load (path); + } + + babl_free (path); + } + } + closedir (dir); + } +} + +static char * +expand_path (char *path) +{ + char *src; + char *dst; + + dst = NULL; + + src = path; + + while (*src) + { + char *home; + switch (*src) + { + case '~': + home = getenv ("HOME"); + if (NULL != home) + dst = babl_strcat (dst, home); + break; + + default: + { + char tmp[2] = "?"; + tmp[0] = *src; + dst = babl_strcat (dst, tmp); + } + } + src++; + } + return dst; +} + + +/* parse the provided colon seperated list of paths to search + */ +void +babl_extension_load_dir_list (const char *dir_list) +{ + int eos = 0; + const char *src; + char *path, *dst; + + + path = babl_strdup (dir_list); + src = dir_list; + dst = path; + + while (!eos) + { + switch (*src) + { + case '\0': + eos = 1; + /* don't break here, the path needs to be processed */ + + case BABL_PATH_SEPARATOR: + { + char *expanded_path = expand_path (path); + if (expanded_path) { + babl_extension_load_dir (expanded_path); + babl_free (expanded_path); + } + } + dst = path; + src++; + *dst = '\0'; + break; + + default: + *(dst++) = *(src++); + *dst = '\0'; + break; + } + } + babl_free (path); +} + +#endif + + +static int +babl_extension_destroy (void *data) +{ + Babl *babl = data; + if (babl->extension.destroy) + babl->extension.destroy (); + if (babl->extension.dl_handle) + dlclose (babl->extension.dl_handle); + return 0; +} + +BABL_CLASS_IMPLEMENT (extension) diff --git a/babl/babl-extension.h b/babl/babl-extension.h new file mode 100644 index 0000000..b0b8b36 --- /dev/null +++ b/babl/babl-extension.h @@ -0,0 +1,40 @@ +/* babl - dynamically extendable universal pixel conversion library. + * Copyright (C) 2005-2008, Øyvind KolÃ¥s and others. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, see + * . + */ + +#ifndef _BABL_EXTENSION_H +#define _BABL_EXTENSION_H + + +/****************************************************************/ +/* BablExtension */ +BABL_CLASS_DECLARE (extension); +/* + * BablExtension objects are only used internally in babl. + */ + +const Babl * babl_extension (const char *name); +void babl_extension_load_dir_list (const char *dir_list); + +typedef struct +{ + BablInstance instance; /* path to .so / .dll is stored in instance name */ + void *dl_handle; + void (*destroy) (void); +} BablExtension; + +#endif diff --git a/babl/babl-fish-path.c b/babl/babl-fish-path.c new file mode 100644 index 0000000..bf9c520 --- /dev/null +++ b/babl/babl-fish-path.c @@ -0,0 +1,691 @@ +/* babl - dynamically extendable universal pixel fish library. + * Copyright (C) 2005, Øyvind KolÃ¥s. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, see + * . + */ + +#include "config.h" +#include +#include "babl-internal.h" +#include "babl-ref-pixels.h" + +#define BABL_LEGAL_ERROR 0.000001 +#define BABL_MAX_COST_VALUE 2000000 +#define BABL_HARD_MAX_PATH_LENGTH 8 +#define BABL_MAX_NAME_LEN 1024 + +#ifndef MIN +#define MIN(a, b) (((a) > (b)) ? (b) : (a)) +#endif + +#define NUM_TEST_PIXELS (babl_get_num_path_test_pixels ()) +#define MAX_BUFFER_SIZE 1024 /* XXX: reasonable size for this should be profiled */ + + +int babl_in_fish_path = 0; + +typedef struct _FishPathInstrumentation +{ + const Babl *fmt_rgba_double; + int num_test_pixels; + void *source; + void *destination; + void *ref_destination; + double *destination_rgba_double; + double *ref_destination_rgba_double; + const Babl *fish_rgba_to_source; + const Babl *fish_reference; + const Babl *fish_destination_to_rgba; + double reference_cost; + int init_instrumentation_done; +} FishPathInstrumentation; + +typedef struct PathContext { + Babl *fish_path; + Babl *to_format; + BablList *current_path; +} PathContext; + +static void +init_path_instrumentation (FishPathInstrumentation *fpi, + Babl *fmt_source, + Babl *fmt_destination); + +static void +destroy_path_instrumentation (FishPathInstrumentation *fpi); + +static void +get_path_instrumentation (FishPathInstrumentation *fpi, + BablList *path, + double *path_cost, + double *ref_cost, + double *path_error); + + +static long +process_conversion_path (BablList *path, + const void *source_buffer, + int source_bpp, + void *destination_buffer, + int dest_bpp, + long n); + +static void +get_conversion_path (PathContext *pc, + Babl *current_format, + int current_length, + int max_length); + +static char * +create_name (char *buf, + const Babl *source, + const Babl *destination, + int is_reference); + +static double legal_error (void); + +static int max_path_length (void); + + +static double legal_error (void) +{ + static double error = 0.0; + const char *env; + + if (error != 0.0) + return error; + + env = getenv ("BABL_TOLERANCE"); + if (env && env[0] != '\0') + error = babl_parse_double (env); + else + error = BABL_LEGAL_ERROR; + return error; +} + +static int max_path_length (void) +{ + static int max_length = 0; + const char *env; + + if (max_length != 0) + return max_length; + + env = getenv ("BABL_PATH_LENGTH"); + if (env) + max_length = atoi (env); + else + max_length = 4; + if (max_length > BABL_HARD_MAX_PATH_LENGTH) + max_length = BABL_HARD_MAX_PATH_LENGTH; + else if (max_length <= 0) + max_length = 1; + return max_length; +} + + +/* The task of BablFishPath construction is to compute + * the shortest path in a graph where formats are the vertices + * and conversions are the edges. However, there is an additional + * constraint to the shortest path, that limits conversion error + * introduced by such a path to be less than BABL_TOLERANCE. This + * prohibits usage of any reasonable shortest path construction + * algorithm such as Dijkstra's algorithm. The shortest path is + * constructed by enumerating all available paths that are less + * than BABL_PATH_LENGTH long, computing their costs and + * conversion errors and backtracking. The backtracking is + * implemented by recursive function get_conversion_path (). + */ + + +static void +get_conversion_path (PathContext *pc, + Babl *current_format, + int current_length, + int max_length) +{ + if (current_length > max_length) + { + /* We have reached the maximum recursion + * depth, let's bail out */ + return; + } + else if ((current_length > 0) && (current_format == pc->to_format)) + { + /* We have found a candidate path, let's + * see about it's properties */ + double path_cost = 0.0; + double ref_cost = 0.0; + double path_error = 1.0; + int i; + + for (i = 0; i < babl_list_size (pc->current_path); i++) + { + path_error *= (1.0 + babl_conversion_error ((BablConversion *) pc->current_path->items[i])); + } + + if (path_error - 1.0 <= legal_error ()) /* check this before the next; + which does a more accurate + measurement of the error */ + { + FishPathInstrumentation fpi; + memset (&fpi, 0, sizeof (fpi)); + + fpi.source = (Babl*) babl_list_get_first (pc->current_path)->conversion.source; + fpi.destination = pc->to_format; + + get_path_instrumentation (&fpi, pc->current_path, &path_cost, &ref_cost, &path_error); + + if ((path_cost < ref_cost) && /* do not use paths that took longer to compute than reference */ + (path_cost < pc->fish_path->fish_path.cost) && + (path_error <= legal_error ())) + { + /* We have found the best path so far, + * let's copy it into our new fish */ + pc->fish_path->fish_path.cost = path_cost; + pc->fish_path->fish.error = path_error; + babl_list_copy (pc->current_path, + pc->fish_path->fish_path.conversion_list); + } + + destroy_path_instrumentation (&fpi); + } + } + else + { + /* + * Bummer, we have to search deeper... + */ + BablList *list; + int i; + + + list = current_format->format.from_list; + if (list) + { + /* Mark the current format in conversion path as visited */ + current_format->format.visited = 1; + + /* Iterate through unvisited formats from the current format ...*/ + for (i = 0; i < babl_list_size (list); i++) + { + Babl *next_conversion = BABL (list->items[i]); + Babl *next_format = BABL (next_conversion->conversion.destination); + if (!next_format->format.visited) + { + /* next_format is not in the current path, we can pay a visit */ + babl_list_insert_last (pc->current_path, next_conversion); + get_conversion_path (pc, next_format, current_length + 1, max_length); + babl_list_remove_last (pc->current_path); + } + } + + /* Remove the current format from current path */ + current_format->format.visited = 0; + } + } +} + +static char * +create_name (char *buf, + const Babl *source, + const Babl *destination, + int is_reference) +{ + /* fish names are intentionally kept short */ + snprintf (buf, BABL_MAX_NAME_LEN, "%s %p %p", "", + source, destination); + return buf; +} + +static int +babl_fish_path_destroy (void *data) +{ + Babl *babl=data; + if (babl->fish_path.conversion_list) + babl_free (babl->fish_path.conversion_list); + babl->fish_path.conversion_list = NULL; + return 0; +} + +Babl * +babl_fish_path (const Babl *source, + const Babl *destination) +{ + Babl *babl = NULL; + char name[BABL_MAX_NAME_LEN]; + + create_name (name, source, destination, 1); + babl = babl_db_exist_by_name (babl_fish_db (), name); + if (babl) + { + /* There is an instance already registered by the required name, + * returning the preexistent one instead. + */ + return babl; + } + + babl = babl_calloc (1, sizeof (BablFishPath) + + strlen (name) + 1); + babl_set_destructor (babl, babl_fish_path_destroy); + + babl->class_type = BABL_FISH_PATH; + babl->instance.id = babl_fish_get_id (source, destination); + babl->instance.name = ((char *) babl) + sizeof (BablFishPath); + strcpy (babl->instance.name, name); + babl->fish.source = source; + babl->fish.destination = destination; + babl->fish.processings = 0; + babl->fish.pixels = 0; + babl->fish.error = BABL_MAX_COST_VALUE; + babl->fish_path.cost = BABL_MAX_COST_VALUE; + babl->fish_path.loss = BABL_MAX_COST_VALUE; + babl->fish_path.conversion_list = babl_list_init_with_size (BABL_HARD_MAX_PATH_LENGTH); + + { + PathContext pc; + pc.current_path = babl_list_init_with_size (BABL_HARD_MAX_PATH_LENGTH); + pc.fish_path = babl; + pc.to_format = (Babl *) destination; + + babl_mutex_lock (babl_format_mutex); + /* we hold a global lock whilerunning get_conversion_path since + * it depends on keeping the various format.visited members in + * a consistent state, this code path is not performance critical + * since created fishes are cached. + */ + babl_in_fish_path++; + + get_conversion_path (&pc, (Babl *) source, 0, max_path_length ()); + + babl_in_fish_path--; + babl_mutex_unlock (babl_format_mutex); + babl_free (pc.current_path); + } + + if (babl_list_size (babl->fish_path.conversion_list) == 0) + { + babl_free (babl); + return NULL; + } + + /* Since there is not an already registered instance by the required + * name, inserting newly created class into database. + */ + babl_db_insert (babl_fish_db (), babl); + return babl; +} + +static long +babl_fish_path_process (Babl *babl, + const void *source, + void *destination, + long n) +{ + const Babl *babl_source = babl->fish.source; + const Babl *babl_dest = babl->fish.destination; + int source_bpp = 0; + int dest_bpp = 0; + + switch (babl_source->instance.class_type) + { + case BABL_FORMAT: + source_bpp = babl_source->format.bytes_per_pixel; + break; + case BABL_TYPE: + source_bpp = babl_source->type.bits / 8; + break; + default: + babl_log ("=eeek{%i}\n", babl_source->instance.class_type - BABL_MAGIC); + } + + switch (babl_dest->instance.class_type) + { + case BABL_FORMAT: + dest_bpp = babl_dest->format.bytes_per_pixel; + break; + case BABL_TYPE: + dest_bpp = babl_dest->type.bits / 8; + break; + default: + babl_log ("-eeek{%i}\n", babl_dest->instance.class_type - BABL_MAGIC); + } + + return process_conversion_path (babl->fish_path.conversion_list, + source, + source_bpp, + destination, + dest_bpp, + n); + +} + +static long +babl_fish_process (Babl *babl, + const void *source, + void *destination, + long n) +{ + long ret = 0; + + switch (babl->class_type) + { + case BABL_FISH_REFERENCE: + if (babl->fish.source == babl->fish.destination) + { /* XXX: we're assuming linear buffers */ + memcpy (destination, source, n * babl->fish.source->format.bytes_per_pixel); + ret = n; + } + else + { + ret = babl_fish_reference_process (babl, source, destination, n); + } + break; + + case BABL_FISH_SIMPLE: + if (BABL (babl->fish_simple.conversion)->class_type == BABL_CONVERSION_LINEAR) + { + ret = babl_conversion_process (BABL (babl->fish_simple.conversion), + source, destination, n); + } + else + { + babl_fatal ("Cannot use a simple fish to process without a linear conversion"); + } + break; + + case BABL_FISH_PATH: + ret = babl_fish_path_process (babl, source, destination, n); + break; + + default: + babl_log ("NYI"); + ret = -1; + break; + } + + return ret; +} + +long +babl_process (const Babl *cbabl, + const void *source, + void *destination, + long n) +{ + Babl *babl = (Babl*)cbabl; + babl_assert (babl); + babl_assert (source); + babl_assert (destination); + babl_assert (BABL_IS_BABL (babl)); + if (n == 0) + return 0; + babl_assert (n > 0); + + /* first check if it is a fish since that is our fast path */ + if (babl->class_type >= BABL_FISH && + babl->class_type <= BABL_FISH_PATH) + { + babl->fish.processings++; + babl->fish.pixels += + babl_fish_process (babl, source, destination, n); + return n; + } + + /* matches all conversion classes */ + if (babl->class_type >= BABL_CONVERSION && + babl->class_type <= BABL_CONVERSION_PLANAR) + return babl_conversion_process (babl, source, destination, n); + + babl_fatal ("eek"); + return -1; +} + +#include + +#define BABL_ALIGN 16 +static void inline *align_16 (unsigned char *ret) +{ + int offset = BABL_ALIGN - ((uintptr_t) ret) % BABL_ALIGN; + ret = ret + offset; + return ret; +} + +static long +process_conversion_path (BablList *path, + const void *source_buffer, + int source_bpp, + void *destination_buffer, + int dest_bpp, + long n) +{ + int conversions = babl_list_size (path); + + if (conversions == 1) + { + babl_conversion_process (BABL (babl_list_get_first (path)), + source_buffer, + destination_buffer, + n); + } + else + { + long j; + + void *temp_buffer = align_16 (alloca (MIN(n, MAX_BUFFER_SIZE) * sizeof (double) * 5 + 16)); + void *temp_buffer2 = NULL; + + if (conversions > 2) + { + /* We'll need one more auxiliary buffer */ + temp_buffer2 = align_16 (alloca (MIN(n, MAX_BUFFER_SIZE) * sizeof (double) * 5 + 16)); + } + + + + + for (j = 0; j < n; j+= MAX_BUFFER_SIZE) + { + long c = MIN (n - j, MAX_BUFFER_SIZE); + int i; + + /* this is where the loop unrolling should happen */ + void *aux1_buffer = temp_buffer; + void *aux2_buffer = NULL; + void *swap_buffer = NULL; + aux2_buffer = temp_buffer2; + + /* The first conversion goes from source_buffer to aux1_buffer */ + babl_conversion_process (babl_list_get_first (path), + (void*)(((unsigned char*)source_buffer) + (j * source_bpp)), + aux1_buffer, + c); + + /* Process, if any, conversions between the first and the last + * conversion in the path, in a loop */ + for (i = 1; i < conversions - 1; i++) + { + babl_conversion_process (path->items[i], + aux1_buffer, + aux2_buffer, + c); + /* Swap the auxiliary buffers */ + swap_buffer = aux1_buffer; + aux1_buffer = aux2_buffer; + aux2_buffer = swap_buffer; + } + + /* The last conversion goes from aux1_buffer to destination_buffer */ + babl_conversion_process (babl_list_get_last (path), + aux1_buffer, + (void*)((unsigned char*)destination_buffer + (j * dest_bpp)), + c); + } + } + + return n; +} + +static void +init_path_instrumentation (FishPathInstrumentation *fpi, + Babl *fmt_source, + Babl *fmt_destination) +{ + long ticks_start = 0; + long ticks_end = 0; + + const double *test_pixels = babl_get_path_test_pixels (); + + if (!fpi->fmt_rgba_double) + { + fpi->fmt_rgba_double = babl_format_new ( + babl_model ("RGBA"), + babl_type ("double"), + babl_component ("R"), + babl_component ("G"), + babl_component ("B"), + babl_component ("A"), + NULL); + } + + fpi->num_test_pixels = babl_get_num_path_test_pixels (); + + fpi->fish_rgba_to_source = babl_fish_reference (fpi->fmt_rgba_double, + fmt_source); + fpi->fish_reference = babl_fish_reference (fmt_source, + fmt_destination); + fpi->fish_destination_to_rgba = babl_fish_reference (fmt_destination, + fpi->fmt_rgba_double); + + fpi->source = babl_calloc (fpi->num_test_pixels, + fmt_source->format.bytes_per_pixel); + fpi->destination = babl_calloc (fpi->num_test_pixels, + fmt_destination->format.bytes_per_pixel); + fpi->ref_destination = babl_calloc (fpi->num_test_pixels, + fmt_destination->format.bytes_per_pixel); + fpi->destination_rgba_double = babl_calloc (fpi->num_test_pixels, + fpi->fmt_rgba_double->format.bytes_per_pixel); + fpi->ref_destination_rgba_double = babl_calloc (fpi->num_test_pixels, + fpi->fmt_rgba_double->format.bytes_per_pixel); + + /* create sourcebuffer from testbuffer in the correct format */ + babl_process (fpi->fish_rgba_to_source, + test_pixels, fpi->source, fpi->num_test_pixels); + + /* calculate the reference buffer of how it should be */ + ticks_start = babl_ticks (); + babl_process (fpi->fish_reference, + fpi->source, fpi->ref_destination, fpi->num_test_pixels); + ticks_end = babl_ticks (); + fpi->reference_cost = babl_process_cost (ticks_start, ticks_end); + + /* transform the reference destination buffer to RGBA */ + babl_process (fpi->fish_destination_to_rgba, + fpi->ref_destination, fpi->ref_destination_rgba_double, fpi->num_test_pixels); +} + +static void +destroy_path_instrumentation (FishPathInstrumentation *fpi) +{ + if (fpi->init_instrumentation_done) + { + babl_free (fpi->source); + babl_free (fpi->destination); + babl_free (fpi->destination_rgba_double); + babl_free (fpi->ref_destination); + babl_free (fpi->ref_destination_rgba_double); + + /* nulify the flag for potential new search */ + fpi->init_instrumentation_done = 0; + } +} + +static void +get_path_instrumentation (FishPathInstrumentation *fpi, + BablList *path, + double *path_cost, + double *ref_cost, + double *path_error) +{ + long ticks_start = 0; + long ticks_end = 0; + + Babl *babl_source = fpi->source; + Babl *babl_destination = fpi->destination; + + int source_bpp = 0; + int dest_bpp = 0; + + switch (babl_source->instance.class_type) + { + case BABL_FORMAT: + source_bpp = babl_source->format.bytes_per_pixel; + break; + case BABL_TYPE: + source_bpp = babl_source->type.bits / 8; + break; + default: + babl_log ("=eeek{%i}\n", babl_source->instance.class_type - BABL_MAGIC); + } + + switch (babl_destination->instance.class_type) + { + case BABL_FORMAT: + dest_bpp = babl_destination->format.bytes_per_pixel; + break; + case BABL_TYPE: + dest_bpp = babl_destination->type.bits / 8; + break; + default: + babl_log ("-eeek{%i}\n", babl_destination->instance.class_type - BABL_MAGIC); + } + + if (!fpi->init_instrumentation_done) + { + /* this initialization can be done only once since the + * source and destination formats do not change during + * the search */ + init_path_instrumentation (fpi, babl_source, babl_destination); + fpi->init_instrumentation_done = 1; + } + + /* calculate this path's view of what the result should be */ + ticks_start = babl_ticks (); + process_conversion_path (path, fpi->source, source_bpp, fpi->destination, dest_bpp, fpi->num_test_pixels); + ticks_end = babl_ticks (); + *path_cost = babl_process_cost (ticks_start, ticks_end); + + /* transform the reference and the actual destination buffers to RGBA + * for comparison with each other + */ + babl_process (fpi->fish_destination_to_rgba, + fpi->destination, fpi->destination_rgba_double, fpi->num_test_pixels); + + *path_error = babl_rel_avg_error (fpi->destination_rgba_double, + fpi->ref_destination_rgba_double, + fpi->num_test_pixels * 4); + +#if 0 + fpi->fish_rgba_to_source->fish.processings--; + fpi->fish_reference->fish.processings--; + fpi->fish_destination_to_rgba->fish.processings -= 2; + + fpi->fish_rgba_to_source->fish.pixels -= fpi->num_test_pixels; + fpi->fish_reference->fish.pixels -= fpi->num_test_pixels; + fpi->fish_destination_to_rgba->fish.pixels -= 2 * fpi->num_test_pixels; +#endif + + *ref_cost = fpi->reference_cost; +} diff --git a/babl/babl-fish-reference.c b/babl/babl-fish-reference.c new file mode 100644 index 0000000..4133e40 --- /dev/null +++ b/babl/babl-fish-reference.c @@ -0,0 +1,471 @@ +/* babl - dynamically extendable universal pixel fish library. + * Copyright (C) 2005, Øyvind KolÃ¥s. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, see + * . + */ + +#include "config.h" +#include "babl-internal.h" + +static Babl * +assert_conversion_find (const void *source, + const void *destination) +{ + Babl *ret = babl_conversion_find (source, destination); + + if (!ret) + babl_fatal ("failed, aborting"); + return ret; +} + +static char * +create_name (const Babl *source, + const Babl *destination, + int is_reference) +{ + static char buf[1024]; + + /* fish names are intentionally kept short */ + snprintf (buf, 1024, "%s %p %p", + is_reference ? "ref " + : "", + source, destination); + return buf; +} + + +Babl * +babl_fish_reference (const Babl *source, + const Babl *destination) +{ + Babl *babl = NULL; + char *name = create_name (source, destination, 1); + + babl = babl_db_exist_by_name (babl_fish_db (), name); + if (babl) + { + /* There is an instance already registered by the required name, + * returning the preexistent one instead. + */ + return babl; + } + + babl_assert (BABL_IS_BABL (source)); + babl_assert (BABL_IS_BABL (destination)); + + babl_assert (source->class_type == BABL_FORMAT); + babl_assert (destination->class_type == BABL_FORMAT); + + babl = babl_malloc (sizeof (BablFishReference) + + strlen (name) + 1); + babl->class_type = BABL_FISH_REFERENCE; + babl->instance.id = babl_fish_get_id (source, destination); + babl->instance.name = ((char *) babl) + sizeof (BablFishReference); + strcpy (babl->instance.name, name); + babl->fish.source = source; + babl->fish.destination = destination; + + babl->fish.processings = 0; + babl->fish.pixels = 0; + babl->fish.error = 0.0; /* assuming the provided reference conversions for types + and models are as exact as possible + */ + + /* Since there is not an already registered instance by the required + * name, inserting newly created class into database. + */ + babl_db_insert (babl_fish_db (), babl); + return babl; +} + + +static void +convert_to_double (BablFormat *source_fmt, + const char *source_buf, + char *source_double_buf, + int n) +{ + int i; + + BablImage *src_img; + BablImage *dst_img; + + src_img = (BablImage *) babl_image_new ( + babl_component_from_id (BABL_LUMINANCE), NULL, 1, 0, NULL); + dst_img = (BablImage *) babl_image_new ( + babl_component_from_id (BABL_LUMINANCE), NULL, 1, 0, NULL); + + dst_img->type[0] = (BablType *) babl_type_from_id (BABL_DOUBLE); + dst_img->pitch[0] = + (dst_img->type[0]->bits / 8) * source_fmt->model->components; + dst_img->stride[0] = 0; + + + src_img->data[0] = (char *)source_buf; + src_img->type[0] = (BablType *) babl_type_from_id (BABL_DOUBLE); + src_img->pitch[0] = source_fmt->bytes_per_pixel; + src_img->stride[0] = 0; + + /* i is source position */ + for (i = 0; i < source_fmt->components; i++) + { + int j; + + src_img->type[0] = source_fmt->type[i]; + /* j is source position */ + for (j = 0; j < source_fmt->model->components; j++) + { + if (source_fmt->component[i] == + source_fmt->model->component[j]) + { + dst_img->data[0] = + source_double_buf + (dst_img->type[0]->bits / 8) * j; + + babl_process (assert_conversion_find (src_img->type[0], + dst_img->type[0]), + src_img, dst_img, n); + break; + } + } + + src_img->data[0] += src_img->type[0]->bits / 8; + } + babl_free (src_img); + babl_free (dst_img); +} + + +static void +convert_from_double (BablFormat *destination_fmt, + char *destination_double_buf, + char *destination_buf, + int n) +{ + int i; + + BablImage *src_img; + BablImage *dst_img; + + src_img = (BablImage *) babl_image_new ( + babl_component_from_id (BABL_LUMINANCE), NULL, 1, 0, NULL); + dst_img = (BablImage *) babl_image_new ( + babl_component_from_id (BABL_LUMINANCE), NULL, 1, 0, NULL); + + src_img->type[0] = (BablType *) babl_type_from_id (BABL_DOUBLE); + src_img->pitch[0] = (src_img->type[0]->bits / 8) * destination_fmt->model->components; + src_img->stride[0] = 0; + + dst_img->data[0] = destination_buf; + dst_img->type[0] = (BablType *) babl_type_from_id (BABL_DOUBLE); + dst_img->pitch[0] = destination_fmt->bytes_per_pixel; + dst_img->stride[0] = 0; + + for (i = 0; i < destination_fmt->components; i++) + { + int j; + + dst_img->type[0] = destination_fmt->type[i]; + + for (j = 0; j < destination_fmt->model->components; j++) + { + if (destination_fmt->component[i] == + destination_fmt->model->component[j]) + { + src_img->data[0] = + destination_double_buf + (src_img->type[0]->bits / 8) * j; + + babl_process (assert_conversion_find (src_img->type[0], + dst_img->type[0]), + src_img, dst_img, n); + break; + } + } + + dst_img->data[0] += dst_img->type[0]->bits / 8; + } + babl_free (src_img); + babl_free (dst_img); +} + + +static void +ncomponent_convert_to_double (BablFormat *source_fmt, + char *source_buf, + char *source_double_buf, + int n) +{ + BablImage *src_img; + BablImage *dst_img; + + src_img = (BablImage *) babl_image_new ( + babl_component_from_id (BABL_LUMINANCE), NULL, 1, 0, NULL); + dst_img = (BablImage *) babl_image_new ( + babl_component_from_id (BABL_LUMINANCE), NULL, 1, 0, NULL); + + dst_img->type[0] = (BablType *) babl_type_from_id (BABL_DOUBLE); + dst_img->pitch[0] = (dst_img->type[0]->bits / 8); + dst_img->stride[0] = 0; + + src_img->data[0] = source_buf; + src_img->type[0] = source_fmt->type[0]; + src_img->pitch[0] = source_fmt->type[0]->bits / 8; + src_img->stride[0] = 0; + + dst_img->data[0] = source_double_buf; + + babl_process ( + assert_conversion_find (src_img->type[0], dst_img->type[0]), + src_img, dst_img, + n * source_fmt->components); + babl_free (src_img); + babl_free (dst_img); +} + +static void +ncomponent_convert_from_double (BablFormat *destination_fmt, + char *destination_double_buf, + char *destination_buf, + int n) +{ + BablImage *src_img; + BablImage *dst_img; + + src_img = (BablImage *) babl_image_new ( + babl_component_from_id (BABL_LUMINANCE), NULL, 1, 0, NULL); + dst_img = (BablImage *) babl_image_new ( + babl_component_from_id (BABL_LUMINANCE), NULL, 1, 0, NULL); + + src_img->type[0] = (BablType *) babl_type_from_id (BABL_DOUBLE); + src_img->pitch[0] = (src_img->type[0]->bits / 8); + src_img->stride[0] = 0; + + dst_img->data[0] = destination_buf; + dst_img->type[0] = (BablType *) babl_type_from_id (BABL_DOUBLE); + dst_img->pitch[0] = destination_fmt->type[0]->bits/8; + dst_img->stride[0] = 0; + + dst_img->type[0] = destination_fmt->type[0]; + src_img->data[0] = destination_double_buf; + + babl_process ( + assert_conversion_find (src_img->type[0], dst_img->type[0]), + src_img, dst_img, + n * destination_fmt->components); + + dst_img->data[0] += dst_img->type[0]->bits / 8; + babl_free (src_img); + babl_free (dst_img); +} + + +static int +process_to_n_component (const Babl *babl, + const char *source, + char *destination, + long n) +{ + void *double_buf; +#ifndef MAX +#define MAX(a, b) ((a) > (b) ? (a) : (b)) +#endif + int components = MAX(BABL (babl->fish.source)->format.model->components, + BABL (babl->fish.source)->format.components); + components = MAX(components, BABL (babl->fish.destination)->format.components); + components = MAX(components, BABL (babl->fish.destination)->model.components); + + double_buf = babl_malloc (sizeof (double) * n * components); + memset (double_buf, 0,sizeof (double) * n * components); + + { + ncomponent_convert_to_double ( + (BablFormat *) BABL (babl->fish.source), + (char *) source, + double_buf, + n + ); + + ncomponent_convert_from_double ( + (BablFormat *) BABL (babl->fish.destination), + double_buf, + (char *) destination, + n + ); + } + + babl_free (double_buf); + return 0; +} + + +static int +process_same_model (const Babl *babl, + const char *source, + char *destination, + long n) +{ + void *double_buf; +#define MAX(a, b) ((a) > (b) ? (a) : (b)) + + double_buf = babl_malloc (sizeof (double) * n * + MAX (BABL (babl->fish.source)->format.model->components, + BABL (babl->fish.source)->format.components)); +#undef MAX + + if ((BABL (babl->fish.source)->format.components == + BABL (babl->fish.destination)->format.components) + && (BABL (babl->fish.source)->format.model->components != + BABL (babl->fish.source)->format.components)) + { + ncomponent_convert_to_double ( + (BablFormat *) BABL (babl->fish.source), + (char *) source, + double_buf, + n + ); + + ncomponent_convert_from_double ( + (BablFormat *) BABL (babl->fish.destination), + double_buf, + (char *) destination, + n + ); + } + else + { + convert_to_double ( + (BablFormat *) BABL (babl->fish.source), + (char *) source, + double_buf, + n + ); + + convert_from_double ( + (BablFormat *) BABL (babl->fish.destination), + double_buf, + (char *) destination, + n + ); + } + babl_free (double_buf); + return 0; +} + +long +babl_fish_reference_process (const Babl *babl, + const char *source, + char *destination, + long n) +{ + void *source_double_buf; + void *rgba_double_buf; + void *destination_double_buf; + Babl *source_image; + Babl *rgba_image; + Babl *destination_image; + + + if (BABL (babl->fish.source)->format.model == + BABL (babl->fish.destination)->format.model) + return process_same_model (babl, source, destination, n); + + if (babl_format_is_format_n (BABL (babl->fish.destination))) + { + return process_to_n_component (babl, source, destination, n); + } + + + + source_double_buf = babl_malloc (sizeof (double) * n * + BABL (babl->fish.source)->format.model->components); + rgba_double_buf = babl_malloc (sizeof (double) * n * 4); + destination_double_buf = babl_malloc (sizeof (double) * n * + BABL (babl->fish.destination)->format.model->components); + + source_image = babl_image_from_linear ( + source_double_buf, BABL (BABL ((babl->fish.source))->format.model)); + rgba_image = babl_image_from_linear ( + rgba_double_buf, babl_model_from_id (BABL_RGBA)); + destination_image = babl_image_from_linear ( + destination_double_buf, BABL (BABL ((babl->fish.destination))->format.model)); + + convert_to_double ( + (BablFormat *) BABL (babl->fish.source), + source, + source_double_buf, + n + ); + + { + Babl *conv = + assert_conversion_find ( + BABL (babl->fish.source)->format.model, + babl_model_from_id (BABL_RGBA) + ); + if (conv->class_type == BABL_CONVERSION_PLANAR) + { + babl_process ( + conv, + source_image, rgba_image, + n); + } + else if (conv->class_type == BABL_CONVERSION_LINEAR) + { + babl_process ( + conv, + source_double_buf, rgba_double_buf, + n); + } + else babl_fatal ("oops"); + } + + { + Babl *conv = + assert_conversion_find ( + babl_model_from_id (BABL_RGBA), + BABL (babl->fish.destination)->format.model); + if (conv->class_type == BABL_CONVERSION_PLANAR) + { + babl_process ( + conv, + rgba_image, destination_image, + n); + } + else if (conv->class_type == BABL_CONVERSION_LINEAR) + { + babl_process ( + conv, + rgba_double_buf, destination_double_buf, + n); + } + else babl_fatal ("oops"); + } + + convert_from_double ( + (BablFormat *) BABL (babl->fish.destination), + destination_double_buf, + destination, + n + ); + + babl_free (source_image); + babl_free (rgba_image); + babl_free (destination_image); + + babl_free (destination_double_buf); + babl_free (rgba_double_buf); + babl_free (source_double_buf); + return n; +} + diff --git a/babl/babl-fish-simple.c b/babl/babl-fish-simple.c new file mode 100644 index 0000000..36908aa --- /dev/null +++ b/babl/babl-fish-simple.c @@ -0,0 +1,67 @@ +/* babl - dynamically extendable universal pixel fish library. + * Copyright (C) 2005, Øyvind KolÃ¥s. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, see + * . + */ + +#include "config.h" +#include "babl-internal.h" + +static char * +create_name (BablConversion *conversion) +{ + return conversion->instance.name; +} + +Babl * +babl_fish_simple (BablConversion *conversion) +{ + Babl *babl = NULL; + char *name; + + babl_assert (BABL_IS_BABL (conversion)); + + name = create_name (conversion); + babl = babl_db_exist_by_name (babl_fish_db (), name); + if (babl) + { + /* There is an instance already registered by the required name, + * returning the preexistent one instead. + */ + return babl; + } + + babl = babl_malloc (sizeof (BablFishSimple) + + strlen (name) + 1); + babl->class_type = BABL_FISH_SIMPLE; + babl->instance.id = babl_fish_get_id (conversion->source, conversion->destination); + babl->instance.name = ((char *) babl) + sizeof (BablFishSimple); + strcpy (babl->instance.name, name); + babl->fish.source = conversion->source; + babl->fish.destination = conversion->destination; + + babl->fish.processings = 0; + babl->fish.pixels = 0; + babl->fish_simple.conversion = conversion; + babl->fish.error = 0.0;/* babl fish simple should only be used by bablfish + reference, and babl fish reference only requests clean + conversions */ + + /* Since there is not an already registered instance by the required + * name, inserting newly created class into database. + */ + babl_db_insert (babl_fish_db (), babl); + return babl; +} diff --git a/babl/babl-fish-stats.c b/babl/babl-fish-stats.c new file mode 100644 index 0000000..2b9cc7c --- /dev/null +++ b/babl/babl-fish-stats.c @@ -0,0 +1,433 @@ +/* babl - dynamically extendable universal pixel fish library. + * Copyright (C) 2005, Øyvind KolÃ¥s. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, see + * . + */ + +#include "config.h" +#include "babl-internal.h" + +static FILE *output_file = NULL; +static int qux = 0; + +static char *utf8_bar[] = { " ", "·", "▁", "▂", "▃", "▄", "▅", "▆", "▇", "█" }; +/* +static char *utf8_bar[]= {"!","▁","▃","▅","▇","█","!","!","!"}; +static char *utf8_bar[]={"·", "█", "▇", "▆", "▅", "▄", "▃", "▂", "▁", }; +static char *utf8_bar[]={" ","1","2","3","4","5","6","7","8"}; +*/ + +static double sum_pixels = 0.0; + +static int +table_destination_sum_each (Babl *babl, + void *userdata) +{ + const Babl *source = userdata; + const Babl *destination = babl; + + if (source != destination) + { + const Babl *fish = babl_fish (source, destination); + babl_assert (fish); + sum_pixels += fish->fish.pixels; + } + return 0; +} + +static int +table_source_sum_each (Babl *babl, + void *userdata) +{ + babl_format_class_for_each (table_destination_sum_each, babl); + return 0; +} + +static void +table_sum_processings_calc (void) +{ + sum_pixels = 0; + babl_format_class_for_each (table_source_sum_each, NULL); +} + +#define LIMIT 0.03 + +static int +table_destination_each (Babl *babl, + void *userdata) +{ + Babl *source = userdata; + Babl *destination = babl; + + qux++; + if (qux % babl_formats_count () == qux / babl_formats_count ()) + fprintf (output_file, " "); + else + { + const Babl *fish = babl_fish (source, destination); + + babl_assert (fish); + + + switch (fish->class_type) + { + case BABL_FISH_PATH: + + fprintf (output_file, "%s", + fish->fish.pixels / sum_pixels > LIMIT ? " style='background-color: #69f'" : "", + utf8_bar[babl_list_size (fish->fish_path.conversion_list)]); + + { + int i; + fprintf (output_file, "
"); + fprintf (output_file, "

path %s to %s

", source->instance.name, destination->instance.name); + if (fish->fish.processings > 0) + { + fprintf (output_file, "Processings:%i
", fish->fish.processings); + fprintf (output_file, "Pixels:%li
", fish->fish.pixels); + } + fprintf (output_file, "\n"); + + fprintf (output_file, ""); + fprintf (output_file, ""); + fprintf (output_file, ""); + fprintf (output_file, ""); + fprintf (output_file, ""); + + for (i = 0; i < babl_list_size (fish->fish_path.conversion_list); i++) + { + fprintf (output_file, ""); + fprintf (output_file, "", BABL (fish->fish_path.conversion_list->items[i])->instance.name); + fprintf (output_file, "", + babl_conversion_cost (&BABL (fish->fish_path.conversion_list->items[i])->conversion)); + fprintf (output_file, "", + babl_conversion_error (&BABL (fish->fish_path.conversion_list->items[i])->conversion)); + fprintf (output_file, ""); + } + + fprintf (output_file, ""); + fprintf (output_file, ""); + fprintf (output_file, "", fish->fish_path.cost); + fprintf (output_file, "", fish->fish.error); + fprintf (output_file, ""); + fprintf (output_file, "
conversioncosterror
%s%li%e
total%3.0f%e
"); + fprintf (output_file, "
"); + } + fprintf (output_file, "
\n"); + break; + + case BABL_FISH_REFERENCE: + fprintf (output_file, " ", + fish->fish.pixels / sum_pixels > LIMIT ? " style='background-color: #f99'" : ""); + fprintf (output_file, "
"); + fprintf (output_file, "

Reference %s to %s

", source->instance.name, destination->instance.name); + + if (fish->fish.processings > 1) + { + fprintf (output_file, "Processings:%i
", fish->fish.processings); + fprintf (output_file, "Pixels:%li
", fish->fish.pixels); + } + fprintf (output_file, "
"); + fprintf (output_file, "
\n"); + break; + + case BABL_FISH_SIMPLE: + fprintf (output_file, "·", + fish->fish.pixels / sum_pixels > LIMIT ? " style='background-color: #69f'" : ""); + fprintf (output_file, "
"); + fprintf (output_file, "

Simple %s to %s

", source->instance.name, destination->instance.name); + + + fprintf (output_file, "%s
", BABL (fish->fish_simple.conversion)->instance.name); + fprintf (output_file, "cost: %li
", babl_conversion_cost ((fish->fish_simple.conversion))); + fprintf (output_file, "error: %e
", babl_conversion_error ((fish->fish_simple.conversion))); + + if (fish->fish.processings > 0) + { + fprintf (output_file, "Processings:%i
", fish->fish.processings); + fprintf (output_file, "Pixels:%li
", fish->fish.pixels); + } + fprintf (output_file, "
"); + fprintf (output_file, "
\n"); + break; + + default: + babl_fatal ("Unknown fish type"); + break; + } + } + return 0; +} + +static int source_no = 0; + + + +static int +table_source_each (Babl *babl, + void *userdata) +{ + char expanded_name[512]; + const char *s; + char *d; + + s = babl->instance.name; + d = &expanded_name[0]; + + while (*s) + { + switch (*s) + { + case ' ': + *(d++) = '&'; + *(d++) = 'n'; + *(d++) = 'b'; + *(d++) = 's'; + *(d++) = 'p'; + *(d++) = ';'; + *(d) = '\0'; + s++; + break; + + default: + *(d++) = *(s++); + *(d) = '\0'; + break; + } + } + + fprintf (output_file, ""); + fprintf (output_file, "%s", expanded_name); + { + int i; + + fprintf (output_file, "
", babl); + fprintf (output_file, "

%s

", babl->instance.name); + + fprintf (output_file, "
"); + fprintf (output_file, "
bytes/pixel
%i
", babl->format.bytes_per_pixel); + fprintf (output_file, "
model
%s
", BABL (babl->format.model)->instance.name); + fprintf (output_file, "
loss
%f
", babl_format_loss (babl)); + fprintf (output_file, "
planar
%d
", babl->format.planar); + fprintf (output_file, "
components
"); + + for (i = 0; i < babl->format.components; i++) + { + fprintf (output_file, "", + BABL (babl->format.type[i])->instance.name, + BABL (babl->format.component[i])->instance.name); + } + fprintf (output_file, "
%s%s
"); + + fprintf (output_file, "
\n"); + } + + fprintf (output_file, "
"); + babl_format_class_for_each (table_destination_each, babl); + fprintf (output_file, "\n"); + source_no++; + return 0; +} + +/* copied from babl-fish-path.c */ +#define BABL_LEGAL_ERROR 0.000001 +static double legal_error (void) +{ + static double error = 0.0; + const char *env; + + if (error != 0.0) + return error; + + env = getenv ("BABL_TOLERANCE"); + if (env && env[0] != '\0') + error = babl_parse_double (env); + else + error = BABL_LEGAL_ERROR; + return error; +} + +static int +each_conv (Babl *babl, + void *data) +{ + double error, cost; + + if (BABL (babl->conversion.source)->class_type != BABL_FORMAT) + return 0; + + error = babl_conversion_error (&babl->conversion); + cost = babl_conversion_cost (&babl->conversion); + + if (error > legal_error ()) + { + fprintf (output_file, "
%s
", babl->instance.name); + fprintf (output_file, "
"); + } + else + { + fprintf (output_file, "
%s
", babl->instance.name); + } + fprintf (output_file, "error: %f cost: %4.0f processings: %i pixels: %li", error, cost, + babl->conversion.processings, babl->conversion.pixels); + fprintf (output_file, "
"); + + return 0; +} + +static void +conversions (void) +{ + fprintf (output_file, "

Conversions

\n"); + babl_conversion_class_for_each (each_conv, NULL); + fprintf (output_file, "
\n"); +} + + + +void +babl_fish_stats (FILE *file) +{ + output_file = file; + + table_sum_processings_calc (); + fprintf (output_file, + "\n" + "\n" + "\n" + "\n" + "BablFishPath introspection\n" + "\n" + "" + + "" + + + "\n"); + + fprintf (output_file, "\n"); + + fprintf (output_file, "

BablFishPath introspection

"); + fprintf (output_file, "

Instrumentation and pathlengths.

"); + + fprintf (output_file, "\n"); + + babl_format_class_for_each (table_source_each, NULL); + + fprintf (output_file, "
Source formatDestination formats
"); + + fprintf (output_file, "
\n"); + + conversions (); + + fprintf (output_file, "\n"); +} + diff --git a/babl/babl-fish.c b/babl/babl-fish.c new file mode 100644 index 0000000..76cb53d --- /dev/null +++ b/babl/babl-fish.c @@ -0,0 +1,266 @@ +/* babl - dynamically extendable universal pixel fish library. + * Copyright (C) 2005, Øyvind Kolås. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, see + * . + */ + +#include "config.h" +#define NEEDS_BABL_DB +#include "babl-internal.h" +#include "babl-db.h" +#include +#include +#include + +typedef struct _BablFindFish BablFindFish; + +typedef struct _BablFindFish +{ + Babl *fish_path; + Babl *fish_ref; + Babl *fish_fish; + int fishes; + const Babl *source; + const Babl *destination; +} _BablFishFish; + + +static int +match_conversion (Babl *conversion, + void *inout); + +static int +find_fish_path (Babl *item, + void *data); + +static int +find_memcpy_fish (Babl *item, + void *data); + +static int +find_fish_path (Babl *item, + void *data) +{ + BablFindFish *ffish = (BablFindFish *) data; + if ((item->fish.source == ffish->source) && + (item->fish.destination == ffish->destination)) + { + if (item->instance.class_type == BABL_FISH_REFERENCE) + { + ffish->fish_ref = item; + ffish->fishes++; + } + else if (item->instance.class_type == BABL_FISH_PATH) + { + ffish->fish_path = item; + ffish->fishes++; + } + else if (item->instance.class_type == BABL_FISH) + { + ffish->fish_fish = item; + ffish->fishes++; + } + if (ffish->fishes == 3) + return 1; + } + + return 0; +} + +static int +find_memcpy_fish (Babl *item, + void *data) +{ + BablFindFish *ffish = (BablFindFish *) data; + if ((item->fish.source == ffish->source) && + (item->fish.destination == ffish->destination)) + { + if ((item->fish.source == item->fish.destination) && + (item->instance.class_type == BABL_FISH_REFERENCE)) + { + ffish->fish_ref = item; + return 1; + } + } + + return 0; +} + +static int +match_conversion (Babl *conversion, + void *inout) +{ + void **data = inout; + + if ((Babl *) conversion->conversion.destination == (Babl *) *data) + { + *data = (void *) conversion; + return 1; + } + return 0; +} + +Babl * +babl_conversion_find (const void *source, + const void *destination) +{ + void *data = (void*)destination; + + babl_list_each (BABL (source)->type.from_list, match_conversion, &data); + if (data == (void*)destination) /* didn't change */ + return NULL; + return data; +} + +int +babl_fish_get_id (const Babl *source, + const Babl *destination) +{ + /* value of 'id' will be used as argument for hash function, + * substraction serves as simple combination of + * source/destination values. */ + ptrdiff_t id = source - destination; + /* instances with id 0 won't be inserted into database */ + if (id == 0) + id = 1; + return id; +} + +const Babl * +babl_fish (const void *source, + const void *destination) +{ + const Babl *source_format = NULL; + const Babl *destination_format = NULL; + + babl_assert (source); + babl_assert (destination); + + if (BABL_IS_BABL (source)) + source_format = source; + + if (!source_format) + source_format = babl_format ((char *) source); + + if (!source_format) + { + babl_log ("args=(%p, %p) source format invalid", source, destination); + return NULL; + } + + if (BABL_IS_BABL (destination)) + destination_format = destination; + + if (!destination_format) + destination_format = babl_format ((char *) destination); + + if (!destination_format) + { + babl_log ("args=(%p, %p) destination format invalid", source, destination); + return NULL; + } + + { + int hashval; + BablHashTable *id_htable; + BablFindFish ffish = {(Babl *) NULL, + (Babl *) NULL, + (Babl *) NULL, + 0, + (Babl *) NULL, + (Babl *) NULL}; + + /* some vendor compilers can't compile non-constant elements of + * compound struct initializers + */ + ffish.source = source_format; + ffish.destination = destination_format; + + id_htable = (babl_fish_db ())->id_hash; + hashval = babl_hash_by_int (id_htable, babl_fish_get_id (source_format, destination_format)); + + if (source_format == destination_format) + { + /* In the case of equal source and destination formats + * we will search through the fish database for reference fish + * to handle the memcpy */ + babl_hash_table_find (id_htable, hashval, find_memcpy_fish, (void *) &ffish); + } + else + { + /* In the case of different source and destination formats + * we will search through the fish database for appropriate fish path + * to handle the conversion. In the case that preexistent + * fish path is found, we'll return it. In the case BABL_FISH + * instance with the same source/destination is found, we'll + * return reference fish. + * In the case neither fish path nor BABL_FISH path are found, + * we'll try to construct new fish path for requested + * source/destination. In the case new fish path is found, we'll + * return it, otherwise we'll create dummy BABL_FISH instance and + * insert it into the fish database to indicate non-existent fish + * path. + */ + babl_hash_table_find (id_htable, hashval, find_fish_path, (void *) &ffish); + + if (ffish.fish_path) + { + /* we have found suitable fish path in the database */ + return ffish.fish_path; + } + if (!ffish.fish_fish) + { + /* we haven't tried to search for suitable path yet */ + Babl *fish_path = babl_fish_path (source_format, destination_format); + + if (fish_path) + { + return fish_path; + } + else + { + /* there isn't a suitable path for requested formats, + * let's create a dummy BABL_FISH instance and insert + * it into the fish database to indicate that such path + * does not exist. + */ + char *name = "X"; /* name does not matter */ + Babl *fish = babl_calloc (1, sizeof (BablFish) + strlen (name) + 1); + + fish->class_type = BABL_FISH; + fish->instance.id = babl_fish_get_id (source_format, destination_format); + fish->instance.name = ((char *) fish) + sizeof (BablFish); + strcpy (fish->instance.name, name); + fish->fish.source = source_format; + fish->fish.destination = destination_format; + babl_db_insert (babl_fish_db (), fish); + } + } + } + + if (ffish.fish_ref) + { + /* we have already found suitable reference fish */ + return ffish.fish_ref; + } + else + { + /* we have to create new reference fish */ + return babl_fish_reference (source_format, destination_format); + } + } +} + +BABL_CLASS_MINIMAL_IMPLEMENT (fish); diff --git a/babl/babl-fish.h b/babl/babl-fish.h new file mode 100644 index 0000000..1592329 --- /dev/null +++ b/babl/babl-fish.h @@ -0,0 +1,91 @@ +/* babl - dynamically extendable universal pixel conversion library. + * Copyright (C) 2005-2008, Øyvind Kolås and others. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, see + * . + */ + +#ifndef _BABL_FISH_H +#define _BABL_FISH_H + + +/****************************************************************/ +/* BablFish */ +BABL_CLASS_DECLARE (fish); + +/* BablFish, common base class for various fishes. + */ +typedef struct +{ + BablInstance instance; + const Babl *source; + const Babl *destination; + + double error; /* the amount of noise introduced by the fish */ + + /* instrumentation */ + int processings; /* number of times the fish has been used */ + long pixels; /* number of pixels translates */ + long usecs; /* usecs spent within this fish */ +} BablFish; + +/* BablFishSimple is the simplest type of fish, wrapping a single + * conversion function, (note this might not be the optimal chosen + * conversion even if it exists) + * + * TODO: exterminate + */ +typedef struct +{ + BablFish fish; + BablConversion *conversion; +} BablFishSimple; + + +/* BablFishPath is a combination of registered conversions, both + * from the reference types / model conversions, and optimized format to + * format conversion. + * + * This is the most advanced scheduled species of fish, some future + * version of babl might even be evovling path fishes in a background + * thread, based on the fish instrumentation. For this to work in a future + * version transmogrification between the fish classes would be used. + */ +typedef struct +{ + BablFish fish; + double cost; /* number of ticks *10 + chain_length */ + double loss; /* error introduced */ + BablList *conversion_list; +} BablFishPath; + +/* BablFishReference + * + * A BablFishReference is not intended to be fast, thus the algorithm + * encoded can use a multi stage approach, based on the knowledge babl + * has encoded in the pixel formats. + * + * One of the contributions that would be welcome are new fish factories. + * + * TODO: + * * make optimal use of a single allocation containing enough space + * for the maximum amount of memory needed in two adjecant buffers + * at any time. + */ +typedef struct +{ + BablFish fish; +} BablFishReference; + +#endif diff --git a/babl/babl-format.c b/babl/babl-format.c new file mode 100644 index 0000000..60a916e --- /dev/null +++ b/babl/babl-format.c @@ -0,0 +1,654 @@ +/* babl - dynamically extendable universal pixel conversion library. + * Copyright (C) 2005, Øyvind Kolås. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, see + * . + */ + +#include "config.h" +#include +#include +#include + +#define NEEDS_BABL_DB +#include "babl-internal.h" +#include "babl-db.h" +#include "babl-ref-pixels.h" + +static int babl_format_destruct (void *babl) +{ + BablFormat *format = babl; + if (format->image_template != NULL) + { + babl_set_destructor (format->image_template, NULL); + /* with no destructor set, the circular reference is no problem */ + babl_free (format->image_template); + format->image_template = NULL; + } + if (format->from_list) + babl_free (format->from_list); + return 0; +} + +static Babl * +format_new (const char *name, + int id, + int planar, + int components, + BablModel *model, + BablComponent **component, + BablSampling **sampling, + const BablType **type) +{ + Babl *babl; + + /* i is destination position */ + int i, j, component_found = 0; + for (i = 0; i < model->components; i++) + { + for (j = 0; j < components; j++) + { + if (component[j] == model->component[i]) + { + component_found = 1; + break; + } + } + if (!component_found) + { + component_found = 0; +#if 0 /* since babl does the right thing, let it happen */ + babl_fatal("matching source component for %s in model %s not found", + model->component[i]->instance.name, model->instance.name); +#endif + } + } + + /* allocate all memory in one chunk */ + babl = babl_malloc (sizeof (BablFormat) + + strlen (name) + 1 + + sizeof (BablComponent *) * (components) + + sizeof (BablSampling *) * (components) + + sizeof (BablType *) * (components) + + sizeof (int) * (components) + + sizeof (int) * (components)); + babl_set_destructor (babl, babl_format_destruct); + + babl->format.from_list = NULL; + babl->format.component = (void *) (((char *) babl) + sizeof (BablFormat)); + babl->format.type = (void *) (((char *) babl->format.component) + sizeof (BablComponent *) * (components)); + babl->format.sampling = (void *) (((char *) babl->format.type) + sizeof (BablType *) * (components)); + babl->instance.name = ((char *) babl->format.sampling) + sizeof (BablSampling *) * (components); + + babl->class_type = BABL_FORMAT; + babl->instance.id = id; + + strcpy (babl->instance.name, name); + + babl->format.model = model; + babl->format.components = components; + + memcpy (babl->format.component, component, sizeof (BablComponent *) * components); + memcpy (babl->format.type, type, sizeof (BablType *) * components); + memcpy (babl->format.sampling, sampling, sizeof (BablSampling *) * components); + + babl->format.planar = planar; + + babl->format.bytes_per_pixel = 0; + { + int i; + for (i = 0; i < components; i++) + babl->format.bytes_per_pixel += type[i]->bits / 8; + } + + babl->format.loss = -1.0; + babl->format.visited = 0; + babl->format.image_template = NULL; + babl->format.format_n = 0; + babl->format.palette = 0; + + return babl; +} + + +static char * +create_name (const BablModel *model, + int components, + BablComponent **component, + const BablType **type) +{ + char buf[512] = ""; + char *p = &buf[0]; + int i; + int same_types = 1; + const BablType**t = type; + const BablType *first_type = *type; + BablComponent **c1 = component; + BablComponent **c2 = model->component; + + + sprintf (p, "%s ", model->instance.name); + p += strlen (model->instance.name) + 1; + + i = components; + while (i--) + { + if (first_type != *t) + { + same_types = 0; + break; + } + t++; + } + + if (same_types && + components != model->components) + same_types = 0; + + i = components; + while (same_types && i--) + { + if (*c1 != *c2) + { + same_types = 0; + break; + } + c1++; + c2++; + } + + + if (same_types) + { + sprintf (p, "%s", first_type->instance.name); + return babl_strdup (buf); + } + + i = components; + + while (i--) + { + sprintf (p, "(%s as %s) ", + (*component)->instance.name, + (*type)->instance.name); + p += strlen ((*component)->instance.name) + + strlen ((*type)->instance.name) + strlen ("( as ) "); + component++; + type++; + } + return babl_strdup (buf); +} + + +static char * +ncomponents_create_name (const Babl *type, + int components) +{ + char buf[512]; + sprintf (buf, "%s[%i] ", type->instance.name, components); + return babl_strdup (buf); +} + +static void +babl_format_set_is_format_n (Babl *format) +{ + if (format->class_type == BABL_FORMAT) + { + format->format.format_n = 1; + } +} + +const Babl * +babl_format_n (const Babl *btype, + int components) +{ + int i; + Babl *babl; + int id = 0; + int planar = 0; + BablModel *model = (BablModel *)babl_model ("Y"); + BablComponent *component [components]; + BablSampling *sampling [components]; + const BablType *type [components]; + char *name = NULL; + + for (i = 0; icomponent[0]; + type[i] = &btype->type; + sampling[i] = (BablSampling *) babl_sampling (1, 1); + } + + name = ncomponents_create_name (btype, components); + babl = babl_db_exist (db, id, name); + if (babl) + { + /* There is an instance already registered by the required id/name, + * returning the preexistent one instead. + */ + babl_free (name); + return babl; + } + + babl = format_new (name, + id, + planar, components, model, + component, sampling, type); + + babl_format_set_is_format_n (babl); + + babl_db_insert (db, babl); + babl_free (name); + return babl; +} + +int +babl_format_is_format_n (const Babl *format) +{ + if (format->class_type == BABL_FORMAT) + { + return format->format.format_n; + } + + return 0; +} + + +static int +is_format_duplicate (Babl *babl, + int planar, + int components, + BablModel *model, + BablComponent **component, + BablSampling **sampling, + const BablType **type) +{ + int i; + + if (babl->format.planar != planar || + babl->format.components != components || + babl->format.model != model) + return 0; + + for (i = 0; i < components; i++) + { + if (babl->format.component[i] != component[i] || + babl->format.sampling[i] != sampling[i] || + babl->format.type[i] != type[i]) + return 0; + } + return 1; +} + +const Babl * +babl_format_new (const void *first_arg, + ...) +{ + va_list varg; + Babl *babl; + int id = 0; + int planar = 0; + int components = 0; + BablModel *model = NULL; + BablComponent *component [BABL_MAX_COMPONENTS]; + BablSampling *sampling [BABL_MAX_COMPONENTS]; + const BablType*type [BABL_MAX_COMPONENTS]; + + BablSampling *current_sampling = (BablSampling *) babl_sampling (1, 1); + BablType *current_type = (BablType *) babl_type_from_id (BABL_DOUBLE); + char *name = NULL; + const void *arg = first_arg; + + va_start (varg, first_arg); + + while (1) + { + /* first, we assume arguments to be strings */ + if (!strcmp (arg, "id")) + { + id = va_arg (varg, int); + } + + else if (!strcmp (arg, "name")) + { + name = babl_strdup (va_arg (varg, char *)); + } + + else if (!strcmp (arg, "packed")) + { + planar = 0; + } + + else if (!strcmp (arg, "planar")) + { + planar = 1; + } + + /* if we didn't point to a known string, we assume argument to be babl */ + else if (BABL_IS_BABL (arg)) + { + Babl *babl = (Babl *) arg; + + switch (babl->class_type) + { + case BABL_TYPE: + case BABL_TYPE_FLOAT: + case BABL_TYPE_INTEGER: + current_type = (BablType *) babl; + break; + + case BABL_COMPONENT: + if (!model) + { + babl_fatal ("no model specified before component %s", + babl->instance.name); + } + component [components] = (BablComponent *) babl; + type [components] = current_type; + sampling [components] = current_sampling; + components++; + + if (components >= BABL_MAX_COMPONENTS) + { + babl_fatal ("maximum number of components (%i) exceeded for %s", + BABL_MAX_COMPONENTS, name); + } + break; + + case BABL_SAMPLING: + current_sampling = (BablSampling *) arg; + break; + + case BABL_MODEL: + if (model) + { + babl_log ("args=(%s): model %s already requested", + babl->instance.name, model->instance.name); + } + model = (BablModel *) arg; + break; + + case BABL_INSTANCE: + case BABL_FORMAT: + case BABL_CONVERSION: + case BABL_CONVERSION_LINEAR: + case BABL_CONVERSION_PLANE: + case BABL_CONVERSION_PLANAR: + case BABL_FISH: + case BABL_FISH_REFERENCE: + case BABL_FISH_SIMPLE: + case BABL_FISH_PATH: + case BABL_IMAGE: + case BABL_EXTENSION: + babl_log ("%s unexpected", + babl_class_name (babl->class_type)); + break; + + case BABL_SKY: /* shut up compiler */ + break; + } + } + + else + { + babl_fatal ("unhandled argument '%s' for format '%s'", arg, name); + } + + arg = va_arg (varg, char *); + if (!arg) + break; + } + + va_end (varg); + + if (!name) + name = create_name (model, components, component, type); + + if (!model) + { + babl_log ("no model specified for format '%s'", name); + babl_free(name); + return NULL; + } + + if (!components) + { + babl_log ("no components specified for format '%s'", name); + babl_free(name); + return NULL; + } + + babl = babl_db_exist (db, id, name); + if (id && !babl && babl_db_exist (db, 0, name)) + babl_fatal ("Trying to reregister BablFormat '%s' with different id!", name); + + if (babl) + { + /* There is an instance already registered by the required id/name, + * returning the preexistent one instead if it doesn't differ. + */ + if (!is_format_duplicate (babl, planar, components, model, + component, sampling, type)) + babl_fatal ("BablFormat '%s' already registered " + "with different content!", name); + + babl_free (name); + return babl; + } + + babl = format_new (name, + id, + planar, components, model, + component, sampling, type); + + babl_db_insert (db, babl); + babl_free (name); + return babl; +} + +int +babl_formats_count (void) +{ + return babl_db_count (db); +} + +int +babl_format_has_alpha (const Babl *format) +{ + int n = babl_format_get_n_components (format); + int i; + + for (i = 0; i < n; i++) + { + if (format->format.component[i]->alpha) + { + return 1; + } + } + + return 0; +} + +int +babl_format_get_bytes_per_pixel (const Babl *format) +{ + if (format->class_type == BABL_FORMAT) + { + return format->format.bytes_per_pixel; + } + + return 0; +} + +int +babl_format_get_n_components (const Babl *format) +{ + if (format->class_type == BABL_FORMAT) + { + return format->format.components; + } + + return 0; +} + +const Babl * +babl_format_get_type (const Babl *format, + int component_index) +{ + if (format->class_type == BABL_FORMAT && + component_index >= 0 && + component_index < format->format.components) + { + return (Babl *)format->format.type[component_index]; + } + + return NULL; +} + +const Babl * +babl_format_with_model_as_type (const Babl *model, + const Babl *type) +{ + BablComponent *component[10]; + int i; + + for (i = 0; i < model->model.components; i++) + { + component[i] = model->model.component[i]; + } + component[i] = NULL; + + return babl_format_new ( + model, + type, + component[0], + component[1], + component[2], + component[3], + component[4], + component[5], + component[6], + component[7], + component[8], + component[9], + NULL + ); +} + +double +babl_format_loss (const Babl *babl) +{ + double loss = 0.0; + void *original; + double *clipped; + void *destination; + double *transformed; + + const Babl *ref_fmt; + const Babl *fmt; + Babl *fish_to; + Babl *fish_from; + + const double *test = babl_get_format_test_pixels (); + const int test_pixels = babl_get_num_format_test_pixels (); + + ref_fmt = babl_format_new ( + babl_model ("RGBA"), + babl_type ("double"), + babl_component ("R"), + babl_component ("G"), + babl_component ("B"), + babl_component ("A"), + NULL); + + if (babl->format.loss != -1.0) + return babl->format.loss; + + fmt = babl; + fish_to = babl_fish_reference (ref_fmt, fmt); + fish_from = babl_fish_reference (fmt, ref_fmt); + + original = babl_calloc (test_pixels, fmt->format.bytes_per_pixel); + clipped = babl_calloc (test_pixels, ref_fmt->format.bytes_per_pixel); + destination = babl_calloc (test_pixels, fmt->format.bytes_per_pixel); + transformed = babl_calloc (test_pixels, ref_fmt->format.bytes_per_pixel); + + babl_process (fish_to, test, original, test_pixels); + babl_process (fish_from, original, clipped, test_pixels); + babl_process (fish_to, clipped, destination, test_pixels); + babl_process (fish_from, destination, transformed, test_pixels); + + loss = babl_rel_avg_error (clipped, test, test_pixels * 4); + + fish_to->fish.processings -= 2; + fish_from->fish.processings -= 2; + fish_to->fish.pixels -= test_pixels * 2; + fish_from->fish.pixels -= test_pixels * 2; + + babl_free (original); + babl_free (clipped); + babl_free (destination); + babl_free (transformed); + + ((Babl*)babl)->format.loss = loss; + return loss; +} + + +void * +babl_get_user_data (const Babl *babl) +{ + switch (babl->instance.class_type) + { + case BABL_MODEL: + return babl->model.data; + case BABL_FORMAT: + return babl->format.model->data; + default: + babl_fatal ("babl_get_user_data called on non-model/format"); + } + babl_fatal ("eeeek"); + return NULL; +} + +void +babl_set_user_data (const Babl *cbabl, void *data) +{ + Babl *babl = (Babl*) cbabl; + switch (cbabl->instance.class_type) + { + case BABL_MODEL: + babl->model.data = data; + break; + case BABL_FORMAT: + babl->format.model->data = data; + break; + default: + babl_fatal ("babl_set_user_data called on non-model/format"); + } +} + +const Babl * +babl_format_get_model (const Babl *format) +{ + if (format->class_type == BABL_FORMAT) + { + return (Babl*)format->format.model; + } + return NULL; +} + +BABL_CLASS_IMPLEMENT (format) + + diff --git a/babl/babl-format.h b/babl/babl-format.h new file mode 100644 index 0000000..bc78f42 --- /dev/null +++ b/babl/babl-format.h @@ -0,0 +1,47 @@ +/* babl - dynamically extendable universal pixel conversion library. + * Copyright (C) 2005-2008, Øyvind Kolås and others. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, see + * . + */ + +#ifndef _BABL_FORMAT_H +#define _BABL_FORMAT_H + +BABL_CLASS_DECLARE (format); + +typedef struct +{ + BablInstance instance; + BablList *from_list; + int components; + BablComponent **component; + BablType **type; + void *model_data; + void *image_template; /* image template for use with + linear (non-planer) images */ + + BablSampling **sampling; + BablModel *model; + int bytes_per_pixel; + int planar; + double loss; /*< average relative error when converting + from and to RGBA double */ + int visited; /* for convenience in code while searching + for conversion paths */ + int format_n; /* whether the format is a format_n type or not */ + int palette; +} BablFormat; + +#endif diff --git a/babl/babl-hash-table.c b/babl/babl-hash-table.c new file mode 100644 index 0000000..d507cb2 --- /dev/null +++ b/babl/babl-hash-table.c @@ -0,0 +1,231 @@ +/* babl - dynamically extendable universal pixel conversion library. + * Copyright (C) 2005, Øyvind Kolås. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, see + * . + */ + +/* Implementation of hash table data structure based on coalesced hashing. + * Copyright (C) 2008, Jan Heller + */ + +#include "config.h" +#include "babl-internal.h" + +#define BABL_HASH_TABLE_INITIAL_MASK 0x1FF /* 511 */ + +/* static functions declarations */ +static inline int +hash_insert (BablHashTable *htab, + Babl *item); + +static void +hash_rehash (BablHashTable *htab); + + +int +babl_hash_by_str (BablHashTable *htab, + const char *str) +{ + int hash = 0; + + while (*str) + { + hash += *str++; + hash += (hash << 10); + hash ^= (hash >> 6); + } + hash += (hash << 3); + hash ^= (hash >> 11); + hash += (hash << 15); + + return (hash & htab->mask); +} + +int +babl_hash_by_int (BablHashTable *htab, + int id) +{ + int hash = 0; + int i; + + for (i = 0; i < sizeof (int); i++) + { + hash += id & 0xFF; + hash += (hash << 10); + hash ^= (hash >> 6); + id >>= 8; + } + hash += (hash << 3); + hash ^= (hash >> 11); + hash += (hash << 15); + + return (hash & htab->mask); +} + +static inline int +hash_insert (BablHashTable *htab, + Babl *item) +{ + int hash = htab->hash_func(htab, item); + + if (htab->data_table[hash] == NULL) + { + /* create new chain */ + htab->data_table[hash] = item; + } + else + { + int it, oit, cursor = 0; + + while ((cursor < (htab->mask + 1)) && (htab->data_table[cursor] != NULL)) + ++cursor; + + htab->data_table[cursor] = item; + + for (oit = hash, it = htab->chain_table[oit]; it != -1; oit = it, it = htab->chain_table[oit]) + ; + htab->chain_table[oit] = cursor; + } + + htab->count++; + return 0; +} + +static void +hash_rehash (BablHashTable *htab) +{ + Babl *item; + int i; + BablHashTable *nhtab = babl_calloc (sizeof (BablHashTable), 1); + + nhtab->data_table = NULL; + nhtab->chain_table = NULL; + nhtab->mask = (htab->mask << 1) + 1; + nhtab->count = 0; + nhtab->hash_func = htab->hash_func; + nhtab->find_func = htab->find_func; + if (nhtab->mask) + { + nhtab->data_table = babl_calloc (sizeof (BablInstance *), babl_hash_table_size(nhtab)); + nhtab->chain_table = babl_malloc (sizeof (int) * babl_hash_table_size(nhtab)); + memset (nhtab->chain_table, -1, sizeof (int) * babl_hash_table_size(nhtab)); + } + + for (i = 0; i < babl_hash_table_size (htab); i++) + { + item = htab->data_table[i]; + babl_hash_table_insert (nhtab, item); + } + + htab->mask = nhtab->mask; + babl_free (htab->data_table); + babl_free (htab->chain_table); + htab->data_table = nhtab->data_table; + htab->chain_table = nhtab->chain_table; + babl_free (nhtab); +} + +int +babl_hash_table_size (BablHashTable *htab) +{ + return htab->mask + 1; +} + + +static int +babl_hash_table_destroy (void *data) +{ + BablHashTable *htab = data; + babl_free (htab->data_table); + babl_free (htab->chain_table); + return 0; +} + + +BablHashTable * +babl_hash_table_init (BablHashValFunction hfunc, + BablHashFindFunction ffunc) +{ + BablHashTable *htab; + + babl_assert(hfunc); + babl_assert(ffunc); + + htab = babl_calloc (sizeof (BablHashTable), 1); + babl_set_destructor (htab, babl_hash_table_destroy); + + htab->data_table = NULL; + htab->chain_table = NULL; + htab->mask = BABL_HASH_TABLE_INITIAL_MASK; + htab->count = 0; + htab->hash_func = hfunc; + htab->find_func = ffunc; + if (htab->mask) + { + htab->data_table = babl_calloc (sizeof (BablInstance *), babl_hash_table_size(htab)); + htab->chain_table = babl_malloc (sizeof (int) * babl_hash_table_size(htab)); + memset (htab->chain_table, -1, sizeof (int) * babl_hash_table_size(htab)); + } + + return htab; +} + +int +babl_hash_table_insert (BablHashTable *htab, + Babl *item) +{ + babl_assert (htab); + babl_assert (BABL_IS_BABL(item)); + + if (babl_hash_table_size (htab) < htab->count + 1) + hash_rehash (htab); + return hash_insert (htab, item); +} + +Babl * +babl_hash_table_find (BablHashTable *htab, + int hash, + BablHashFindFunction find_func, + void *data) +{ + int it; + Babl *item; + + babl_assert (htab); + + it = hash; + item = htab->data_table[it]; + + if (!item) + return NULL; + + for (;;) + { + if (find_func) + { + if (find_func (item, data)) + return item; + } + else if (htab->find_func (item, data)) + return item; + it = htab->chain_table[it]; + if (it == -1) + break; + item = htab->data_table[it]; + } + + return NULL; +} + diff --git a/babl/babl-hash-table.h b/babl/babl-hash-table.h new file mode 100644 index 0000000..f56d02f --- /dev/null +++ b/babl/babl-hash-table.h @@ -0,0 +1,68 @@ +/* babl - dynamically extendable universal pixel conversion library. + * Copyright (C) 2005, Øyvind Kolås. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, see + * . + */ + +#ifndef _BABL_HASH_TABLE_H +#define _BABL_HASH_TABLE_H + +#ifndef _BABL_H +#error babl-hash-table.h is only to be included after babl.h +#endif + + +typedef struct _BablHashTable BablHashTable; + +typedef int (*BablHashValFunction) (BablHashTable *htab, Babl *item); +typedef int (*BablHashFindFunction) (Babl *item, void *data); + +typedef struct _BablHashTable +{ + Babl **data_table; + int *chain_table; + int mask; + int count; + BablHashValFunction hash_func; + BablHashFindFunction find_func; +} _BablHashTable; + + +BablHashTable * +babl_hash_table_init (BablHashValFunction hfunc, + BablHashFindFunction ffunc); + +int +babl_hash_by_str (BablHashTable *htab, + const char *str); + +int +babl_hash_by_int (BablHashTable *htab, + int id); + +int +babl_hash_table_size (BablHashTable *htab); + +int +babl_hash_table_insert (BablHashTable *htab, + Babl *item); + +Babl * +babl_hash_table_find (BablHashTable *htab, + int hash, + BablHashFindFunction find_func, + void *data); + +#endif diff --git a/babl/babl-ids.h b/babl/babl-ids.h new file mode 100644 index 0000000..a42d09b --- /dev/null +++ b/babl/babl-ids.h @@ -0,0 +1,121 @@ +/* babl - dynamically extendable universal pixel conversion library. + * Copyright (C) 2005, Øyvind Kolås. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, see + * . + */ + +#ifndef _BABL_IDS_H +#define _BABL_IDS_H + +enum { + BABL_UNDEFINED = 0, + BABL_TYPE_BASE = 100, + BABL_U8, + BABL_U16, + BABL_U32, + BABL_HALF, + BABL_FLOAT, + BABL_DOUBLE, + BABL_HALF_FLOAT, + + BABL_U8_LUMA, + BABL_U8_CHROMA, + BABL_U16_CIE_L, + BABL_U16_CIE_AB, + BABL_U8_CIE_L, + BABL_U8_CIE_AB, + BABL_TYPE_LAST_INTERNAL, + + BABL_MODEL_BASE = 1000, + BABL_GRAY, + BABL_GRAY_ALPHA, + BABL_GRAY_ALPHA_PREMULTIPLIED, + BABL_RGB, + BABL_RGBA, + BABL_RGBA_PREMULTIPLIED, + BABL_GRAY_GAMMA_2_2, + BABL_GRAY_GAMMA_2_2_ALPHA, + BABL_GRAY_GAMMA_2_2_ALPHA_PREMULTIPLIED, + BABL_RGB_GAMMA_2_2, + BABL_RGBA_GAMMA_2_2, + BABL_RGBA_GAMMA_2_2_PREMULTIPLIED, + BABL_YCBCR, + BABL_YCBCR_ALPHA, + BABL_CIE_LAB, + BABL_CIE_LAB_ALPHA, + BABL_MODEL_LAST_INTERNAL, + + BABL_COMPONENT_BASE = 10000, + BABL_LUMINANCE, + BABL_LUMINANCE_MUL_ALPHA, + BABL_RED, + BABL_GREEN, + BABL_BLUE, + BABL_ALPHA, + BABL_RED_MUL_ALPHA, + BABL_GREEN_MUL_ALPHA, + BABL_BLUE_MUL_ALPHA, + BABL_LUMA, + BABL_LUMA_MUL_ALPHA, + BABL_RED_GAMMA_2_2, + BABL_GREEN_GAMMA_2_2, + BABL_BLUE_GAMMA_2_2, + BABL_RED_GAMMA_2_2_MUL_ALPHA, + BABL_GREEN_GAMMA_2_2_MUL_ALPHA, + BABL_BLUE_GAMMA_2_2_MUL_ALPHA, + + + BABL_X, + BABL_Y, + BABL_Z, + BABL_CIE_L, + BABL_CIE_A, + BABL_CIE_B, + BABL_CB, + BABL_CR, + BABL_PADDING, + BABL_COMPONENT_LAST_INTERNAL, + + BABL_FORMAT_BASE = 100000, + BABL_SRGB, + BABL_SRGBA, + BABL_RGB_HALF, + BABL_RGBA_HALF, + BABL_RGB_FLOAT, + BABL_RGBA_FLOAT, + BABL_RGBA_DOUBLE, + BABL_LAB_FLOAT, + BABL_LAB_U16, + BABL_LAB_U8, + BABL_RGB_U8, + BABL_RGBA_U8, + BABL_RGBA_U16, + BABL_CMYK_HALF, + BABL_CMYK_FLOAT, + BABL_CMYK_ALPHA_FLOAT, + BABL_CMYK_ALPHA_HALF, + BABL_YCBCR411, + BABL_YCBCR422, + BABL_YCBCR420, + BABL_FORMAT_LAST_INTERNAL, + + BABL_PIXEL_USER_BASE +}; + + +#endif + + + diff --git a/babl/babl-image.c b/babl/babl-image.c new file mode 100644 index 0000000..a5d4e1f --- /dev/null +++ b/babl/babl-image.c @@ -0,0 +1,240 @@ +/* babl - dynamically extendable universal pixel conversion library. + * Copyright (C) 2005, Øyvind Kolås. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, see + * . + */ + +#include "config.h" +#include +#include + +#include "babl-internal.h" + +static int babl_image_destruct (void *babl) +{ + BablFormat *format = BABL (babl)->image.format; + if (format && format->image_template == NULL) + { + format->image_template = babl; + return -1; /* this should avoid freeing images created for formats,. */ + } + return 0; +} + +static Babl * +image_new (BablFormat *format, + BablModel *model, + int components, + BablComponent **component, + BablSampling **sampling, + BablType **type, + char **data, + int *pitch, + int *stride) +{ + Babl *babl; + + /* allocate all memory in one chunk */ + babl = babl_malloc (sizeof (BablImage) + + sizeof (BablComponent*) * (components) + + sizeof (BablSampling*) * (components) + + sizeof (BablType*) * (components) + + sizeof (void*) * (components) + + sizeof (int) * (components) + + sizeof (int) * (components)); + babl_set_destructor (babl, babl_image_destruct); + babl->image.component = (void*)(((char *)babl) + sizeof (BablImage)); + babl->image.sampling = (void*)(((char *)babl->image.component) + sizeof (BablComponent*) * (components)); + babl->image.type = (void*)(((char *)babl->image.sampling) + sizeof (BablSampling*) * (components)); + babl->image.data = (void*)(((char *)babl->image.type) + sizeof (BablType*) * (components)); + babl->image.pitch = (void*)(((char *)babl->image.data) + sizeof (void*) * (components)); + babl->image.stride = (void*)(((char *)babl->image.pitch) + sizeof (int) * (components)); + + babl->class_type = BABL_IMAGE; + babl->instance.id = 0; + babl->instance.name = "slaritbartfast"; + babl->image.format = format; + babl->image.model = model; + babl->image.components = components; + + memcpy (babl->image.component, component, components * sizeof (void *)); + memcpy (babl->image.type, type, components * sizeof (void *)); + memcpy (babl->image.data, data, components * sizeof (void *)); + memcpy (babl->image.pitch, pitch, components * sizeof (int)); + memcpy (babl->image.stride, stride, components * sizeof (int)); + + return babl; +} + +Babl * +babl_image_from_linear (char *buffer, + const Babl *cformat) +{ + Babl *format = (Babl*) cformat; + Babl *babl; + BablModel *model = NULL; + int components = 0; + int i; + BablComponent *component [BABL_MAX_COMPONENTS]; + BablSampling *sampling [BABL_MAX_COMPONENTS]; + BablType *type [BABL_MAX_COMPONENTS]; + char *data [BABL_MAX_COMPONENTS]; + int pitch [BABL_MAX_COMPONENTS]; + int stride [BABL_MAX_COMPONENTS]; + + int offset = 0; + int calc_pitch = 0; + + babl_assert (format); + babl_assert (format->class_type == BABL_FORMAT || + format->class_type == BABL_MODEL); + + switch (format->class_type) + { + case BABL_FORMAT: + components = format->format.components; + if (format->format.image_template != NULL) /* single item cache for speeding + up subsequent use of linear buffers + for subsequent accesses + */ + { + babl = format->format.image_template; + format->format.image_template = NULL; + for (i = 0; i < components; i++) + { + babl->image.data[i] = buffer + offset; + offset += (format->format.type[i]->bits / 8); + } + return babl; + } + model = (BablModel *) format->format.model; + + memcpy (component, format->format.component, sizeof (Babl *) * components); + memcpy (sampling, format->format.sampling, sizeof (Babl *) * components); + memcpy (type, format->format.type, sizeof (Babl *) * components); + + for (i = 0; i < components; i++) + { + calc_pitch += (type[i]->bits / 8); + } + for (i = 0; i < components; i++) + { + pitch[i] = calc_pitch; + stride[i] = 0; + data[i] = buffer + offset; + offset += (type[i]->bits / 8); + } + break; + + case BABL_MODEL: + model = (BablModel *) format; + components = format->format.components; + for (i = 0; i < components; i++) + { + calc_pitch += (64 / 8); /*< known to be double when we create from model */ + } + memcpy (component, model->component, sizeof (Babl *) * components); + for (i = 0; i < components; i++) + { + sampling[i] = (BablSampling *) babl_sampling (1, 1); + type[i] = (BablType *) babl_type_from_id (BABL_DOUBLE); + pitch[i] = calc_pitch; + stride[i] = 0; + data[i] = buffer + offset; + offset += (type[i]->bits / 8); + } + break; + + default: + babl_log ("Eeeek!"); + break; + } + + babl = image_new ( + ((void*)format!=(void*)model)?(BablFormat*)format:NULL, + model, components, + component, sampling, type, data, pitch, stride); + return babl; +} + +Babl * +babl_image_new (const void *first, + ...) +{ + va_list varg; + Babl *babl; + int components = 0; + BablFormat *format = NULL; + BablModel *model = NULL; + BablComponent *component [BABL_MAX_COMPONENTS]; + BablSampling *sampling [BABL_MAX_COMPONENTS]; + BablType *type [BABL_MAX_COMPONENTS]; + char *data [BABL_MAX_COMPONENTS]; + int pitch [BABL_MAX_COMPONENTS]; + int stride [BABL_MAX_COMPONENTS]; + + const char *arg = first; + + va_start (varg, first); + + while (1) + { + BablComponent *new_component = NULL; + if (!arg) + break; + + if (BABL_IS_BABL (arg)) + { + Babl *babl = (Babl *) arg; + + if (babl->class_type == BABL_COMPONENT) + { + new_component = (BablComponent *) babl; + } + else + { + babl_log ("%s unexpected", babl_class_name (babl->class_type)); + va_end (varg); + return NULL; + } + } + else + { + new_component = (BablComponent *) babl_component (arg); + } + + /* FIXME: add error checking */ + component [components] = new_component; + sampling [components] = NULL; + type [components] = NULL; + data [components] = va_arg (varg, void *); + pitch [components] = va_arg (varg, int); + stride [components] = va_arg (varg, int); + components++; + + if (components >= BABL_MAX_COMPONENTS) + { + babl_log ("maximum number of components (%i) exceeded", BABL_MAX_COMPONENTS); + } + + arg = va_arg (varg, char *); + } + + va_end (varg); + + + babl = image_new (format, model, components, component, sampling, type, data, pitch, stride); + return babl; +} diff --git a/babl/babl-image.h b/babl/babl-image.h new file mode 100644 index 0000000..0c93f49 --- /dev/null +++ b/babl/babl-image.h @@ -0,0 +1,61 @@ +/* babl - dynamically extendable universal pixel conversion library. + * Copyright (C) 2005-2008, Øyvind Kolås and others. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, see + * . + */ + +#ifndef _BABL_IMAGE_H +#define _BABL_IMAGE_H + + +/****************************************************************/ +/* BablImage */ +BABL_CLASS_DECLARE (image); +/* + * Babl images can be used for planar buffers instead of linear buffers for + * babl_process(), BablImages are still experimental, for now BablImages can be + * passed to babl_process, two different babl_process() functions will be + * needed for this since the polymorphism cannot be trusted to work on linear + * buffers that originate outside babl's control. + * + * Babl * babl_image_new (BablComponent *component1, + * void *data, + * int pitch, + * int stride, + * [BablComponent *component1, + * void *data, + * int pitch, + * int stride, + * ...] + * NULL); + */ +Babl * babl_image_new (const void *first_component, + ...) BABL_ARG_NULL_TERMINATED; + +typedef struct +{ + BablInstance instance; + BablFormat *format; /*< (if known) */ + BablModel *model; /*< (always known) */ + int components; + BablComponent **component; + BablType **type; + BablSampling **sampling; + char **data; + int *pitch; + int *stride; +} BablImage; + +#endif diff --git a/babl/babl-internal.c b/babl/babl-internal.c new file mode 100644 index 0000000..64168cf --- /dev/null +++ b/babl/babl-internal.c @@ -0,0 +1,110 @@ +/* babl - dynamically extendable universal pixel conversion library. + * Copyright (C) 2005, Øyvind Kolås. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, see + * . + */ + +#include "config.h" +#include +#include "babl-internal.h" + +static const char *class_names[] = +{ + "BablInstance", + "BablType", + "BablTypeInteger", + "BablTypeFloat", + "BablSampling", + "BablComponent", + "BablModel", + "BablFormat", + "BablConversion", + "BablConversionLinear", + "BablConversionPlane", + "BablConversionPlanar", + "BablFish", + "BablFishReference", + "BablFishSimple", + "BablFishPath", + "BablImage", + "BablExtenstion", + "BablSky" +}; + +const char * +babl_class_name (BablClassType klass) +{ + return class_names[klass - BABL_INSTANCE]; +} + +/* global variable, indicating whether name lookups + * are frowned upon or not (they are frowned upon within BablBase, + * since that leads to more strings than neccesary in the library.) + */ +int babl_hmpf_on_name_lookups = 0; + +#include +#include + +int +babl_backtrack (void) +{ + char buf[512]; + + sprintf (buf, "echo bt>/tmp/babl.gdb;" + "gdb -q --batch -x /tmp/babl.gdb --pid=%i | grep 'in ''babl_die' -A40", getpid ()); + return system (buf); +} + +void +babl_die (void) +{ + babl_backtrack (); + exit (-1); +} + + +BablMutex *babl_format_mutex; +#if BABL_DEBUG_MEM +BablMutex *babl_debug_mutex; +#endif + +void +babl_internal_init (void) +{ + babl_set_malloc (malloc); + babl_set_free (free); + babl_format_mutex = babl_mutex_new (); +#if BABL_DEBUG_MEM + babl_debug_mutex = babl_mutex_new (); +#endif +} + +void +babl_internal_destroy (void) +{ + babl_mutex_destroy (babl_format_mutex); +#if BABL_DEBUG_MEM + babl_mutex_destroy (babl_debug_mutex); +#endif +} + + +const char * +babl_get_name (const Babl *babl) +{ + babl_assert (BABL_IS_BABL (babl)); + return babl->instance.name; +} diff --git a/babl/babl-internal.h b/babl/babl-internal.h new file mode 100644 index 0000000..ef5411f --- /dev/null +++ b/babl/babl-internal.h @@ -0,0 +1,320 @@ +/* babl - dynamically extendable universal pixel conversion library. + * Copyright (C) 2005, Øyvind Kolås. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, see + * . + */ + +#ifndef _BABL_INTERNAL_H +#define _BABL_INTERNAL_H + +#ifndef BABL_LIBRARY +#error "config.h must be included prior to babl-internal.h" +#endif + +#ifdef _BABL_H +#error babl-internal.h included after babl.h +#endif + +#define BABL_MAX_COMPONENTS 32 +#define BABL_CONVERSIONS 5 + +#include +#include +#include +#include +#include "assert.h" + +#undef _BABL_INTERNAL_H +#include "babl.h" +#define _BABL_INTERNAL_H + +#include "babl-classes.h" +#include "babl-introspect.h" +#include "babl-class.h" +#include "babl-list.h" +#include "babl-hash-table.h" +#include "babl-db.h" +#include "babl-ids.h" +#include "babl-util.h" +#include "babl-memory.h" +#include "babl-mutex.h" +#include "babl-cpuaccel.h" + +/* fallback to floor function when rint is not around */ +#ifndef HAVE_RINT +# define rint(f) (floor (((double) (f)) + 0.5)) +#endif + + + +Babl * babl_conversion_find (const void *source, + const void *destination); +double babl_conversion_error (BablConversion *conversion); +long babl_conversion_cost (BablConversion *conversion); +long babl_conversion_process (const Babl *conversion, + const char *source, + char *destination, + long n); + +Babl * babl_extension_base (void); + +Babl * babl_extender (void); +void babl_set_extender (Babl *new_extender); + +Babl * babl_extension_quiet_log (void); +void babl_extension_deinit (void); + +long babl_fish_reference_process (const Babl *babl, + const char *source, + char *destination, + long n); + +Babl * babl_fish_reference (const Babl *source, + const Babl *destination); +Babl * babl_fish_simple (BablConversion *conversion); +void babl_fish_stats (FILE *file); +Babl * babl_fish_path (const Babl *source, + const Babl *destination); + +int babl_fish_get_id (const Babl *source, + const Babl *destination); + +double babl_format_loss (const Babl *babl); +Babl * babl_image_from_linear (char *buffer, + const Babl *format); +Babl * babl_image_double_from_image (const Babl *source); + +double babl_model_is_symmetric (const Babl *babl); +void babl_die (void); +int babl_sanity (void); + +void babl_core_init (void); +const Babl *babl_format_with_model_as_type (const Babl *model, + const Babl *type); +int babl_formats_count (void); /* should maybe be templated? */ +int babl_type_is_symmetric (const Babl *babl); + +/**** LOGGER ****/ +#include + +int babl_backtrack (void); + +static inline void +real_babl_log_va(const char *file, + int line, + const char *function, + const char *fmt, + va_list varg) +{ + Babl *extender = babl_extender(); + + if (extender != babl_extension_quiet_log()) + { + if (babl_extender()) + fprintf (stdout, "When loading %s:\n\t", babl_extender()->instance.name); + + fprintf (stdout, "%s:%i %s()\n\t", file, line, function); + } + + vfprintf (stdout, fmt, varg); + + fprintf (stdout, "\n"); + fflush (NULL); + return; +} + +static inline void +real_babl_log (const char *file, + int line, + const char *function, + const char *fmt, ...) +{ + va_list varg; + + va_start (varg, fmt); + real_babl_log_va(file, line, function, fmt, varg); + va_end (varg); +} + +/* Provide a string identifying the current function, non-concatenatable */ +#ifndef G_STRFUNC +#if defined (__GNUC__) +# define G_STRFUNC ((const char*) (__PRETTY_FUNCTION__)) +#elif defined (G_HAVE_ISO_VARARGS) +# define G_STRFUNC ((const char*) (__func__)) +#else +# define G_STRFUNC ((const char*) ("???")) +#endif +#endif + +#if defined(__cplusplus) && defined(BABL_ISO_CXX_VARIADIC_MACROS) +# define BABL_ISO_VARIADIC_MACROS 1 +#endif + +#if defined(BABL_ISO_VARIADIC_MACROS) + +#define babl_log(...) \ + real_babl_log(__FILE__, __LINE__, G_STRFUNC, __VA_ARGS__) + +#define babl_fatal(...) do{ \ + real_babl_log(__FILE__, __LINE__, G_STRFUNC, __VA_ARGS__); \ + babl_die();} \ +while(0) + +#elif defined(BABL_GNUC_VARIADIC_MACROS) + +#define babl_log(args...) \ + real_babl_log(__FILE__, __LINE__, G_STRFUNC, args) + +#define babl_fatal(args...) do{ \ + real_babl_log(__FILE__, __LINE__, G_STRFUNC, args); \ + babl_die();} \ +while(0) + +#else + +static inline void +babl_log (const char *format, ...) +{ + va_list args; + va_start (args, format); + real_babl_log_va (__FILE__, __LINE__, G_STRFUNC, format, args); + va_end (args); +} +static inline void +babl_fatal (const char *format, ...) +{ + va_list args; + va_start (args, format); + real_babl_log_va (__FILE__, __LINE__, G_STRFUNC, format, args); + va_end (args); + babl_die(); +} + +#endif + + +#define babl_assert(expr) do{ \ + if(!(expr)) \ + { \ + real_babl_log(__FILE__, __LINE__, G_STRFUNC, "Eeeeek! Assertion failed: `" #expr "`"); \ + assert(expr); \ + } \ +}while(0) +/***** LOGGER (end)**/ + +#define BABL_CLASS_TYPE_IS_VALID(klass_type) \ + ( ((klass_type)>=BABL_INSTANCE ) && ((klass_type)<=BABL_SKY) ?1:0 ) + +#define BABL_IS_BABL(obj) \ +(NULL==(obj)?0 \ + :BABL_CLASS_TYPE_IS_VALID(((Babl*)(obj))->class_type) \ +) + +extern int babl_hmpf_on_name_lookups; +extern int babl_in_fish_path; +extern BablMutex *babl_format_mutex; + +#define BABL_DEBUG_MEM 0 +#if BABL_DEBUG_MEM +extern BablMutex *babl_debug_mutex; +#endif + +const char *babl_class_name (BablClassType klass); +void babl_internal_init (void); +void babl_internal_destroy (void); + + +/* this template is expanded in the files including babl-internal.h, + * generating code, the declarations for these functions are found in + * the BABL_CLASS expansions done in babl.h as well, thus babl.h needs + * to be kept in sync with the C files. + */ + +#define BABL_CLASS_MINIMAL_IMPLEMENT(klass) \ + \ +BablDb * \ +babl_##klass##_db (void) \ +{ \ + if (!db) \ + db=babl_db_init (); \ + return db; \ +} \ + \ +void \ +babl_##klass##_class_for_each (BablEachFunction each_fun, \ + void *user_data) \ +{ \ + babl_db_each (db, each_fun, user_data); \ +} \ + +#define BABL_CLASS_IMPLEMENT(klass) \ +BABL_CLASS_MINIMAL_IMPLEMENT(klass) \ + \ +const Babl * \ +babl_##klass (const char *name) \ +{ \ + Babl *babl; \ + \ + if (babl_hmpf_on_name_lookups) \ + { \ + babl_log ("%s(\"%s\"): hmpf!", G_STRFUNC, name); \ + } \ + babl = babl_db_exist_by_name (db, name); \ + \ + if (!babl) \ + { \ + babl_fatal ("%s(\"%s\"): not found", G_STRFUNC, name); \ + } \ + return babl; \ +} \ + \ +const Babl * \ +babl_##klass##_from_id (int id) \ +{ \ + Babl *babl; \ + babl = babl_db_exist_by_id (db, id); \ + if (!babl) \ + { \ + babl_fatal ("%s(%i): not found", G_STRFUNC, id); \ + } \ + return babl; \ +} \ + +#define BABL(obj) ((Babl*)(obj)) + +static inline double babl_parse_double (const char *str) +{ + double result = 0; + if (!str) + return 0.0; + result = atoi (str); + if (strchr (str, '.')) + { + char *p = strchr (str, '.') + 1; + double d = 10; + for (;*p && *p >= '0' && *p <= '9';p++, d *= 10) + { + if (result >= 0) + result += (*p - '0') / d; + else + result -= (*p - '0') / d; + } + } + return result; +} + + +#endif diff --git a/babl/babl-introspect.c b/babl/babl-introspect.c new file mode 100644 index 0000000..d969192 --- /dev/null +++ b/babl/babl-introspect.c @@ -0,0 +1,231 @@ +/* babl - dynamically extendable universal pixel conversion library. + * Copyright (C) 2005, Øyvind Kolås. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, see + * . + */ + +#include "config.h" +#include "babl-internal.h" /* for babl_log */ + +#define BABL_LOG + +#ifdef BABL_LOG + +static void sampling_introspect (Babl *babl); +static void model_introspect (Babl *babl); +static void type_introspect (Babl *babl); +static void format_introspect (Babl *babl); + +static int each_introspect (Babl *babl, + void *user_data); +#endif + +void +babl_introspect (Babl *babl) +{ +#ifdef BABL_LOG + Babl *extender_backup = babl_extender (); + + babl_set_extender (babl_extension_quiet_log ()); + + if (babl) + { + each_introspect (babl, NULL); + return; + } + babl_log ("Introspection report"); + babl_log ("===================================================="); + + babl_log (""); + babl_log ("Data Types:"); + babl_type_class_for_each (each_introspect, NULL); + babl_log (""); + babl_log ("Sampling (chroma subsampling) factors:"); + babl_sampling_class_for_each (each_introspect, NULL); + babl_log (""); + babl_log ("Components:"); + babl_component_class_for_each (each_introspect, NULL); + babl_log (""); + babl_log ("Models (of components):"); + babl_model_class_for_each (each_introspect, NULL); + babl_log (""); + babl_log ("Pixel formats:"); + babl_format_class_for_each (each_introspect, NULL); + babl_log (""); + babl_log ("conversions:"); + babl_conversion_class_for_each (each_introspect, NULL); + babl_log (""); + babl_log ("extensions:"); + babl_extension_class_for_each (each_introspect, NULL); + babl_log (""); + babl_log ("fishes"); + babl_fish_class_for_each (each_introspect, NULL); + babl_log (""); + + babl_set_extender (extender_backup); +#endif +} + +#ifdef BABL_LOG + +static void +item_conversions_introspect (Babl *babl) +{ + int i; + BablList *list; + + list = babl->type.from_list; + if (list) + { + babl_log ("\t\tconversions from %s: %i", + babl->instance.name, babl_list_size (list)); + + for (i = 0; i < babl_list_size (list); i++) + babl_log ("\t\t\t'%s'", BABL (list->items[i])->instance.name); + } +} + +static void +model_introspect (Babl *babl) +{ + int i; + + babl_log ("\t\tcomponents=%i", babl->model.components); + + for (i = 0; i < babl->model.components; i++) + { + babl_log ("\t\tindex[%i] = \"%s\"", i, + BABL (babl->model.component[i])->instance.name); + } +} + +static void +type_introspect (Babl *babl) +{ + babl_log ("\t\tbits=%i", babl->type.bits); +} + + +static void +sampling_introspect (Babl *babl) +{ + babl_log ("\t\thorizontal = %i", + babl->sampling.horizontal); + babl_log ("\t\tvertical = %i", + babl->sampling.vertical); +} + + +static void +format_introspect (Babl *babl) +{ + int i; + + babl_log ("\t\tmodel=\"%s\"", babl->format.model->instance.name); + babl_log ("\t\tplanar=%i", babl->format.planar); + babl_log ("\t\tcomponents=%i", babl->format.components); + + for (i = 0; i < babl->format.components; i++) + { + babl_log ("\t\tband[%i] type=\"%s\" sampling=\"%s\" component=\"%s\"", + i, babl->format.type[i]->instance.name, + babl->format.sampling[i]->instance.name, + babl->format.component[i]->instance.name); + } +} + +static void +conversion_introspect (Babl *babl) +{ + babl_log ("\t\tprocessings:%i pixels:%li", + babl->conversion.processings, babl->conversion.pixels); + if (BABL (babl->conversion.source)->class_type == BABL_FORMAT) + { + babl_log ("\t\terror: %f", babl_conversion_error (&babl->conversion)); + } +} + +static void +fish_introspect (Babl *babl) +{ + babl_log ("\t\tprocessings:%i pixels:%li", + babl->fish.processings, babl->fish.pixels); +} + +static void +fish_path_introspect (Babl *babl) +{ + babl_log ("\t\tcost:%f error:%.12f", + babl->fish_path.cost, babl->fish.error); + + babl_list_each(babl->fish_path.conversion_list, each_introspect, NULL); +} + +static int +each_introspect (Babl *babl, + void *user_data) +{ + babl_log ("\t\"%s\"\t%i\t%s", + babl->instance.name, + babl->instance.id, + babl_class_name (babl->class_type)); + switch (babl->class_type) + { + case BABL_TYPE: + type_introspect (babl); + item_conversions_introspect (babl); + break; + + case BABL_COMPONENT: + break; + + case BABL_MODEL: + model_introspect (babl); + item_conversions_introspect (babl); + break; + + case BABL_FORMAT: + format_introspect (babl); + item_conversions_introspect (babl); + break; + + case BABL_SAMPLING: + sampling_introspect (babl); + item_conversions_introspect (babl); + break; + + case BABL_CONVERSION: + case BABL_CONVERSION_PLANE: + case BABL_CONVERSION_PLANAR: + case BABL_CONVERSION_LINEAR: + conversion_introspect (babl); + break; + + case BABL_FISH: + case BABL_FISH_REFERENCE: + case BABL_FISH_SIMPLE: + fish_introspect (babl); + break; + + case BABL_FISH_PATH: + fish_path_introspect (babl); + break; + + default: + break; + } + return 0; +} +#endif diff --git a/babl/babl-introspect.h b/babl/babl-introspect.h new file mode 100644 index 0000000..6e32a2a --- /dev/null +++ b/babl/babl-introspect.h @@ -0,0 +1,26 @@ +/* babl - dynamically extendable universal pixel conversion library. + * Copyright (C) 2005-2008, Øyvind Kolås and others. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, see + * . + */ + +#ifndef _BABL_INTROSPECT_H +#define _BABL_INTROSPECT_H + + +void babl_introspect (Babl *babl); /* introspect a given BablObject */ + + +#endif diff --git a/babl/babl-list.c b/babl/babl-list.c new file mode 100644 index 0000000..49647bb --- /dev/null +++ b/babl/babl-list.c @@ -0,0 +1,131 @@ +/* babl - dynamically extendable universal pixel conversion library. + * Copyright (C) 2005, Øyvind Kolås. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, see + * . + */ + +/* Implementation of list data structure. + * Copyright (C) 2008, Jan Heller + */ + +#include "config.h" +#include "babl-internal.h" + +#define BABL_LIST_INITIAL_SIZE 0x7F + +BablList * +babl_list_init (void) +{ + return babl_list_init_with_size (BABL_LIST_INITIAL_SIZE); +} + +static int +babl_list_destroy (void *data) +{ + BablList *list = data; + babl_free (list->items); + return 0; +} + +BablList * +babl_list_init_with_size (int initial_size) +{ + BablList *list = babl_calloc (sizeof (BablList), 1); + + babl_set_destructor (list, babl_list_destroy); + + if (initial_size == 0) + initial_size = 1; + list->size = initial_size; + list->count = 0; + list->items = NULL; + if (list->size) + { + list->items = babl_calloc (sizeof (BablInstance *), list->size); + } + + return list; +} + +void +babl_list_insert_last (BablList *list, + Babl *item) +{ + babl_assert(list); + babl_assert(BABL_IS_BABL(item)); + + if (list->size < list->count + 1) + { + Babl **new_items; + + new_items = babl_realloc (list->items, (list->size * 2) * sizeof (BablInstance *)); + babl_assert (new_items); + list->items = new_items; + memset (list->items + list->size, 0, list->size * sizeof (BablInstance *)); + list->size *= 2; + } + list->items[list->count++] = item; +} + +void +babl_list_remove_last (BablList *list) +{ + babl_assert (list); + babl_assert (list->count > 0); + + list->count--; +} + +void +babl_list_copy (BablList *from, + BablList *to) +{ + babl_assert (from); + babl_assert (to); + + if (to->size < from->count) + { + Babl **new_items; + + new_items = babl_realloc (to->items, from->count * sizeof (BablInstance *)); + babl_assert (new_items); + to->items = new_items; + to->size = from->count; + } + + memcpy (to->items, from->items, from->count * sizeof (BablInstance *)); + to->count = from->count; +} + +void +babl_list_each (BablList *list, + BablEachFunction each_fun, + void *user_data) +{ + int i; + + babl_assert(list); + babl_assert(each_fun); + + for (i = 0; i < list->count; i++) + { + if (list->items[i]) + { + if (each_fun ((Babl *) list->items[i], user_data)) + break; + } + } +} + diff --git a/babl/babl-list.h b/babl/babl-list.h new file mode 100644 index 0000000..69af9fc --- /dev/null +++ b/babl/babl-list.h @@ -0,0 +1,64 @@ +/* babl - dynamically extendable universal pixel conversion library. + * Copyright (C) 2005, Øyvind Kolås. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, see + * . + */ + +#ifndef _BABL_LIST_H +#define _BABL_LIST_H + +#ifndef _BABL_H +#error babl-list.h is only to be included after babl.h +#endif + +struct _BablList +{ + int count; + int size; + Babl **items; +}; + +BablList * +babl_list_init (void); + +BablList * +babl_list_init_with_size (int initial_size); + +int +babl_list_size (BablList *list); + +void +babl_list_insert_last (BablList *list, + Babl *item); + +void +babl_list_remove_last (BablList *list); + +#define babl_list_get_n(list,n) (list->items[(n)]) +#define babl_list_get_first(list) (babl_list_get_n(list,0)) +#define babl_list_size(list) (list->count) +#define babl_list_get_last(list) (babl_list_get_n(list, babl_list_size(list)-1)) + +void +babl_list_copy (BablList *from, + BablList *to); + +void +babl_list_each (BablList *list, + BablEachFunction each_fun, + void *user_data); + + +#endif diff --git a/babl/babl-macros.h b/babl/babl-macros.h new file mode 100644 index 0000000..f022d9f --- /dev/null +++ b/babl/babl-macros.h @@ -0,0 +1,33 @@ +/* babl - dynamically extendable universal pixel conversion library. + * Copyright (C) 2005-2008, Øyvind Kolås and others. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, see + * . + */ + +#ifndef _BABL_MACROS_H +#define _BABL_MACROS_H + +#if !defined(BABL_INSIDE_BABL_H) && !defined(BABL_IS_BEING_COMPILED) +#error "babl-version.h must not be included directly, include babl.h instead." +#endif + + +#if __GNUC__ >= 4 +#define BABL_ARG_NULL_TERMINATED __attribute__((__sentinel__)) +#else +#define BABL_ARG_NULL_TERMINATED +#endif + +#endif diff --git a/babl/babl-memory.c b/babl/babl-memory.c new file mode 100644 index 0000000..d9e4d2f --- /dev/null +++ b/babl/babl-memory.c @@ -0,0 +1,367 @@ +/* babl - dynamically extendable universal pixel conversion library. + * Copyright (C) 2005, Øyvind Kolås. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, see + * . + */ + +#include "config.h" +#include +#include +#include +#include +#include "babl-internal.h" + +static BablMallocFunc malloc_f = malloc; +static BablFreeFunc free_f = free; + +static void *first_malloc_used = NULL; +static void *first_free_used = NULL; + +void +babl_set_malloc (BablMallocFunc malloc_function) +{ + malloc_f = malloc_function; +} + +void +babl_set_free (BablFreeFunc free_function) +{ + free_f = free_function; +} + +static char *signature = "babl-memory"; +static char *freed = "So long and thanks for all the fish."; + +typedef struct +{ + char *signature; + size_t size; + int (*destructor)(void *ptr); +} BablAllocInfo; + +#define BABL_ALIGN 16 +#define BABL_ALLOC (sizeof (BablAllocInfo) + sizeof (void *)) +#define BAI(ptr) ((BablAllocInfo *) *((void **) ptr - 1)) +#define IS_BAI(ptr) (BAI (ptr)->signature == signature) + +#if BABL_DEBUG_MEM + +/* runtime statistics: */ +static int mallocs = 0; +static int frees = 0; +static int strdups = 0; +static int reallocs = 0; +static int callocs = 0; +static int dups = 0; + +static const char * +mem_stats (void) +{ + static char buf[128]; + + sprintf (buf, "mallocs:%i callocs:%i strdups:%i dups:%i allocs:%i frees:%i reallocs:%i\t|", + mallocs, callocs, strdups, dups, mallocs + callocs + strdups + dups, frees, reallocs); + return buf; +} + +#endif + +static void +functions_sanity (void) +{ + if (first_malloc_used != malloc_f || + first_free_used != free_f) + { + static int displayed = 0; + + if (first_malloc_used == NULL) + { + first_malloc_used = malloc_f; + first_free_used = free_f; + } + else if (!displayed) + { + fprintf (stderr, "HMM....\nSomething strange is happening,\n%s function pointer changing between invocations in babl.\n", + first_malloc_used == malloc_f ? "free" : + (first_free_used == free_f ? "malloc" : "malloc and free")); + displayed = 1; + } + } +} + +/* Allocate /size/ bytes of memory + * + * contents of memory undefined. + */ +void * +babl_malloc (size_t size) +{ + char *ret; + int offset; + + babl_assert (size); + + functions_sanity (); + ret = malloc_f (BABL_ALLOC + BABL_ALIGN + size); + if (!ret) + babl_fatal ("args=(%i): failed", size); + + offset = BABL_ALIGN - ((uintptr_t) ret + BABL_ALLOC) % BABL_ALIGN; + ret = ret + BABL_ALLOC + offset; + + *((void **) ret - 1) = ret - BABL_ALLOC - offset; + BAI (ret)->signature = signature; + BAI (ret)->size = size; + BAI (ret)->destructor = NULL; +#if BABL_DEBUG_MEM + babl_mutex_lock (babl_debug_mutex); + mallocs++; + babl_mutex_unlock (babl_debug_mutex); +#endif + return (void *) (ret); +} + +/* set a callback to be called when the segment is freed. + */ +void +babl_set_destructor (void *ptr, + int (*destructor)(void *ptr)) +{ + babl_assert (IS_BAI (ptr)); + BAI(ptr)->destructor = destructor; +} + +/* Create a duplicate allocation of the same size, note + * that the exact location of the allocation needs to be + * passed. + */ +void * +babl_dup (void *ptr) +{ + void *ret; + + babl_assert (IS_BAI (ptr)); + + ret = babl_malloc (BAI (ptr)->size); + memcpy (ret, ptr, BAI (ptr)->size); + +#if BABL_DEBUG_MEM + babl_mutex_lock (babl_debug_mutex); + dups++; + mallocs--; + babl_mutex_unlock (babl_debug_mutex); +#endif + return NULL; +} + +/* Free memory allocated by a babl function (note: babl_free + * will complain if memory not allocated by babl is passed.) + * + * Note: the function is made variadic to be a legal callback + * function in some circumstances. + */ +void +babl_free (void *ptr, + ...) +{ + functions_sanity (); + if (!ptr) + return; + if (!IS_BAI (ptr)) + { + #define IS_BAI(ptr) (BAI (ptr)->signature == signature) + if (freed) + babl_fatal ("\nbabl:double free detected\n------------------------"); + babl_fatal ("memory not allocated by babl allocator"); + } + + if (BAI (ptr)->destructor) + if (BAI (ptr)->destructor (ptr)) + return; /* bail out on non 0 return from destructor */ + + BAI (ptr)->signature = freed; + free_f (BAI (ptr)); +#if BABL_DEBUG_MEM + babl_mutex_lock (babl_debug_mutex); + frees++; + babl_mutex_unlock (babl_debug_mutex); +#endif +} + +/* reallocate allocation to be in size instead, contents of + * common allocated memory between old and new size is preserved. + */ +void * +babl_realloc (void *ptr, + size_t size) +{ + void *ret = NULL; + + if (!ptr) + { + return babl_malloc (size); + } + + babl_assert (IS_BAI (ptr)); + + if (size == 0) + { + babl_free (ptr); + return NULL; + } + if (babl_sizeof (ptr) >= size) + { + return ptr; + } + else if (babl_sizeof (ptr) < size) + { +#ifdef USE_REALLOC_CLEAR + /* not needed yet by babl, if aviodable, preferred, since + * it has performance hits where it isn't wanted, a special + * function might be better when needd. + */ + ret = babl_calloc (size, 1); +#else + ret = babl_malloc (size); +#endif + memcpy (ret, ptr, babl_sizeof (ptr)); + BAI (ret)->destructor = BAI (ptr)->destructor; + BAI (ptr)->destructor = NULL; + babl_free (ptr); +#if BABL_DEBUG_MEM + babl_mutex_lock (babl_debug_mutex); + reallocs++; + babl_mutex_unlock (babl_debug_mutex); +#endif + return ret; + } + + if (!ret) + babl_fatal ("args=(%p, %i): failed", ptr, size); + + return NULL; +} + +/* allocate nmemb*size bytes and set it to all zeros. */ +void * +babl_calloc (size_t nmemb, + size_t size) +{ + void *ret = babl_malloc (nmemb * size); + + if (!ret) + babl_fatal ("args=(%i, %i): failed", nmemb, size); + + memset (ret, 0, nmemb * size); + +#if BABL_DEBUG_MEM + babl_mutex_lock (babl_debug_mutex); + callocs++; + mallocs--; + babl_mutex_unlock (babl_debug_mutex); +#endif + return ret; +} + +/* Returns the size of an allocation. + */ +size_t +babl_sizeof (void *ptr) +{ + babl_assert (IS_BAI (ptr)); + return BAI (ptr)->size; +} + +/* duplicate allocation needed for a string, and + * copy string contents, string is zero terminated. + */ +char * +babl_strdup (const char *s) +{ + char *ret; + + ret = babl_malloc (strlen (s) + 1); + if (!ret) + babl_log ("args=(%s): failed", s); + strcpy (ret, s); + +#if BABL_DEBUG_MEM + babl_mutex_lock (babl_debug_mutex); + strdups++; + mallocs--; + babl_mutex_unlock (babl_debug_mutex); +#endif + return ret; +} + +/* append string to babl allocated string dest, the returned + * string is the new canonical position with src added to dest + * if the dest allocation needed to be resized. Passing NULL + * causes a new allocation (thus babl-memory sees NULL as the empty + * string). + */ +char * +babl_strcat (char *dest, + const char *src) +{ + char *ret; + int src_len; + int dst_len; + + if (NULL == src) + return dest; + + src_len = strlen (src); + if (!dest) + { + ret = babl_malloc (src_len + 1); + strcpy (ret, src); + return ret; + } + babl_assert (IS_BAI (dest)); + dst_len = strlen (dest); + + ret = dest; + + if (babl_sizeof (dest) < src_len + dst_len + 1) + { + size_t new_size = babl_sizeof (dest); + while (new_size < src_len + dst_len + 1) + new_size *= 2; + ret = babl_realloc (dest, new_size); + } + + strcpy (&ret[dst_len], src); + return ret; +} + +#if BABL_DEBUG_MEM +/* performs a sanity check on memory, (checks if number of + * allocations and frees on babl memory evens out to zero). + */ +int +babl_memory_sanity (void) +{ + if (frees != mallocs + strdups + callocs) + { + babl_log ("memory usage does not add up!\n" + "%s\n" + "\tbalance: %i-%i=%i\n", + mem_stats (), (strdups + mallocs + callocs), frees, (strdups + mallocs + callocs) - frees); + return -1; + } + return 0; +} +#endif diff --git a/babl/babl-memory.h b/babl/babl-memory.h new file mode 100644 index 0000000..251f0c3 --- /dev/null +++ b/babl/babl-memory.h @@ -0,0 +1,49 @@ +/* babl - dynamically extendable universal pixel conversion library. + * Copyright (C) 2005, Øyvind Kolås. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, see + * . + */ + +#ifndef _BABL_MEMORY_H +#define _BABL_MEMORY_H + + +typedef void * (* BablMallocFunc) (size_t size); +typedef void (* BablFreeFunc) (void *ptr); + + +void babl_set_malloc (BablMallocFunc malloc_function); +void babl_set_free (BablFreeFunc free_function); +int babl_memory_sanity (void); + +void * babl_malloc (size_t size); +void babl_set_destructor (void *ptr, + int (*destructor)(void *ptr)); + +void babl_free (void *ptr, + ...); +void * babl_calloc (size_t nmemb, + size_t size); +void * babl_realloc (void *ptr, + size_t size); + +size_t babl_sizeof (void *ptr); +void * babl_dup (void *ptr); + +char * babl_strdup (const char *s); +char * babl_strcat (char *dest, + const char *src); + +#endif diff --git a/babl/babl-model.c b/babl/babl-model.c new file mode 100644 index 0000000..02f3c0b --- /dev/null +++ b/babl/babl-model.c @@ -0,0 +1,352 @@ +/* babl - dynamically extendable universal pixel conversion library. + * Copyright (C) 2005, Øyvind Kolås. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, see + * . + */ + +#include "config.h" +#include +#include +#include +#define NEEDS_BABL_DB +#include "babl-internal.h" +#include "babl-db.h" +#include "babl-ref-pixels.h" + +static const Babl *construct_double_format (const Babl *model); + +static int +babl_model_destroy (void *data) +{ + Babl *babl = data; + if (babl->model.from_list) + babl_free (babl->model.from_list); + return 0; +} + +static char * +babl_model_create_name (int components, + BablComponent **component) +{ + char *p = NULL; + + while (components--) + { + p = babl_strcat(p, (*component)->instance.name); + component++; + } + + return p; +} + +static Babl * +model_new (const char *name, + int id, + int components, + BablComponent **component) +{ + Babl *babl; + + babl = babl_malloc (sizeof (BablModel) + + sizeof (BablComponent *) * (components) + + strlen (name) + 1); + babl_set_destructor (babl, babl_model_destroy); + babl->model.component = (void *) (((char *) babl) + sizeof (BablModel)); + babl->instance.name = (void *) (((char *) babl->model.component) + sizeof (BablComponent *) * (components)); + + babl->class_type = BABL_MODEL; + babl->instance.id = id; + babl->model.components = components; + strcpy (babl->instance.name, name); + memcpy (babl->model.component, component, sizeof (BablComponent *) * components); + + babl->model.from_list = NULL; + return babl; +} + +static int +is_model_duplicate (Babl *babl, int components, BablComponent **component) +{ + int i; + + if (babl->model.components != components) + return 0; + + for (i = 0; i < components; i++) + { + if (babl->model.component[i] != component[i]) + return 0; + } + + return 1; +} + + +const Babl * +babl_model_new (void *first_argument, + ...) +{ + va_list varg; + Babl *babl = NULL; + int id = 0; + int components = 0; + const char *arg = first_argument; + const char *assigned_name = NULL; + char *name = NULL; + BablComponent *component [BABL_MAX_COMPONENTS]; + + va_start (varg, first_argument); + + while (1) + { + /* first, we assume arguments to be strings */ + if (!strcmp (arg, "id")) + { + id = va_arg (varg, int); + } + + else if (!strcmp (arg, "name")) + { + assigned_name = va_arg (varg, char *); + } + + /* if we didn't point to a known string, we assume argument to be babl */ + else if (BABL_IS_BABL (arg)) + { + Babl *bablc = (Babl *) arg; + + switch (bablc->class_type) + { + case BABL_COMPONENT: + if (components >= BABL_MAX_COMPONENTS) + { + babl_log ("maximum number of components (%i) exceeded for %s", + BABL_MAX_COMPONENTS, + assigned_name ? assigned_name : "(unnamed)"); + } + component [components++] = (BablComponent *) bablc; + break; + + case BABL_MODEL: + babl_log ("submodels not handled yet"); + break; + + case BABL_TYPE: + case BABL_TYPE_INTEGER: + case BABL_TYPE_FLOAT: + case BABL_SAMPLING: + case BABL_INSTANCE: + case BABL_FORMAT: + + + case BABL_CONVERSION: + case BABL_CONVERSION_LINEAR: + case BABL_CONVERSION_PLANE: + case BABL_CONVERSION_PLANAR: + case BABL_FISH: + case BABL_FISH_SIMPLE: + case BABL_FISH_REFERENCE: + case BABL_FISH_PATH: + case BABL_IMAGE: + case BABL_EXTENSION: + babl_log ("%s unexpected", babl_class_name (bablc->class_type)); + break; + + case BABL_SKY: /* shut up compiler */ + break; + } + } + + else + { + babl_fatal ("unhandled argument '%s' for babl_model '%s'", + arg, assigned_name ? assigned_name : "(unnamed)"); + } + + arg = va_arg (varg, char *); + if (!arg) + break; + } + + va_end (varg); + + if (assigned_name) + name = babl_strdup(assigned_name); + else + name = babl_model_create_name (components, component); + + if (!components) + { + babl_log("no components specified for model '%s'", name); + goto out; + } + + babl = babl_db_exist (db, id, name); + if (id && !babl && babl_db_exist (db, 0, name)) + babl_fatal ("Trying to reregister BablModel '%s' with different id!", name); + + if (! babl) + { + babl = model_new (name, id, components, component); + babl_db_insert (db, babl); + construct_double_format (babl); + } + else + { + if (!is_model_duplicate (babl, components, component)) + babl_fatal ("BablModel '%s' already registered " + "with different components!", name); + } + + out: + babl_free (name); + + return babl; +} + + +#define TOLERANCE 0.001 + +static const Babl *reference_format (void) +{ + static const Babl *self = NULL; + + if (!self) + self = babl_format_new ( + babl_model ("RGBA"), + babl_type ("double"), + babl_component ("R"), + babl_component ("G"), + babl_component ("B"), + babl_component ("A"), + NULL); + return self; +} + +static const Babl *construct_double_format (const Babl *model) +{ + const void *argument[44 + 1]; + int args = 0; + int i; + + if (model == babl_model_from_id (BABL_RGBA)) + { + argument[args++] = "id"; + argument[args++] = (void*) BABL_RGBA_DOUBLE; + } + argument[args++] = model; + argument[args++] = babl_type_from_id (BABL_DOUBLE); + + for (i = 0; i < model->model.components; i++) + { + argument[args++] = model->model.component[i]; + } + argument[args++] = NULL; + +#define o(argno) argument[argno], + return babl_format_new (o (0) o (1) o (2) o (3) + o (4) o (5) o (6) o (7) + o (8) o (9) o (10) o (11) + o (12) o (13) o (14) o (15) + o (16) o (17) o (18) o (19) + o (20) o (21) o (22) o (23) + o (24) o (25) o (26) o (27) + o (28) o (29) o (30) o (31) + o (32) o (33) o (34) o (35) + o (36) o (37) o (38) o (39) + o (40) o (41) o (42) NULL); +#undef o +} + +double +babl_model_is_symmetric (const Babl *cbabl) +{ + Babl *babl = (Babl*)cbabl; + void *original; + double *clipped; + void *destination; + double *transformed; + int symmetric = 1; + + const Babl *ref_fmt; + const Babl *fmt; + Babl *fish_to; + Babl *fish_from; + + const int test_pixels = babl_get_num_model_test_pixels (); + const double *test = babl_get_model_test_pixels (); + + ref_fmt = reference_format (); + fmt = construct_double_format (babl); + fish_to = babl_fish_reference (ref_fmt, fmt); + fish_from = babl_fish_reference (fmt, ref_fmt); + + original = babl_calloc (1, 64 / 8 * babl->model.components * test_pixels); + clipped = babl_calloc (1, 64 / 8 * 4 * test_pixels); + destination = babl_calloc (1, 64 / 8 * babl->model.components * test_pixels); + transformed = babl_calloc (1, 64 / 8 * 4 * test_pixels); + + babl_process (fish_to, test, original, test_pixels); + babl_process (fish_from, original, clipped, test_pixels); + babl_process (fish_to, clipped, destination, test_pixels); + babl_process (fish_from, destination, transformed, test_pixels); + + fish_to->fish.processings -= 2; + fish_from->fish.processings -= 2; + fish_to->fish.pixels -= test_pixels * 2; + fish_from->fish.pixels -= test_pixels * 2; + + { + int i; + int log = 0; + + for (i = 0; i < test_pixels; i++) + { + int j; + for (j = 0; j < 4; j++) + if (fabs (clipped[i *4 + j] - transformed[i * 4 + j]) > TOLERANCE) + { + if (!log) + log = 1; + symmetric = 0; + } + if (log && log < 5) + { + babl_log ("%s", babl->instance.name); + babl_log ("\ttest: %2.3f %2.3f %2.3f %2.3f", test [i *4 + 0], + test [i * 4 + 1], + test [i * 4 + 2], + test [i * 4 + 3]); + babl_log ("\tclipped: %2.3f %2.3f %2.3f %2.3f", clipped [i *4 + 0], + clipped [i * 4 + 1], + clipped [i * 4 + 2], + clipped [i * 4 + 3]); + babl_log ("\ttrnsfrmd: %2.3f %2.3f %2.3f %2.3f", transformed [i *4 + 0], + transformed [i * 4 + 1], + transformed [i * 4 + 2], + transformed [i * 4 + 3]); + log++; + } + } + } + + babl_free (original); + babl_free (clipped); + babl_free (destination); + babl_free (transformed); + return symmetric; +} + +BABL_CLASS_IMPLEMENT (model) diff --git a/babl/babl-model.h b/babl/babl-model.h new file mode 100644 index 0000000..4561fdb --- /dev/null +++ b/babl/babl-model.h @@ -0,0 +1,35 @@ +/* babl - dynamically extendable universal pixel conversion library. + * Copyright (C) 2005-2008, Øyvind Kolås and others. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, see + * . + */ + +#ifndef _BABL_MODEL_H +#define _BABL_MODEL_H + +BABL_CLASS_DECLARE (model); + +typedef struct +{ + BablInstance instance; + BablList *from_list; + int components; + BablComponent **component; + BablType **type; /*< must be doubles, + used here for convenience in code */ + void *data; /* used for palette */ +} BablModel; + +#endif diff --git a/babl/babl-mutex.c b/babl/babl-mutex.c new file mode 100644 index 0000000..4fa5f29 --- /dev/null +++ b/babl/babl-mutex.c @@ -0,0 +1,87 @@ +/* babl - dynamically extendable universal pixel conversion library. + * Copyright (C) 2009, Øyvind Kolås. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, see + * . + */ + +#include "config.h" +#include "babl-mutex.h" + +#include + +#ifndef _WIN32 + +static const pthread_mutexattr_t * +get_mutex_attr (void) +{ + static pthread_mutexattr_t mutexattr; + static int initialized = 0; + + if (!initialized) + { + /* On some platforms, this will keep an allocation till process + termination, but it isn't a growing leak. */ + pthread_mutexattr_init (&mutexattr); + pthread_mutexattr_settype (&mutexattr, PTHREAD_MUTEX_RECURSIVE); + initialized = 1; + } + + return &mutexattr; +} + +#endif + +BablMutex * +babl_mutex_new (void) +{ + BablMutex *mutex = malloc (sizeof (BablMutex)); +#ifdef _WIN32 + InitializeCriticalSection (mutex); +#else + pthread_mutex_init (mutex, get_mutex_attr ()); +#endif + return mutex; +} + +void +babl_mutex_destroy (BablMutex *mutex) +{ +#ifdef _WIN32 + DeleteCriticalSection (mutex); +#else + pthread_mutex_destroy(mutex); +#endif + free (mutex); +} + +void +babl_mutex_lock (BablMutex *mutex) +{ +#ifdef _WIN32 + EnterCriticalSection (mutex); +#else + pthread_mutex_lock (mutex); +#endif +} + +void +babl_mutex_unlock (BablMutex *mutex) +{ +#ifdef _WIN32 + LeaveCriticalSection (mutex); +#else + pthread_mutex_unlock (mutex); +#endif +} diff --git a/babl/babl-mutex.h b/babl/babl-mutex.h new file mode 100644 index 0000000..57154b3 --- /dev/null +++ b/babl/babl-mutex.h @@ -0,0 +1,40 @@ +/* babl - dynamically extendable universal pixel conversion library. + * Copyright (C) 2009, Øyvind Kolås. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, see + * . + */ + +#ifndef _BABL_MUTEX_H +#define _BABL_MUTEX_H + +#ifndef _WIN32 +#define __GNU_SOURCE 1 +#include +#else +#include +#endif + +#ifdef _WIN32 + typedef CRITICAL_SECTION BablMutex; +#else + typedef pthread_mutex_t BablMutex; +#endif + +BablMutex* babl_mutex_new (void); +void babl_mutex_destroy (BablMutex *mutex); +void babl_mutex_lock (BablMutex *mutex); +void babl_mutex_unlock (BablMutex *mutex); + +#endif diff --git a/babl/babl-palette.c b/babl/babl-palette.c new file mode 100644 index 0000000..2f9bf8d --- /dev/null +++ b/babl/babl-palette.c @@ -0,0 +1,627 @@ +/* babl - dynamically extendable universal pixel conversion library. + * Copyright (C) 2012, Øyvind Kolås. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, see + * . + */ + +#include +#include +#include +#include +#include +#include "config.h" +#include "babl-internal.h" +#include "babl.h" +#include "babl-memory.h" + +#define HASH_TABLE_SIZE 1111 + +/* A default palette, containing standard ANSI / EGA colors + * + */ +static unsigned char defpal_data[4*16] = +{ +0 ,0 ,0 ,255, +127,0 ,0 ,255, +0 ,127,0 ,255, +127,127,0 ,255, +0 ,0 ,127,255, +127,0 ,127,255, +0 ,127,127,255, +127,127,127,255, +63 ,63 ,63 ,255, +255,0 ,0 ,255, +0 ,255,0 ,255, +255,255,0 ,255, +0 ,0 ,255,255, +255,0 ,255,255, +0 ,255,255,255, +255,255,255,255, +}; +static double defpal_double[4*8*16]; + + +typedef struct BablPalette +{ + int count; /* number of palette entries */ + const Babl *format;/* the pixel format the palette is stored in */ + unsigned char *data; /* one linear segment of all the pixels representing the palette, in order */ + double *data_double; + unsigned char *data_u8; + int hash[HASH_TABLE_SIZE]; + unsigned int hashpx[HASH_TABLE_SIZE]; +} BablPalette; + +static void +babl_palette_reset_hash (BablPalette *pal) +{ + int i; + for (i = 0; i < HASH_TABLE_SIZE; i++) + { + pal->hashpx[i] = ((255 << 16) | (255 << 8) | 255) + 11; /* non existant pixel */ + pal->hash[i] = -1; + } +} + +static int +babl_palette_lookup (BablPalette *pal, int r, int g, int b, int a) +{ + unsigned int pixel = (r << 16) | (g << 8) | b; + int hash_index = pixel % HASH_TABLE_SIZE; + int idx = pal->hash[hash_index]; + + if (idx >= 0 && + pal->hashpx[hash_index] == pixel) + { + return idx; + } + else + { + int best_idx = 0; + int best_diff = INT_MAX; + + for (idx = 0; idx < pal->count; idx++) + { + unsigned char *palpx = pal->data_u8 + idx * 4; + int pr = palpx[0]; + int pg = palpx[1]; + int pb = palpx[2]; + + int diff = (r - pr) * (r - pr) + + (g - pg) * (g - pg) + + (b - pb) * (b - pb); + if (diff < best_diff) + { + best_diff = diff; + best_idx = idx; + } + } + pal->hash[hash_index] = best_idx; + pal->hashpx[hash_index] = pixel; + return best_idx; + } + return 0; +} + +static BablPalette *make_pal (const Babl *format, const void *data, int count) +{ + BablPalette *pal = NULL; + int bpp = babl_format_get_bytes_per_pixel (format); + + pal = babl_malloc (sizeof (BablPalette)); + pal->count = count; + pal->format = format; + pal->data = babl_malloc (bpp * count); + pal->data_double = babl_malloc (4 * sizeof(double) * count); + pal->data_u8 = babl_malloc (4 * sizeof(char) * count); + memcpy (pal->data, data, bpp * count); + + babl_process (babl_fish (format, babl_format ("RGBA double")), + data, pal->data_double, count); + babl_process (babl_fish (format, babl_format ("RGBA u8")), + data, pal->data_u8, count); + + babl_palette_reset_hash (pal); + + return pal; +} + +static void babl_palette_free (BablPalette *pal) +{ + babl_free (pal->data); + babl_free (pal->data_double); + babl_free (pal->data_u8); + babl_free (pal); +} + +static BablPalette *default_palette (void) +{ + static BablPalette pal; + static int inited = 0; + if (inited) + return &pal; + memset (&pal, 0, sizeof (pal)); + inited = 1; + pal.count = 16; + pal.format = babl_format ("RGBA u8"); /* dynamically generated, so + the default palette can + not be fully static. + */ + pal.data = defpal_data; + pal.data_double = defpal_double; + pal.data_u8 = defpal_data; + + babl_process (babl_fish (pal.format, babl_format ("RGBA double")), + pal.data, pal.data_double, pal.count); + + babl_palette_reset_hash (&pal); + return &pal; +} + +static long +rgba_to_pal (char *src, + char *dst, + long n, + void *dst_model_data) +{ + BablPalette **palptr = dst_model_data; + BablPalette *pal = *palptr; + while (n--) + { + int idx; + + int best_idx = 0; + double best_diff = 100000; + double *srcf; + + srcf = ((double *) src); + + for (idx = 0; idxcount; idx++) + { + double diff; + double *palpx = ((double *)pal->data_double) + idx * 4; + + diff = (palpx[0] - srcf[0]) * (palpx[0] - srcf[0]) + + (palpx[1] - srcf[1]) * (palpx[1] - srcf[1]) + + (palpx[2] - srcf[2]) * (palpx[2] - srcf[2]); + if (diff <= best_diff) + { + best_diff = diff; + best_idx = idx; + } + } + + ((double *) dst)[0] = best_idx / 255.5; + + src += sizeof (double) * 4; + dst += sizeof (double) * 1; + } + return n; +} + +static long +rgba_to_pala (char *src, + char *dst, + long n, + void *dst_model_data) +{ + BablPalette **palptr = dst_model_data; + BablPalette *pal = *palptr; + + assert(pal); + while (n--) + { + int idx; + + int best_idx = 0; + double best_diff = 100000; + double *srcf; + double alpha; + + srcf = ((double *) src); + alpha = srcf[3]; + + for (idx = 0; idxcount; idx++) + { + double diff; + double *palpx = ((double *)pal->data_double) + idx * 4; + + diff = (palpx[0] - srcf[0]) * (palpx[0] - srcf[0]) + + (palpx[1] - srcf[1]) * (palpx[1] - srcf[1]) + + (palpx[2] - srcf[2]) * (palpx[2] - srcf[2]); + if (diff <= best_diff) + { + best_diff = diff; + best_idx = idx; + } + } + + ((double *) dst)[0] = best_idx / 255.5; + ((double *) dst)[1] = alpha; + + src += sizeof (double) * 4; + dst += sizeof (double) * 2; + } + return n; +} + +static long +pal_to_rgba (char *src, + char *dst, + long n, + void *src_model_data) +{ + BablPalette **palptr = src_model_data; + BablPalette *pal = *palptr; + assert(pal); + while (n--) + { + int idx = (((double *) src)[0]) * 255.5; + double *palpx; + + if (idx < 0) idx = 0; + if (idx >= pal->count) idx = pal->count-1; + + palpx = ((double *)pal->data_double) + idx * 4; + memcpy (dst, palpx, sizeof(double)*4); + + src += sizeof (double) * 1; + dst += sizeof (double) * 4; + } + return n; +} + +static long +pala_to_rgba (char *src, + char *dst, + long n, + void *src_model_data) +{ + BablPalette **palptr = src_model_data; + BablPalette *pal = *palptr; + + assert(pal); + while (n--) + { + int idx = (((double *) src)[0]) * 255.5; + double alpha = (((double *) src)[1]); + double *palpx; + + if (idx < 0) idx = 0; + if (idx >= pal->count) idx = pal->count-1; + + palpx = ((double *)pal->data_double) + idx * 4; + memcpy (dst, palpx, sizeof(double)*4); + + ((double *)dst)[3] *= alpha; + + src += sizeof (double) * 2; + dst += sizeof (double) * 4; + } + return n; +} + +static long +rgba_u8_to_pal (unsigned char *src, + unsigned char *dst, + long n, + void *src_model_data) +{ + BablPalette **palptr = src_model_data; + BablPalette *pal; + assert (palptr); + pal = *palptr; + assert(pal); + while (n--) + { + dst[0] = babl_palette_lookup (pal, src[0], src[1], src[2], src[3]); + + src += sizeof (char) * 4; + dst += sizeof (char) * 1; + } + + return n; +} + +static long +rgba_u8_to_pal_a (char *src, + char *dst, + long n, + void *src_model_data) +{ + BablPalette **palptr = src_model_data; + BablPalette *pal; + assert (palptr); + pal = *palptr; + assert(pal); + while (n--) + { + dst[0] = babl_palette_lookup (pal, src[0], src[1], src[2], src[3]); + dst[1] = src[3]; + + src += sizeof (char) * 4; + dst += sizeof (char) * 2; + } + return n; +} + +static long +pal_u8_to_rgba_u8 (char *src, + char *dst, + long n, + void *src_model_data) +{ + BablPalette **palptr = src_model_data; + BablPalette *pal; + assert (palptr); + pal = *palptr; + assert(pal); + while (n--) + { + int idx = (((unsigned char *) src)[0]); + unsigned char *palpx; + + if (idx < 0) idx = 0; + if (idx >= pal->count) idx = pal->count-1; + + palpx = ((unsigned char*)pal->data_u8) + idx * 4; + memcpy (dst, palpx, sizeof(char)*4); + + src += sizeof (char) * 1; + dst += sizeof (char) * 4; + } + return n; +} + +static long +pala_u8_to_rgba_u8 (char *src, + char *dst, + long n, + void *src_model_data) +{ + BablPalette **palptr = src_model_data; + BablPalette *pal; + assert (palptr); + pal = *palptr; + assert(pal); + while (n--) + { + int idx = (((unsigned char *) src)[0]); + unsigned char *palpx; + + if (idx < 0) idx = 0; + if (idx >= pal->count) idx = pal->count-1; + + palpx = ((unsigned char*)pal->data_u8) + idx * 4; + memcpy (dst, palpx, sizeof(char)*4); + dst[3] = (dst[3] * src[1]) >> 8; + + src += sizeof (char) * 2; + dst += sizeof (char) * 4; + } + return n; +} + + +#include "base/util.h" + +static inline long +conv_pal8_pala8 (unsigned char *src, unsigned char *dst, long samples) +{ + long n = samples; + + while (n--) + { + dst[0] = src[0]; + dst[1] = 255; + src += 1; + dst += 2; + } + return samples; +} + +static inline long +conv_pala8_pal8 (unsigned char *src, unsigned char *dst, long samples) +{ + long n = samples; + + while (n--) + { + dst[0] = src[0]; + src += 2; + dst += 1; + } + return samples; +} + +int +babl_format_is_palette (const Babl *format) +{ + if (format->class_type == BABL_FORMAT) + return format->format.palette; + return 0; +} + +/* should return the BablModel, permitting to fetch + * other formats out of it? + */ +const Babl *babl_new_palette (const char *name, + const Babl **format_u8, + const Babl **format_u8_with_alpha) +{ + const Babl *model; + const Babl *model_no_alpha; + Babl *f_pal_u8; + Babl *f_pal_a_u8; + const Babl *component; + const Babl *alpha; + BablPalette **palptr; + + char cname[64]; + + if (!name) + { + static int cnt = 0; + sprintf (cname, "_babl-int-%i", cnt++); + name = cname; + } + else + { + strcpy (cname, name); + name = cname; + + if ((model = babl_db_exist_by_name (babl_model_db (), name))) + { + cname[0] = ')'; + if (format_u8) + *format_u8 = babl_db_exist_by_name (babl_format_db (), name); + cname[0] = '\\'; + if (format_u8_with_alpha) + *format_u8_with_alpha = babl_db_exist_by_name (babl_format_db (), name); + return model; + } + } + + /* re-registering is a no-op */ + component = babl_component_new ( + "I", + "luma", + "chroma", + NULL); + alpha = babl_component ("A"); + + model = babl_model_new ("name", name, component, alpha, NULL); + palptr = malloc (sizeof (void*)); + *palptr = default_palette ();; + cname[0] = 'v'; + model_no_alpha = babl_model_new ("name", name, component, NULL); + cname[0] = '\\'; + f_pal_a_u8 = (void*) babl_format_new ("name", name, model, + babl_type ("u8"), + component, alpha, NULL); + cname[0] = ')'; + f_pal_u8 = (void*) babl_format_new ("name", name, model_no_alpha, + babl_type ("u8"), + component, NULL); + + f_pal_a_u8->format.palette = 1; + f_pal_u8->format.palette = 1; + + babl_conversion_new ( + model, + babl_model ("RGBA"), + "linear", pala_to_rgba, + "data", palptr, + NULL + ); + + babl_conversion_new ( + babl_model ("RGBA"), + model, + "linear", rgba_to_pala, + "data", palptr, + NULL + ); + + babl_conversion_new ( + model_no_alpha, + babl_model ("RGBA"), + "linear", pal_to_rgba, + "data", palptr, + NULL + ); + babl_conversion_new ( + babl_model ("RGBA"), + model_no_alpha, + "linear", rgba_to_pal, + "data", palptr, + NULL + ); + + babl_conversion_new ( + f_pal_u8, + f_pal_a_u8, + "linear", conv_pal8_pala8, + NULL + ); + + babl_conversion_new ( + f_pal_a_u8, + f_pal_u8, + "linear", conv_pala8_pal8, + NULL + ); + + + babl_conversion_new ( + f_pal_u8, + babl_format ("RGBA u8"), + "linear", pal_u8_to_rgba_u8, + "data", palptr, + NULL); + + + babl_conversion_new ( + f_pal_a_u8, + babl_format ("RGBA u8"), + "linear", pala_u8_to_rgba_u8, + "data", palptr, + NULL); + + babl_conversion_new ( + babl_format ("RGBA u8"), + f_pal_a_u8, + "linear", rgba_u8_to_pal_a, + "data", palptr, + NULL); + babl_conversion_new ( + babl_format ("RGBA u8"), + f_pal_u8, + "linear", rgba_u8_to_pal, + "data", palptr, + NULL); + + babl_set_user_data (model, palptr); + babl_set_user_data (model_no_alpha, palptr); + + if (format_u8) + *format_u8 = f_pal_u8; + if (format_u8_with_alpha) + *format_u8_with_alpha = f_pal_a_u8; + babl_sanity (); + return model; +} + +void +babl_palette_set_palette (const Babl *babl, + const Babl *format, + void *data, + int count) +{ + BablPalette **palptr = babl_get_user_data (babl); + babl_palette_reset (babl); + *palptr = make_pal (format, data, count); +} + +void +babl_palette_reset (const Babl *babl) +{ + BablPalette **palptr = babl_get_user_data (babl); + if (*palptr != default_palette ()) + { + babl_palette_free (*palptr); + } + *palptr = default_palette (); +} diff --git a/babl/babl-ref-pixels.c b/babl/babl-ref-pixels.c new file mode 100644 index 0000000..a8f7109 --- /dev/null +++ b/babl/babl-ref-pixels.c @@ -0,0 +1,81 @@ +/* babl - dynamically extendable universal pixel conversion library. + * Copyright (C) 2005 Øyvind Kolås + * 2013 Daniel Sabo + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, see + * . + */ + +#include "babl-ref-pixels.h" +#include "babl-ref-pixels.inc" + +int +babl_get_num_path_test_pixels (void) +{ + return babl_num_path_test_pixels; +} + +int +babl_get_num_conversion_test_pixels (void) +{ + return babl_num_conversion_test_pixels; +} + +int +babl_get_num_format_test_pixels (void) +{ + return babl_num_format_test_pixels; +} + +int +babl_get_num_model_test_pixels (void) +{ + return babl_num_model_test_pixels; +} + +int +babl_get_num_type_test_pixels (void) +{ + return babl_num_type_test_pixels; +} + +const double * +babl_get_path_test_pixels (void) +{ + return babl_path_test_pixels; +} + +const double * +babl_get_conversion_test_pixels (void) +{ + return babl_conversion_test_pixels; +} + +const double * +babl_get_format_test_pixels (void) +{ + return babl_format_test_pixels; +} + +const double * +babl_get_model_test_pixels (void) +{ + return babl_model_test_pixels; +} + +const double * +babl_get_type_test_pixels (void) +{ + return babl_type_test_pixels; +} diff --git a/babl/babl-ref-pixels.h b/babl/babl-ref-pixels.h new file mode 100644 index 0000000..fe2e595 --- /dev/null +++ b/babl/babl-ref-pixels.h @@ -0,0 +1,34 @@ +/* babl - dynamically extendable universal pixel conversion library. + * Copyright (C) 2005-2008, Øyvind Kolås and others. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, see + * . + */ + +#ifndef _BABL_REF_PIXELS_H +#define _BABL_REF_PIXELS_H + +int babl_get_num_path_test_pixels (void); +int babl_get_num_conversion_test_pixels (void); +int babl_get_num_format_test_pixels (void); +int babl_get_num_model_test_pixels (void); +int babl_get_num_type_test_pixels (void); + +const double *babl_get_path_test_pixels (void); +const double *babl_get_conversion_test_pixels (void); +const double *babl_get_format_test_pixels (void); +const double *babl_get_model_test_pixels (void); +const double *babl_get_type_test_pixels (void); + +#endif /* _BABL_REF_PIXELS_H */ \ No newline at end of file diff --git a/babl/babl-ref-pixels.inc b/babl/babl-ref-pixels.inc new file mode 100644 index 0000000..fc1f333 --- /dev/null +++ b/babl/babl-ref-pixels.inc @@ -0,0 +1,4140 @@ +/* babl - dynamically extendable universal pixel conversion library. + * Copyright (C) 2005 Øyvind Kolås + * 2013 Daniel Sabo + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, see + * . + */ + +/* THIS IS A GENERATED FILE - DO NOT EDIT */ + +static const int babl_num_path_test_pixels = 3072; + +static const double babl_path_test_pixels[12288] = { +0x1.87326f630e64ep-4, 0x1.d98b8203b317p-1, 0x1.80c353a70186ap-1, 0x1.8b30cef31661ap-1, +0x1.ed4afa3bda95fp-1, 0x1.5b6f8b7eb6df1p-1, 0x1.a149bf2b42938p-2, 0x1.a42310c348462p-4, +0x1.076180960ec3p-1, 0x1.70fdcafae1fb9p-2, 0x1.b56661636acccp-4, 0x1.e920a48bd2415p-1, +0x1.6d6c669adad8dp-1, 0x1.db6bd983b6d7bp-3, 0x1.fcd15da3f9a2cp-4, 0x1.0228b6ca04517p-2, +0x1.ef3cee63de79ep-1, 0x1.8dfaef231bf5ep-2, 0x1.5ee3acfebdc76p-1, 0x1.668783d6cd0fp-1, +0x1.205f038640bep-1, 0x1.f9fa8d2ff3f52p-1, 0x1.20a64bea414c9p-1, 0x1.ee5b3f63dcb68p-2, +0x1.2c44ab0a58895p-1, 0x1.927c053324f81p-3, 0x1.98d196cf31a33p-1, 0x1.4635fc0e8c6cp-1, +0x1.7e5e224afcbc4p-1, 0x1.1a3f9972347f3p-3, 0x1.c6f50c538dea2p-3, 0x1.af4470375e88ep-1, +0x1.00db42e201b68p-4, 0x1.f28096bfe5013p-1, 0x1.3a753f2674ea8p-1, 0x1.accc52835998ap-6, +0x1.4df0223a9be04p-1, 0x1.6343d782c687bp-6, 0x1.07ab12b20f562p-3, 0x1.55468b42aa8d1p-3, +0x1.873208730e641p-2, 0x1.e25e4373c4bc8p-3, 0x1.f3923ac3e7247p-4, 0x1.882b56831056bp-4, +0x1.dee50e7bbdca2p-2, 0x1.f831cc33f063ap-3, 0x1.64338c6ac8672p-2, 0x1.bd5eeb3b7abddp-2, +0x1.4509ea9e8a13dp-1, 0x1.0fd733421fae6p-5, 0x1.14dbe5c229b7dp-3, 0x1.95a3b8832b477p-3, +0x1.5f000c02be002p-6, 0x1.65dd455acbba9p-1, 0x1.5c968dd2b92d2p-1, 0x1.373cab6a6e795p-1, +0x1.ca7c46ab94f89p-1, 0x1.ead04943d5a09p-2, 0x1.f5ca9de3eb954p-3, 0x1.48da68f291b4dp-1, +0x1.3bf80afe77f01p-1, 0x1.de5fd51bbcbfbp-2, 0x1.f03db24be07b6p-2, 0x1.5c13735eb826ep-1, +0x1.c361029386c2p-2, 0x1.94a0c24329418p-4, 0x1.6979d5f2d2f3bp-1, 0x1.7d051c22fa0a4p-4, +0x1.ed71b823dae37p-4, 0x1.ab649aa356c93p-1, 0x1.09e48caa13c92p-2, 0x1.01473b3e028e7p-1, +0x1.1fe15be23fc2bp-4, 0x1.86c91b5b0d923p-2, 0x1.324ca60e64995p-1, 0x1.136eb2ba26dd6p-1, +0x1.417100ba82e2p-1, 0x1.e4666c47c8ccep-1, 0x1.f21e2857e43c5p-1, 0x1.0cf5d6aa19ebbp-2, +0x1.f563df7beac7cp-1, 0x1.baa90e2375522p-4, 0x1.d7c7b2ebaf8f6p-2, 0x1.6f7f6002defecp-11, +0x1.9d32671f3a64dp-1, 0x1.21e99d1243d34p-3, 0x1.37988b466f311p-1, 0x1.67aeadc6cf5d6p-1, +0x1.3de28be67bc51p-1, 0x1.b50b32bf6a166p-1, 0x1.61122d6ac2246p-2, 0x1.e76a5b93ced4bp-3, +0x1.48763a9290ec7p-2, 0x1.a8a7efdb514fep-1, 0x1.d5ee0a43abdc1p-1, 0x1.85eb9e970bd74p-1, +0x1.db3c0827b6781p-1, 0x1.3f67e0327ecfcp-1, 0x1.b58c421b6b188p-1, 0x1.8ea3f2831d47ep-5, +0x1.d598f5a3ab31fp-2, 0x1.d3f44363a7e88p-4, 0x1.1a317a6a3462fp-1, 0x1.0ec8a64e1d915p-1, +0x1.fbc62c33f78c6p-2, 0x1.31f881d263f1p-3, 0x1.11bac82223759p-4, 0x1.faa0b683f5417p-4, +0x1.872465c30e48dp-4, 0x1.455815828ab03p-5, 0x1.8b9e044b173c1p-2, 0x1.324361826486cp-4, +0x1.2eaa8c725d552p-3, 0x1.b1b2db9b6365bp-1, 0x1.352260626a44cp-4, 0x1.e8dd0a3fd1ba1p-1, +0x1.fa2d42dff45a8p-1, 0x1.5e3cd752bc79bp-1, 0x1.508bb802a1177p-1, 0x1.380fcec6701fap-1, +0x1.13480a0e26901p-1, 0x1.14ceb802299d7p-9, 0x1.b1ea65ab63d4dp-1, 0x1.b78327576f065p-1, +0x1.a9bcbe9353798p-1, 0x1.87d86feb0fb0ep-1, 0x1.3d6ec5ea7add9p-1, 0x1.84f8c6b709f19p-1, +0x1.8e80a0331d014p-2, 0x1.e5f61003cbec2p-2, 0x1.9de305e33bc61p-1, 0x1.b20ccaef64199p-1, +0x1.2d79906e5af32p-1, 0x1.70290092e052p-2, 0x1.81aae2730355cp-2, 0x1.5ae53422b5ca7p-4, +0x1.0492a0be09254p-1, 0x1.c61994838c333p-2, 0x1.aac2f5535585fp-3, 0x1.35772d7a6aee6p-1, +0x1.eec49733dd893p-2, 0x1.307fbf7a60ff8p-1, 0x1.5bbf99aab77f3p-1, 0x1.430ceeba8619ep-1, +0x1.c465362388ca7p-2, 0x1.8263e5b704c7dp-1, 0x1.2be9f8f657d3fp-1, 0x1.b8bfbbe3717f7p-2, +0x1.c1417a0b8282fp-2, 0x1.f1d6c3d3e3ad8p-3, 0x1.46facb428df59p-5, 0x1.f3e8c713e7d19p-1, +0x1.f629feb3ec54p-3, 0x1.c65a125f8cb42p-1, 0x1.ab6bee6b56d7ep-1, 0x1.3a39f2027473ep-4, +0x1.4e3282469c65p-1, 0x1.d1b568a3a36adp-2, 0x1.ac4004f758801p-1, 0x1.572d25c2ae5a5p-5, +0x1.dbd5bc57b7ab8p-1, 0x1.4a230ad694461p-1, 0x1.c77f9d4b8eff4p-1, 0x1.094f4cc2129eap-1, +0x1.1bc58e02378b2p-8, 0x1.10aa1d0a21544p-2, 0x1.34abf34a6957ep-1, 0x1.06ca2bde0d945p-1, +0x1.6b61d8c6d6c3bp-1, 0x1.9f5cb09f3eb96p-1, 0x1.e20acaa3c4159p-4, 0x1.8b10917316212p-3, +0x1.9fb8e0333f71cp-2, 0x1.9800f2ff3001ep-1, 0x1.a5d113174ba22p-1, 0x1.b20f0b2b641e1p-1, +0x1.1a64d8b634c9bp-1, 0x1.a376181346ec3p-2, 0x1.1cddd23239bbap-2, 0x1.fb0595bbf60b3p-1, +0x1.4e30bd029c618p-1, 0x1.45bd2b9a8b7a5p-2, 0x1.eeee5ccfdddccp-1, 0x1.cbbb3caf97768p-1, +0x1.a4e2a0a349c54p-3, 0x1.9a5a4b3734b49p-1, 0x1.f3027aefe604fp-1, 0x1.b76b2a6f6ed65p-1, +0x1.0669ff0a0cd4p-2, 0x1.9f427fe73e85p-1, 0x1.ccddfccf99bcp-1, 0x1.7c2aef62f855ep-3, +0x1.d2cb1573a5963p-2, 0x1.945d9a1728bb3p-1, 0x1.685a089ed0b41p-1, 0x1.d73a2bb3ae745p-2, +0x1.cb2a898396551p-5, 0x1.3a0bf7ca7417fp-2, 0x1.f26741b7e4ce8p-1, 0x1.8814815f1029p-1, +0x1.e3156403c62adp-4, 0x1.7544d842ea89bp-4, 0x1.ead8a5bfd5b15p-1, 0x1.0c3f1c9a187e4p-1, +0x1.c6a98e078d532p-1, 0x1.90a9b8d321537p-1, 0x1.7c9c4f8af938ap-2, 0x1.c21ccd738439ap-2, +0x1.8993137313262p-3, 0x1.4cbd10de997a2p-1, 0x1.b827f8eb704ffp-2, 0x1.b09581df612bp-1, +0x1.ef9ba6afdf375p-1, 0x1.9604b2832c096p-2, 0x1.7c50be8af8a18p-1, 0x1.63513b52c6a27p-3, +0x1.957291d32ae52p-3, 0x1.6f53397adea67p-1, 0x1.03f7944207ef3p-5, 0x1.d12347f3a2469p-2, +0x1.0e95b95e1d2b7p-1, 0x1.dd1d7613ba3afp-1, 0x1.479c5fd68f38cp-1, 0x1.f7fb4417eff69p-1, +0x1.717b1026e2f62p-1, 0x1.5fecd0e2bfd9ap-2, 0x1.c730b3db8e616p-2, 0x1.8e2db8c31c5b7p-1, +0x1.4cfc645699f8dp-1, 0x1.abff374357fe7p-2, 0x1.16423a1e2c847p-1, 0x1.895f10d712be2p-1, +0x1.04a836aa09507p-1, 0x1.011adfda0235cp-1, 0x1.2b3c5ae25678bp-2, 0x1.96a389632d471p-2, +0x1.2389315a47126p-2, 0x1.53ec5536a7d8bp-1, 0x1.ac602b6b58c05p-1, 0x1.e852bb13d0a57p-2, +0x1.4152cc2282a5ap-2, 0x1.10e84fba21d0ap-2, 0x1.497dbeca92fb8p-2, 0x1.208a197a41143p-2, +0x1.5376811ea6edp-1, 0x1.087cef6210f9ep-4, 0x1.d232b72ba4657p-2, 0x1.b8d3259371a65p-1, +0x1.9062d76720c5bp-1, 0x1.f2b1a9b3e5635p-2, 0x1.42c9931a85932p-2, 0x1.3df121827be24p-2, +0x1.acec95d359d93p-2, 0x1.e9012963d2025p-1, 0x1.2de7a9b25bcf5p-2, 0x1.1fc56c323f8aep-3, +0x1.31ef23a263de4p-2, 0x1.7a8c2ec6f5186p-1, 0x1.d61f13cfac3e2p-1, 0x1.e5f3f627cbe7fp-1, +0x1.422f29a2845e5p-3, 0x1.d8c29bdbb1853p-2, 0x1.6f5306fadea61p-1, 0x1.55340112aa68p-1, +0x1.ed7c2dc7daf86p-1, 0x1.3c4d1a02789a3p-7, 0x1.042e2e02085c6p-4, 0x1.fd0319c3fa063p-3, +0x1.58dd899eb1bb1p-1, 0x1.cce5f12f99cbep-1, 0x1.736a23fae6d44p-1, 0x1.f986efb3f30dep-1, +0x1.55686422aad0dp-3, 0x1.829035c305207p-5, 0x1.1397f8da272ffp-2, 0x1.a8d09a2b51a13p-1, +0x1.c9c50a63938a1p-4, 0x1.72e55802e5cabp-1, 0x1.61a3bfbac3478p-1, 0x1.c99b78b39336fp-1, +0x1.b0f8b36361f16p-3, 0x1.8444a20308894p-8, 0x1.a25025d344a05p-3, 0x1.42b477c28568fp-1, +0x1.ec09b2a7d8136p-1, 0x1.ff0fbc9bfe1f8p-2, 0x1.8aa5d2d3154bap-1, 0x1.0a0288ea14051p-2, +0x1.e8503443d0a07p-3, 0x1.60c4e69ec189dp-1, 0x1.abd4ea6357a9dp-3, 0x1.953faef32a7f6p-2, +0x1.3498d2226931ap-3, 0x1.da484197b4908p-1, 0x1.fd3d88c3fa7b1p-5, 0x1.d5131283aa262p-4, +0x1.df3975ffbe72fp-1, 0x1.0166793202ccfp-3, 0x1.73c65182e78cap-2, 0x1.3816ff9e702ep-1, +0x1.a7f1ef034fe3ep-6, 0x1.6a6a65e2d4d4dp-4, 0x1.319def4e633bep-1, 0x1.8a66a21314cd4p-3, +0x1.15d940622bb28p-3, 0x1.bb69ebbb76d3dp-1, 0x1.6d485582da90bp-6, 0x1.fabbc593f5779p-3, +0x1.2e4f43be5c9e8p-1, 0x1.6d0e0266da1cp-1, 0x1.2129a86242535p-3, 0x1.9a8d7097351aep-1, +0x1.70168baee02d1p-1, 0x1.61bce71ac379dp-2, 0x1.ba83d0b37507ap-2, 0x1.5c203e52b8408p-1, +0x1.b06651db60ccap-1, 0x1.9f9eeca33f3dep-3, 0x1.e12182cbc243p-1, 0x1.53d2f742a7a5fp-4, +0x1.c8aca1c791594p-1, 0x1.305af58260b5fp-3, 0x1.ea346ccbd468ep-2, 0x1.5d2d6502ba5adp-5, +0x1.32f7f7a265effp-4, 0x1.14ee0ef229dc2p-1, 0x1.41d4e28283a9cp-3, 0x1.661d3d02cc3a8p-7, +0x1.5547ad3eaa8f6p-1, 0x1.0a58616214b0cp-1, 0x1.3daf74927b5efp-1, 0x1.62873cbac50e8p-1, +0x1.37a5ae1e6f4b6p-1, 0x1.bd358f737a6b2p-3, 0x1.c520e53f8a41dp-1, 0x1.7d1bfe3afa38p-1, +0x1.55ba7ca2ab75p-4, 0x1.d08b27eba1165p-1, 0x1.fbcaef9ff795ep-1, 0x1.59069352b20d2p-1, +0x1.3d992a4e7b325p-1, 0x1.105566d220aadp-3, 0x1.e72807d3ce501p-2, 0x1.5b5f6bf2b6bedp-2, +0x1.e9e79a83d3cf3p-2, 0x1.d0d5ec43a1abep-1, 0x1.39fe898273fd1p-6, 0x1.4ab43e3295688p-2, +0x1.c5ed3b438bda7p-4, 0x1.eaf17717d5e2fp-1, 0x1.9fa8fc0b3f52p-2, 0x1.6a492c02d4926p-9, +0x1.b841a3a370834p-4, 0x1.c4eeb46b89dd7p-1, 0x1.73d1f7c2e7a3fp-5, 0x1.759ccdb2eb39ap-3, +0x1.b3b986b367731p-2, 0x1.9ec960733d92cp-3, 0x1.8bfea18317fd4p-3, 0x1.792384a2f2471p-4, +0x1.720ab982e4157p-1, 0x1.a0af1cf3415e4p-1, 0x1.91abad4f23576p-1, 0x1.5360cf3aa6c1ap-2, +0x1.ff901983ff203p-6, 0x1.56cc928aad992p-1, 0x1.36632ea26cc66p-4, 0x1.d59e8303ab3dp-4, +0x1.2757ba724eaf7p-1, 0x1.14baaba229755p-4, 0x1.93ba63b72774cp-1, 0x1.93c3930327872p-3, +0x1.9ab2bca335658p-3, 0x1.0e9ccf3a1d39ap-2, 0x1.12a09aba25413p-1, 0x1.5ba07c6eb741p-1, +0x1.60914f72c122ap-3, 0x1.1c708f0638e12p-1, 0x1.f5370803ea6e1p-10, 0x1.21c3f68a4387fp-2, +0x1.0762061a0ec41p-1, 0x1.a19e3313433c6p-2, 0x1.249888e249311p-2, 0x1.3e6a3a927cd47p-1, +0x1.2b7b9be256f73p-2, 0x1.5312c7e2a6259p-2, 0x1.9bd16dff37a2ep-1, 0x1.6f9a914adf352p-1, +0x1.113bbc0e22778p-1, 0x1.fed1165ffda23p-1, 0x1.9ebf01e33d7ep-1, 0x1.068ceb1a0d19dp-2, +0x1.9f80334f3f006p-1, 0x1.306aaf2e60d56p-1, 0x1.2cf6dd2e59edcp-1, 0x1.af7cb41b5ef97p-1, +0x1.0e6e83721cddp-2, 0x1.53c34302a7868p-1, 0x1.ea30847bd4611p-1, 0x1.ae8efc2b5d1ep-1, +0x1.765a9876ecb53p-1, 0x1.7deae82efbd5dp-1, 0x1.37fe0e826ffc2p-5, 0x1.dd0747a3ba0e9p-1, +0x1.4e53f2029ca7ep-7, 0x1.26207ba64c40fp-1, 0x1.38a7c40e714f9p-1, 0x1.75768e92eaed2p-3, +0x1.0a442aa214885p-3, 0x1.39a25f927344cp-1, 0x1.dc7f3dd3b8fe8p-2, 0x1.49f310c693e62p-1, +0x1.4e2f23829c5e4p-6, 0x1.808be35f0117cp-1, 0x1.10ba96aa21753p-2, 0x1.405e8e1a80bd2p-2, +0x1.50aa3a62a1547p-4, 0x1.2175ca8242eb9p-4, 0x1.f93b0b03f2761p-6, 0x1.3b51035a76a2p-1, +0x1.17fe7d622ffdp-4, 0x1.ae88da3b5d11bp-1, 0x1.be9778eb7d2efp-1, 0x1.c28002fb85p-1, +0x1.bde712cb7bce2p-2, 0x1.d71cac2bae396p-2, 0x1.71fcb712e3f97p-1, 0x1.662acb1ecc559p-1, +0x1.fa8cc8a3f5199p-4, 0x1.5c2d3b8ab85a7p-1, 0x1.14b9c74a29739p-1, 0x1.b5ac318f6b586p-1, +0x1.b430477368609p-2, 0x1.2839a83250735p-1, 0x1.92b3792f2566fp-1, 0x1.bea2e7037d45dp-2, +0x1.39688f5272d12p-3, 0x1.96b67a732d6cfp-2, 0x1.3caf172a795e3p-1, 0x1.21d65d0243accp-2, +0x1.3f6732027ece6p-7, 0x1.5775b082aeeb6p-4, 0x1.dade3f47b5bc8p-1, 0x1.ede2bc83dbc58p-6, +0x1.ab7a996f56f53p-1, 0x1.8cee2a6319dc5p-3, 0x1.5f3cb9eabe797p-2, 0x1.d58fe0bbab1fcp-1, +0x1.0ed487d21da91p-2, 0x1.7ed06a9afda0dp-2, 0x1.10e0e41621c1dp-1, 0x1.54d4272aa9a85p-2, +0x1.b7c43e136f888p-3, 0x1.9ef0b9fb3de17p-2, 0x1.b3a85a336750bp-3, 0x1.4ce498ea99c93p-1, +0x1.bb06b313760d6p-1, 0x1.dee6cd9fbdcdap-1, 0x1.661ec812cc3d9p-2, 0x1.fa584c27f4b0ap-1, +0x1.3b14092676281p-1, 0x1.c7c92b538f925p-1, 0x1.b0047db36009p-1, 0x1.52c2cdc2a585ap-5, +0x1.e005a703c00b5p-2, 0x1.42b7f6de856ffp-1, 0x1.e8fb40c3d1f68p-2, 0x1.3e5cf75a7cb9fp-1, +0x1.c266828384cdp-6, 0x1.8965bc4312cb8p-4, 0x1.cf4825db9e905p-1, 0x1.310d0e02621a2p-5, +0x1.706db662e0db7p-3, 0x1.aa26651f544cdp-1, 0x1.13ff362227fe7p-4, 0x1.e581c203cb038p-7, +0x1.ac3df683587bfp-6, 0x1.a43c877348791p-2, 0x1.dd25e7c3ba4bdp-1, 0x1.2998673a5330dp-2, +0x1.91867907230cfp-1, 0x1.dc0d97abb81b3p-2, 0x1.3f3647327e6c9p-1, 0x1.ff77888bfeef1p-1, +0x1.bd7f28d37afe5p-1, 0x1.ac205dbf5840cp-1, 0x1.4c5c217698b84p-1, 0x1.7885dbe2f10bbp-1, +0x1.8b072b5b160e5p-1, 0x1.ff6b857ffed71p-1, 0x1.72de280ae5bc5p-1, 0x1.8c3668fb186cdp-2, +0x1.c734b0cf8e696p-1, 0x1.22e2a5ba45c55p-1, 0x1.b68ec2bb6d1d8p-2, 0x1.6e6f089adcde1p-2, +0x1.966a72632cd4ep-3, 0x1.cfc501bf9f8ap-1, 0x1.f5947ba7eb28fp-1, 0x1.ceb742b39d6e8p-3, +0x1.e3728803c6e51p-10, 0x1.c4dca17f89b94p-1, 0x1.0d7d431a1afa8p-2, 0x1.74349b72e8693p-3, +0x1.6f03069ade061p-1, 0x1.527d10aaa4fa2p-2, 0x1.928cb79325197p-3, 0x1.7c64f64ef8c9fp-1, +0x1.7b5ccc0ef6b9ap-1, 0x1.072456a20e48bp-3, 0x1.13129e8226254p-5, 0x1.0ce3451619c69p-1, +0x1.2fcfe17e5f9fcp-1, 0x1.5067711aa0ceep-1, 0x1.0c5acd9e18b5ap-1, 0x1.da9e14a3b53c3p-2, +0x1.f90f9dabf21f4p-2, 0x1.62dbbc42c5b78p-3, 0x1.975398c32ea73p-3, 0x1.0f1df45a1e3bfp-2, +0x1.6089d232c113ap-3, 0x1.d8b30e3bb1662p-1, 0x1.4daa2eae9b546p-1, 0x1.f5725583eae4bp-5, +0x1.f72b67ebee56dp-2, 0x1.478c80428f19p-4, 0x1.ad1d53535a3aap-2, 0x1.6130508ec260ap-1, +0x1.f8b691c7f16d2p-1, 0x1.98464a9b308c9p-2, 0x1.d4de213ba9bc4p-1, 0x1.f9a84b0bf3509p-1, +0x1.21ff8d9a43ff2p-2, 0x1.6e730b22dce61p-3, 0x1.5ad5c792b5ab9p-3, 0x1.66b20002cd64p-16, +0x1.04db4b1e09b69p-1, 0x1.76b13f9aed628p-2, 0x1.7c67c3b6f8cf8p-1, 0x1.00702e5200e06p-2, +0x1.fa436aebf486dp-2, 0x1.8d98ed9f1b31ep-1, 0x1.8d1b5c3f1a36cp-1, 0x1.678cb782cf197p-4, +0x1.bc00bd7378018p-2, 0x1.32ec53ba65d8ap-2, 0x1.1a40a14234814p-1, 0x1.da882d8fb5106p-1, +0x1.e45a31dbc8b46p-2, 0x1.80158777002b1p-1, 0x1.885c9ef310b94p-3, 0x1.4a4f8d7e949f2p-1, +0x1.58c895aeb1913p-1, 0x1.afc1566b5f82bp-1, 0x1.69a6b2d6d34d6p-1, 0x1.51792682a2f25p-3, +0x1.d8b2e673b165dp-1, 0x1.00d571f201aaep-3, 0x1.b58e9a2f6b1d3p-1, 0x1.d1697837a2d2fp-1, +0x1.0c5881ce18b1p-1, 0x1.8a6cbb6b14d97p-1, 0x1.cb11c33f96238p-1, 0x1.9d58489b3ab09p-1, +0x1.e6097e33cc13p-1, 0x1.0e39a9021c735p-4, 0x1.9d5b15ff3ab63p-1, 0x1.d5c9929bab932p-2, +0x1.ba3fa9db747f5p-2, 0x1.19c2d9b23385bp-1, 0x1.6b1ce076d639cp-1, 0x1.da418a63b4831p-1, +0x1.4eb78ea29d6f2p-2, 0x1.f070796be0e0fp-2, 0x1.ccc855039990bp-7, 0x1.855c260b0ab85p-1, +0x1.91ae6693235cdp-1, 0x1.2173c29642e78p-1, 0x1.5fe45396bfc8ap-1, 0x1.07b6fefa0f6ep-2, +0x1.4312941286253p-2, 0x1.c1fb7b5383f6fp-1, 0x1.ce2b0cfb9c562p-1, 0x1.fa51dfbbf4a3cp-1, +0x1.71bcd1bae379ap-1, 0x1.37d1bfd26fa38p-1, 0x1.3ac0a56275815p-3, 0x1.4a6fb82a94df7p-1, +0x1.78071c4ef00e4p-1, 0x1.0fb0e2021f61cp-7, 0x1.1bd9305e37b26p-1, 0x1.08bf3c32117e8p-2, +0x1.8eab7ef31d57p-1, 0x1.cdd5e7339babdp-2, 0x1.0dbf35821b7e7p-4, 0x1.74b4fd22e96ap-1, +0x1.08b228be11645p-1, 0x1.bf12fcb37e26p-1, 0x1.7e6719b2fcce3p-3, 0x1.e5d1fdabcba4p-1, +0x1.b1abacc363576p-2, 0x1.cab6a6e3956d5p-1, 0x1.c013880f80271p-1, 0x1.80319db300634p-1, +0x1.85ddc72b0bbb9p-2, 0x1.c746a9638e8d5p-1, 0x1.058dc3ba0b1b8p-1, 0x1.52752892a4ea5p-3, +0x1.d174d7eba2e9bp-2, 0x1.95c85d432b90cp-3, 0x1.b0f1934b61e32p-2, 0x1.8a43b60314877p-1, +0x1.3b6c950276d93p-4, 0x1.4d47ad3a9a8f6p-2, 0x1.849595bb092b3p-1, 0x1.992a645f3254dp-1, +0x1.de75966fbceb3p-1, 0x1.d345bf13a68b8p-1, 0x1.c734390b8e687p-2, 0x1.567cb2beacf96p-1, +0x1.d784829baf09p-1, 0x1.ff734ce7fee6ap-1, 0x1.dadc50d7b5b8ap-1, 0x1.6630018acc6p-1, +0x1.ccbc80fb9979p-2, 0x1.fc94378bf9287p-1, 0x1.b5c9fd536b94p-2, 0x1.ef10693bde20dp-1, +0x1.bba7343b774e7p-1, 0x1.3a7ec51674fd9p-1, 0x1.d4e266e7a9c4dp-1, 0x1.28fa153251f43p-2, +0x1.05356bfa0a6adp-1, 0x1.94f5eef329ebep-1, 0x1.4aea84c295d51p-5, 0x1.c8244f8f9048ap-1, +0x1.5c3c9852b8793p-1, 0x1.1a3c6c063478ep-1, 0x1.cc199b4398333p-5, 0x1.13dc111227b82p-3, +0x1.7fae8356ff5dp-1, 0x1.ea74c6b3d4e99p-2, 0x1.cf3aba479e757p-1, 0x1.a71c15fb4e383p-1, +0x1.9bde39f737bc7p-1, 0x1.53d04ffea7a0ap-1, 0x1.40467a56808cfp-1, 0x1.7a53d066f4a7ap-1, +0x1.27160f124e2c2p-1, 0x1.1f04b6c23e097p-4, 0x1.a1a1064343421p-2, 0x1.fd352353fa6a4p-2, +0x1.1a9f1de2353e4p-4, 0x1.5759a7eaaeb35p-2, 0x1.932a4cd32654ap-3, 0x1.09b2243e13645p-1, +0x1.508216faa1043p-2, 0x1.3faf91de7f5f2p-1, 0x1.f1851aebe30a3p-2, 0x1.8fa0fed31f42p-3, +0x1.e8b95bd3d172bp-3, 0x1.9b49e8b33693dp-2, 0x1.f0ca94a3e1953p-2, 0x1.7f63c2eefec78p-1, +0x1.8a6b8d2314d72p-3, 0x1.0d13f29e1a27ep-1, 0x1.4788127a8f102p-1, 0x1.bed77b9b7daefp-1, +0x1.3a82f5027505fp-4, 0x1.6449ac2ec8936p-1, 0x1.e73ff003ce7fep-8, 0x1.a6fee1fb4dfdcp-1, +0x1.66103e12cc208p-3, 0x1.d3093a27a6127p-1, 0x1.4e1af7f29c35fp-1, 0x1.f562497feac49p-1, +0x1.26d98a264db31p-1, 0x1.1cc2e48a3985dp-2, 0x1.6fb619e2df6c3p-1, 0x1.37be64d26f7cdp-3, +0x1.6484123ac9082p-2, 0x1.021a74020434fp-3, 0x1.4c8a2ade99145p-1, 0x1.ab2bd9bb5657bp-2, +0x1.d866e1ebb0cdcp-2, 0x1.b154be1362a98p-1, 0x1.df48111bbe902p-1, 0x1.94747c7728e9p-1, +0x1.e2089fe3c4114p-2, 0x1.b0153d1b602a8p-2, 0x1.f85cbc2bf0b98p-1, 0x1.6b32a6e6d6655p-1, +0x1.a5af92eb4b5f2p-1, 0x1.e1840cf3c3082p-2, 0x1.d52cd3a3aa59ap-2, 0x1.094ec602129d9p-6, +0x1.fdd5f917fbabfp-1, 0x1.90f3e24321e7cp-4, 0x1.c721f1cf8e43ep-1, 0x1.2932bdc252658p-4, +0x1.9668287b2cd05p-1, 0x1.caf071af95e0ep-1, 0x1.cc2539b3984a7p-1, 0x1.efec37ffdfd87p-1, +0x1.9df9abd33bf35p-1, 0x1.1a4031a234806p-1, 0x1.e54e817bca9dp-1, 0x1.89a66beb134cdp-2, +0x1.a8a1a3e751434p-1, 0x1.55049b5aaa093p-1, 0x1.12c2cf2a2585ap-1, 0x1.6b8eb402d71d7p-3, +0x1.958b385b2b167p-1, 0x1.7d33e822fa67dp-3, 0x1.307999de60f33p-1, 0x1.037d52a206faap-2, +0x1.0a1b81821437p-5, 0x1.0fc1aaf61f835p-1, 0x1.63325c42c664cp-5, 0x1.01a6080a034c1p-1, +0x1.e7cc4987cf989p-1, 0x1.d1fc3d83a3f88p-6, 0x1.b362bbb366c57p-3, 0x1.8d7bdc6f1af7cp-1, +0x1.fea3d0d3fd47ap-2, 0x1.576f18beaede3p-1, 0x1.95c6529f2b8cap-1, 0x1.fa4fc2fbf49f8p-2, +0x1.898d950b131b3p-1, 0x1.5ce8446ab9d09p-1, 0x1.224e3936449c7p-1, 0x1.1ff5bd823feb8p-1, +0x1.27d8b6164fb17p-1, 0x1.dce6e5cbb9cddp-2, 0x1.0fe1f57e1fc3fp-1, 0x1.8ba4c3d317498p-2, +0x1.167490822ce92p-6, 0x1.ea60edf3d4c1ep-2, 0x1.8aa597df154b3p-1, 0x1.b155486b62aa9p-1, +0x1.28d4494251a89p-3, 0x1.3ad0ce1275a1ap-2, 0x1.871ead830e3d6p-6, 0x1.dfc04aafbf809p-1, +0x1.f96ac223f2d58p-2, 0x1.3cb28f4a79652p-1, 0x1.85fbcff30bf7ap-3, 0x1.0d57192a1aae3p-1, +0x1.31d0e90263a1dp-3, 0x1.dec86703bd90dp-3, 0x1.dfa42683bf485p-6, 0x1.a2041e2344084p-4, +0x1.0c83f75a1907fp-2, 0x1.ef574083deae8p-3, 0x1.c1bc60338378cp-1, 0x1.8593e4170b27dp-1, +0x1.d344e8e3a689dp-1, 0x1.5782b2ceaf056p-1, 0x1.05778b2a0aef1p-2, 0x1.5cd27deab9a5p-1, +0x1.68d5ee72d1abep-2, 0x1.a509fecb4a14p-1, 0x1.f320eda3e641ep-3, 0x1.dc43ad4fb8876p-1, +0x1.26fae3624df5cp-2, 0x1.8caa30e719546p-1, 0x1.442c1e6a88584p-2, 0x1.38622c6a70c46p-2, +0x1.03b54fba076aap-2, 0x1.65dd38a2cbba7p-4, 0x1.36197a826c32fp-3, 0x1.981f7463303efp-2, +0x1.94481c3b28904p-2, 0x1.66fd5032cdfaap-3, 0x1.57a009baaf401p-2, 0x1.c6d96f2f8db2ep-1, +0x1.9671e3572ce3cp-1, 0x1.0d4ef8da1a9dfp-1, 0x1.a86110ab50c22p-2, 0x1.e2e61d97c5cc4p-1, +0x1.8501129b0a022p-1, 0x1.c65b53138cb6ap-2, 0x1.726a1582e4d43p-5, 0x1.6861c882d0c39p-6, +0x1.5f0379aebe06fp-1, 0x1.d8e3018bb1c6p-1, 0x1.90d6f25f21adep-1, 0x1.3248628e6490cp-1, +0x1.3065b45a60cb7p-1, 0x1.392b7f027257p-5, 0x1.1e35c0ea3c6b8p-2, 0x1.e4d0ab93c9a15p-1, +0x1.b89cb6bb71397p-1, 0x1.0be31bde17c63p-1, 0x1.c11458df8228bp-1, 0x1.3068a1a260d14p-3, +0x1.311a998262353p-2, 0x1.8ca9a05319534p-3, 0x1.d0967d43a12dp-2, 0x1.1a67f4a234cffp-1, +0x1.1fcc1e523f984p-2, 0x1.35d19d426ba34p-1, 0x1.e677aed3ccef6p-1, 0x1.5a0a1d46b4144p-1, +0x1.8f90f14f1f21ep-1, 0x1.248f675a491edp-2, 0x1.20e38c7241c72p-1, 0x1.2602d4a24c05bp-1, +0x1.9f96ac873f2d6p-1, 0x1.f51414c7ea283p-1, 0x1.08e8f23a11d1ep-1, 0x1.2497bf1e492f8p-1, +0x1.b0837ca36107p-2, 0x1.200f9392401f2p-1, 0x1.2fdacd625fb5ap-1, 0x1.ba29bfe374538p-4, +0x1.f1e52a3be3ca5p-2, 0x1.81637f7b02c7p-2, 0x1.698d9a8ad31b3p-1, 0x1.4ac24ba295849p-4, +0x1.a888ef5b5111ep-2, 0x1.f8a87afff150fp-1, 0x1.c51ea0838a3d4p-6, 0x1.19c25cd23384cp-2, +0x1.048b96da09173p-1, 0x1.cf3d4de39e7aap-1, 0x1.b1f6ada363ed6p-2, 0x1.9d18e39b3a31cp-1, +0x1.933dafa3267b6p-4, 0x1.c1469573828d3p-1, 0x1.6f01b072de036p-2, 0x1.849b8a3b09371p-2, +0x1.ee306563dc60dp-2, 0x1.3bf10e1277e22p-2, 0x1.c57e26038afc5p-5, 0x1.0d5247fa1aa49p-2, +0x1.30403ab660807p-1, 0x1.3d3b6ed27a76ep-1, 0x1.acabf8a35957fp-1, 0x1.9fadce733f5bap-2, +0x1.324f839a649fp-1, 0x1.6b29d5b2d653bp-2, 0x1.f46ea657e8dd5p-1, 0x1.52283d02a4508p-6, +0x1.d5a47e6bab49p-1, 0x1.244973ba4892ep-1, 0x1.0759e7920eb3dp-3, 0x1.9d2e270b3a5c5p-2, +0x1.e4fb3377c9f66p-1, 0x1.ab64146f56c83p-1, 0x1.efdeb9f3dfbd7p-2, 0x1.727f564ae4febp-2, +0x1.a40c8f6b48192p-1, 0x1.061851fe0c30ap-1, 0x1.4620d98e8c41bp-1, 0x1.51304c82a260ap-2, +0x1.aaab3fc355568p-2, 0x1.f1c305c3e3861p-5, 0x1.16c427622d885p-3, 0x1.07bd55d60f7abp-1, +0x1.e062c5d3c0c59p-1, 0x1.fa63c42bf4c79p-2, 0x1.ca0b1af794163p-1, 0x1.aef5f1035debep-2, +0x1.9b2a691f3654dp-1, 0x1.e662fd57ccc6p-1, 0x1.5e241c82bc484p-1, 0x1.96d547ab2daa9p-2, +0x1.239e6c2a473cep-1, 0x1.0ad0152215a03p-1, 0x1.9b418b0f36831p-1, 0x1.57b7bf02af6f8p-3, +0x1.c064fffb80cap-1, 0x1.8fb031671f606p-1, 0x1.81fcc6a303f99p-3, 0x1.96097e632c13p-1, +0x1.67f34a3acfe69p-2, 0x1.44ab571a8956bp-2, 0x1.928247a325049p-3, 0x1.31e9b12263d36p-2, +0x1.36e6ffe26dcep-3, 0x1.5c8feee2b91fep-1, 0x1.523483b6a469p-1, 0x1.f1c64f63e38cap-1, +0x1.8aa103831542p-3, 0x1.30aaba8261557p-2, 0x1.34bceb426979dp-2, 0x1.37fde0c26ffbcp-1, +0x1.6ee31b42ddc63p-2, 0x1.c01efef3803ep-2, 0x1.fdd9b4a3fbb37p-4, 0x1.2fa8a6e25f515p-2, +0x1.dd41618fba82cp-1, 0x1.38ca310271946p-6, 0x1.6f4f4bf2de9e9p-1, 0x1.786bcaaef0d79p-1, +0x1.f0294ee3e052ap-1, 0x1.9ae6d0e335cdap-2, 0x1.0f59ba021eb37p-3, 0x1.13c7bb0a278f7p-1, +0x1.d8437d93b087p-1, 0x1.df17f98fbe2ffp-1, 0x1.69b5aacad36b5p-1, 0x1.98a87d8b3151p-1, +0x1.6ec82af2dd905p-1, 0x1.ca34dc739469cp-1, 0x1.2eb1fbee5d63fp-1, 0x1.160e80622c1dp-4, +0x1.b22a1ff364544p-3, 0x1.93528dd726a52p-1, 0x1.776d5142eedaap-2, 0x1.74888feae9112p-2, +0x1.dfc4f96bbf89fp-2, 0x1.bd658a837acb1p-6, 0x1.58152eaab02a6p-2, 0x1.528abd96a5158p-1, +0x1.4c81133299022p-2, 0x1.46690cf68cd22p-1, 0x1.15113caa2a228p-2, 0x1.5db2173abb643p-1, +0x1.33c463626788cp-4, 0x1.9487a9db290f5p-2, 0x1.f5866aabeb0cdp-1, 0x1.dcf6fe03b9eep-8, +0x1.a8144ceb5028ap-2, 0x1.64d5b69ac9ab7p-1, 0x1.7c25b8aaf84b7p-1, 0x1.8866eaab10cddp-2, +0x1.9248f8632491fp-4, 0x1.bffc272b7ff85p-1, 0x1.d7fb305faff66p-1, 0x1.51939382a3272p-6, +0x1.9f1420b73e284p-1, 0x1.41b0db268361bp-1, 0x1.a3351a2b466a3p-1, 0x1.0ddc4baa1bb89p-1, +0x1.0be5b79617cb7p-1, 0x1.a3ce2c2b479c6p-2, 0x1.309e1bb6613c3p-1, 0x1.78703f92f0e08p-1, +0x1.94e68fa329cd2p-3, 0x1.ec54c457d8a99p-1, 0x1.95a43c232b488p-4, 0x1.551c209eaa384p-1, +0x1.fa3ff0aff47fep-1, 0x1.bd7e3db37afc8p-2, 0x1.4f4dbc6a9e9b8p-2, 0x1.4100f48a8201fp-2, +0x1.29415e625282cp-4, 0x1.322f7c8a645fp-1, 0x1.fe32917ffc652p-1, 0x1.2e82e0f25d05cp-3, +0x1.fc735177f8e6ap-1, 0x1.f3b8fc27e772p-1, 0x1.3d6a98e27ad53p-3, 0x1.a0faefdb41f5ep-2, +0x1.588eb2beb11d6p-1, 0x1.cb805ee39700cp-1, 0x1.94b0ed432961ep-1, 0x1.8ad7d1cb15afap-1, +0x1.8b7c860b16f91p-1, 0x1.6cac1da2d9584p-1, 0x1.95646e6b2ac8ep-1, 0x1.2a90a6be55215p-1, +0x1.5cb9f18ab973ep-2, 0x1.3899889271331p-1, 0x1.c367932386cf2p-4, 0x1.ba42b05f74856p-1, +0x1.5013d482a027bp-6, 0x1.690b0e1ed2162p-1, 0x1.32b2efee6565ep-1, 0x1.bee90a337dd21p-3, +0x1.555fd272aabfap-1, 0x1.65677776cacefp-1, 0x1.c4d6632b89accp-1, 0x1.4f9fc31e9f3f8p-1, +0x1.109a59322134bp-3, 0x1.b1f5057363ea1p-3, 0x1.f0203d63e0408p-1, 0x1.a53b08734a761p-3, +0x1.9eacbdeb3d598p-1, 0x1.ee52cedfdca5ap-1, 0x1.69def4b2d3bdfp-2, 0x1.9b200f5f36402p-1, +0x1.e20bcb03c4179p-1, 0x1.044a209208944p-1, 0x1.ae761d235cec4p-3, 0x1.3a9a7dc27535p-1, +0x1.9f94fee33f2ap-2, 0x1.39d2300273a46p-11, 0x1.8ae49f1315c94p-2, 0x1.6d1c15e2da383p-3, +0x1.6cfa922ed9f52p-1, 0x1.6b5af7c2d6b5fp-3, 0x1.85d7ac370baf6p-1, 0x1.b578af036af16p-5, +0x1.9370468326e09p-1, 0x1.be449e9f7c894p-1, 0x1.d59a3b4fab347p-1, 0x1.9df0e5273be1dp-1, +0x1.274facba4e9f6p-1, 0x1.084d2b3e109a5p-1, 0x1.b564f6036ac9fp-6, 0x1.f2bdfca3e57cp-3, +0x1.b6d28ac36da51p-3, 0x1.d2818adfa5031p-1, 0x1.cc4f424b989e8p-1, 0x1.63b671fac76cep-2, +0x1.f7f661c3efeccp-4, 0x1.bc6f7fab78dfp-1, 0x1.1b29fb1a3653fp-1, 0x1.ddab8a23bb571p-1, +0x1.aac24e8b5584ap-1, 0x1.d0197573a032fp-1, 0x1.78cb9982f1973p-1, 0x1.8cce198b199c3p-1, +0x1.a8c72c03518e6p-2, 0x1.e46920cbc8d24p-1, 0x1.8ed12e931da26p-2, 0x1.a42e1573485c3p-1, +0x1.e4b79557c96f3p-1, 0x1.8cdae6d719b5dp-1, 0x1.ff751aebfeea3p-1, 0x1.51b22782a3645p-1, +-0x1.84e5b38309cbp-5, -0x1.eacce373d599cp-3, -0x1.25ec9b124bd94p-2, -0x1.09bc296a13786p-2, +-0x1.78dd3482f1ba6p-2, -0x1.7ab8247af5704p-2, -0x1.cdda5f239bb4cp-2, -0x1.951eed8b2a3dep-1, +-0x1.b50ee7036a1ddp-1, -0x1.b2840fbb65082p-2, -0x1.186f6e6230deep-1, -0x1.475a44528eb48p-1, +-0x1.06c07d020d81p-1, -0x1.4c202c1a98406p-1, -0x1.2afe16a255fc2p-2, -0x1.8f8361931f06cp-2, +-0x1.8fb0ac6f1f616p-1, -0x1.7a55103af4aa2p-1, -0x1.d42c4d4ba858ap-2, -0x1.e4ee5de7c9dccp-1, +-0x1.aa3b9ac754773p-1, -0x1.714a8d26e2952p-1, -0x1.60811172c1024p-3, -0x1.abb0098b57602p-2, +-0x1.8ce16c5f19c2ep-1, -0x1.90b7ad13216f6p-1, -0x1.31a9ef526353ep-1, -0x1.a829d7075053bp-1, +-0x1.ee631e03dcc8p-8, -0x1.3234d46a6469ap-1, -0x1.59debe12b3bd8p-3, -0x1.c2b217838564p-5, +-0x1.ace80d4b59d02p-1, -0x1.d2dbfa23a5b8p-2, -0x1.42126c628424ep-2, -0x1.a55a9e334ab54p-3, +-0x1.a6ca0f4f4d942p-1, -0x1.87f665c30fecdp-1, -0x1.fe75951bfceb3p-1, -0x1.5bd8f652b7b1fp-1, +-0x1.84e1b68309c38p-3, -0x1.16e5037a2dcap-1, -0x1.466675428cccep-2, -0x1.67f8eaa6cff1ep-1, +-0x1.8c14be5318298p-3, -0x1.38b245f671648p-1, -0x1.7dd4db82fba98p-4, -0x1.f2b5dc07e56bcp-1, +-0x1.660eac62cc1d6p-2, -0x1.19d0c21a33a18p-1, -0x1.d7a439efaf487p-1, -0x1.750bc3e2ea178p-3, +-0x1.16369e822c6d4p-2, -0x1.7e23f242fc48p-4, -0x1.331af5be6635ep-1, -0x1.7fcbb9c2ff97p-5, +-0x1.c07c2b5f80f85p-1, -0x1.9313944326274p-3, -0x1.c02692a7804d2p-1, -0x1.c458f19f88b1ep-1, +-0x1.96f9b97f2df37p-1, -0x1.69e422c2d3c8p-5, -0x1.e084131bc1082p-1, -0x1.43e1c6c687c39p-1, +0x1.7ff9e060fff3cp+0, 0x1.bf395b5b7e72cp+0, 0x1.2963c8d452c79p+0, 0x1.ac94d8b95929bp+0, +0x1.fb3e2879f67c5p+0, 0x1.2a28fe485452p+0, 0x1.fea85d8ffd50cp+0, 0x1.caa1f1a79543ep+0, +0x1.9eb67c8b3d6dp+0, 0x1.ad0ec03d5a1d8p+0, 0x1.16a57c522d4bp+0, 0x1.6d33e4beda67cp+0, +0x1.10b59d40216b4p+0, 0x1.fec82e99fd906p+0, 0x1.73d8f6bce7b1fp+0, 0x1.b731f2296e63ep+0, +0x1.71dfcd8ce3bfap+0, 0x1.8806d9c5100dbp+0, 0x1.889079ab1120fp+0, 0x1.2c5225ea58a45p+0, +0x1.70249a9ee0493p+0, 0x1.ef02fecbde06p+0, 0x1.2053c81a40a79p+0, 0x1.8fe684ef1fcdp+0, +0x1.bca08c4179412p+0, 0x1.40407ec68081p+0, 0x1.adba0c1f5b742p+0, 0x1.f123af83e2476p+0, +0x1.34f15db069e2cp+0, 0x1.bd7802937afp+0, 0x1.4f32cc1e9e65ap+0, 0x1.b4eb3e1169d68p+0, +0x1.7cb15decf962cp+0, 0x1.789694f2f12d2p+0, 0x1.618016c8c3003p+0, 0x1.77ef8664efdf1p+0, +0x1.a2bf933b457f2p+0, 0x1.60287456c050ep+0, 0x1.4291780a8522fp+0, 0x1.41760fc482ec2p+0, +0x1.0d3734941a6e7p+0, 0x1.5936f45cb26dep+0, 0x1.aea9f4855d53ep+0, 0x1.1decd1d43bd9ap+0, +0x1.57ff22f4affe4p+0, 0x1.2282eb404505dp+0, 0x1.d51ec3fdaa3d8p+0, 0x1.c9def08193bdep+0, +0x1.aa89c50555138p+0, 0x1.5daf3da8bb5e8p+0, 0x1.f631166dec623p+0, 0x1.1aae5fa4355ccp+0, +0x1.4cb23c7299648p+0, 0x1.1684de862d09cp+0, 0x1.aa94e4935529cp+0, 0x1.0952c8b412a59p+0, +0x1.56c55d4ead8acp+0, 0x1.584ef0b2b09dep+0, 0x1.fa767837f4ecfp+0, 0x1.8bb6baff176d8p+0, +0x1.15c6f3442b8dep+0, 0x1.49a9445493528p+0, 0x1.40a1f90e8143fp+0, 0x1.9278513124f0ap+0, +0x1.847fb28f08ff6p-1, 0x1.44441fae88884p-1, 0x1.4cfaf28299f5ep-5, 0x1.93fdb20b27fb6p-2, +0x1.254216024a843p-7, 0x1.33e53e7a67ca8p-2, 0x1.4ceaf88e99d5fp-1, 0x1.f0371803e06e3p-5, +0x1.4c6087f698c11p-1, 0x1.547dc32aa8fb8p-2, 0x1.6b7454b2d6e8bp-3, 0x1.fc5ecddff8bdap-1, +0x1.de89702bbd12ep-2, 0x1.46a749028d4e9p-7, 0x1.901caee320396p-1, 0x1.1161088222c21p-3, +0x1.80f230eb01e46p-2, 0x1.7c7edbbaf8fdbp-1, 0x1.e6d405a3cda81p-3, 0x1.59dd915eb3bb2p-1, +0x1.a98898c753113p-1, 0x1.cedeca8f9dbd9p-1, 0x1.6c8322c6d9064p-1, 0x1.5c4d4d82b89aap-3, +0x1.fdf2afc3fbe56p-3, 0x1.61701332c2e02p-1, 0x1.6e80c95edd019p-1, 0x1.561524f2ac2a5p-2, +0x1.f4c29bdbe9853p-1, 0x1.efc4bb7bdf897p-1, 0x1.cffb34db9ff67p-1, 0x1.79424e66f284ap-1, +0x1.3408db266811bp-1, 0x1.e4cae403c995dp-1, 0x1.0d049da21a094p-3, 0x1.389de382713bcp-1, +0x1.faf60cf3f5ec2p-3, 0x1.902c1ffb20584p-1, 0x1.57a15502af42bp-1, 0x1.cb1e0b33963c1p-1, +0x1.d3580c63a6b02p-4, 0x1.b27e6a2f64fcdp-1, 0x1.c77cd9138ef9bp-1, 0x1.29afb9a6535f7p-1, +0x1.b79907576f321p-1, 0x1.579987f2af331p-1, 0x1.6e07fbc6dc0ffp-1, 0x1.e0487f23c091p-3, +0x1.a830c75350619p-2, 0x1.e7bcfd2fcf7ap-1, 0x1.d1efb127a3df6p-1, 0x1.f683f1b3ed07ep-3, +0x1.b69bc7bb6d379p-1, 0x1.3e72d3ea7ce5ap-1, 0x1.a9689fa352d14p-2, 0x1.b0c39d6361874p-4, +0x1.3fc5ce327f8bap-2, 0x1.0cd464b219a8dp-3, 0x1.c2460c4b848c2p-2, 0x1.294b05e252961p-2, +0x1.97cea5432f9d5p-4, 0x1.623c7602c478fp-2, 0x1.bcfa2b0379f45p-6, 0x1.6702afcece056p-1, +0x1.2bd23e0257a48p-2, 0x1.44a3e3028947cp-3, 0x1.3f41269a7e825p-2, 0x1.14a6a242294d4p-1, +0x1.e15518bbc2aa3p-1, 0x1.f741e853ee83dp-1, 0x1.bf895ae37f12bp-2, 0x1.bc01a48378035p-5, +0x1.a9c0527f5380ap-1, 0x1.4e830d029d062p-2, 0x1.456fd3ee8adfap-1, 0x1.615959d2c2b2bp-1, +0x1.fedb0e73fdb62p-1, 0x1.66ef9f62cddf4p-2, 0x1.d96b799fb2d6fp-1, 0x1.a5e6e4334bcddp-2, +0x1.366999ba6cd33p-2, 0x1.ab5b2ac356b65p-1, 0x1.50946e8aa128ep-1, 0x1.474252528e84ap-3, +0x1.d39bfd5ba738p-2, 0x1.2a45f2c2548bep-4, 0x1.0fd210821fa42p-2, 0x1.89b0e5c71361dp-1, +0x1.a1f75e1343eecp-3, 0x1.690c0e6ad2182p-1, 0x1.e5668b83cacd1p-5, 0x1.36ef585a6ddebp-2, +0x1.a2a4968345493p-5, 0x1.61f1d082c3e3ap-4, 0x1.3d2dfe027a5cp-8, 0x1.6026d0d2c04dap-2, +0x1.f59ccb43eb399p-3, 0x1.4435de92886bcp-2, 0x1.c4ba0aab89741p-1, 0x1.7af12e32f5e26p-3, +0x1.32b9af3265736p-2, 0x1.48fd703a91faep-2, 0x1.e9f19753d3e33p-3, 0x1.0c74a86218e95p-3, +0x1.4bc03e9e97808p-1, 0x1.bfec39c37fd87p-1, 0x1.a47683eb48edp-1, 0x1.4a9b4d129536ap-1, +0x1.cd9025c39b205p-3, 0x1.7de1fd86fbc4p-1, 0x1.d8ebf283b1d7ep-5, 0x1.0e98d64e1d31bp-1, +0x1.293d284a527a5p-1, 0x1.6e232db2dc466p-1, 0x1.60696ae2c0d2dp-1, 0x1.30b26f426164ep-5, +0x1.936bec0b26d7ep-1, 0x1.e8527327d0a4ep-1, 0x1.9cbc0cbb39782p-1, 0x1.fbe9c393f7d38p-1, +0x1.515e818ea2bdp-1, 0x1.bb1275737624fp-1, 0x1.2ec2df7a5d85cp-2, 0x1.6b88caf6d7119p-1, +0x1.e750af83cea16p-1, 0x1.33b79772676f3p-2, 0x1.b9c335c373867p-5, 0x1.92df895325bf1p-3, +0x1.3bf6bb0677ed7p-1, 0x1.e0563e0bc0ac8p-1, 0x1.86e85bc30dd0bp-2, 0x1.d553929faaa72p-1, +0x1.09a9ec4a1353ep-2, 0x1.3df093b67be12p-1, 0x1.870bcb430e179p-5, 0x1.d09534c3a12a7p-1, +0x1.fbb99aebf7733p-2, 0x1.bce740a379ce8p-1, 0x1.1b3081d23661p-1, 0x1.7140d6e6e281bp-1, +0x1.3ac93e2675928p-1, 0x1.38bf40fe717e8p-1, 0x1.ff66b4c3fecd7p-3, 0x1.901999b320333p-3, +0x1.4dc4dd5a9b89cp-2, 0x1.e0431813c0863p-1, 0x1.dc463583b88c7p-3, 0x1.d272d5c3a4e5bp-4, +0x1.c8958b37912b1p-1, 0x1.3cd9a1c279b34p-5, 0x1.b1c0f2436381ep-4, 0x1.19f40cc233e82p-1, +0x1.cee00f8f9dc02p-1, 0x1.9b331c0b36664p-2, 0x1.0af9af6a15f36p-2, 0x1.b630bf136c618p-1, +0x1.677559c2ceeabp-1, 0x1.4232162a84643p-2, 0x1.ae8a16435d143p-5, 0x1.46d8298a8db05p-2, +0x1.02de923a05bd2p-2, 0x1.bcb99e8b79734p-2, 0x1.e2fe9d83c5fd4p-3, 0x1.06443f420c888p-1, +0x1.c4d62f8389ac6p-5, 0x1.2260c83244c19p-2, 0x1.adb2e8035b65dp-2, 0x1.1a2a306e34546p-1, +0x1.385e92e270bd2p-3, 0x1.f209f5d7e413fp-1, 0x1.16d60ea22dac2p-2, 0x1.88e0e2df11c1cp-1, +0x1.2ac936d255927p-1, 0x1.0b44b48216897p-1, 0x1.ece7494fd9ce9p-1, 0x1.d1aba57fa3575p-1, +0x1.d70f9923ae1f3p-2, 0x1.8fe35ab31fc6bp-3, 0x1.7f400682fe801p-6, 0x1.683aaf92d0756p-2, +0x1.df19c323be338p-3, 0x1.08c879f21190fp-3, 0x1.ce11648b9c22dp-1, 0x1.1a9a01623534p-3, +0x1.0fcbac861f976p-1, 0x1.4e38f1029c71ep-3, 0x1.fcd73f6bf9ae8p-1, 0x1.dd041913ba083p-3, +0x1.e94e8eabd29d2p-2, 0x1.7bfe0cc2f7fc2p-5, 0x1.1aad1b0a355a3p-1, 0x1.76169072ec2d2p-1, +0x1.ec396023d872cp-2, 0x1.936cc26b26d98p-1, 0x1.f16b3ec3e2d68p-3, 0x1.126a130a24d42p-1, +0x1.24e9340249d27p-4, 0x1.533443b2a6688p-1, 0x1.64a21ba2c9443p-4, 0x1.cad32ce395a66p-3, +0x1.453e39868a7c7p-1, 0x1.6ffe958adffd3p-2, 0x1.fb95ae1bf72b6p-1, 0x1.c01dc153803b8p-3, +0x1.c343ff478688p-1, 0x1.e87cf767d0f9fp-1, 0x1.06cc57520d98bp-3, 0x1.5d9797aabb2f3p-2, +0x1.31d7384263ae7p-3, 0x1.36b458226d68bp-3, 0x1.62e9239ec5d24p-1, 0x1.88787dbb10f1p-2, +0x1.1fbe69123f7cdp-2, 0x1.30fa882a61f51p-1, 0x1.0ae2bf3615c58p-1, 0x1.9faae10f3f55cp-1, +0x1.8488c46b09119p-1, 0x1.07b9fe9e0f74p-1, 0x1.6ebe7502dd7cfp-5, 0x1.e4c02ef3c9806p-3, +0x1.1f79df6a3ef3cp-1, 0x1.3199025a6332p-1, 0x1.ef469c2fde8d4p-1, 0x1.5968f782b2d1fp-5, +0x1.8a0b898314171p-2, 0x1.ae85af735d0b6p-3, 0x1.2800a28250014p-1, 0x1.d345d68ba68bbp-2, +0x1.bed5af8f7dab6p-1, 0x1.5494e5f6a929dp-1, 0x1.5c57b67eb8af7p-1, 0x1.0413e9160827dp-1, +0x1.92861703250c3p-6, 0x1.57ed6496afdadp-1, 0x1.741b596ae836bp-1, 0x1.cfd82fff9fb06p-1, +0x1.406a5bfa80d4bp-1, 0x1.b5ce6f3f6b9cep-1, 0x1.fa8fef43f51fep-3, 0x1.8ce02a0f19c05p-1, +0x1.bdc2a4037b855p-8, 0x1.e18d1f73c31a4p-1, 0x1.4471a3a288e34p-3, 0x1.26b573a24d6aep-2, +0x1.1287a79a250f5p-1, 0x1.5bff281eb7fe5p-1, 0x1.982cd6e33059bp-4, 0x1.2e20d8025c41bp-2, +0x1.8ee49ae31dc93p-3, 0x1.27c608b24f8c1p-3, 0x1.104077be2080fp-1, 0x1.8333062306661p-1, +0x1.7b8a8486f7151p-1, 0x1.ff0e27d3fe1c5p-2, 0x1.98c9959b31933p-1, 0x1.0241251204825p-3, +0x1.6b287fc6d651p-1, 0x1.819470330328ep-2, 0x1.2a33348a54667p-1, 0x1.29fe2f5253fc6p-1, +0x1.55f1e0c2abe3cp-5, 0x1.0d15d6121a2bbp-2, 0x1.7090c322e1218p-4, 0x1.0f9a76221f34fp-4, +0x1.de784f9fbcf0ap-1, 0x1.a22d71d3445aep-1, 0x1.f1cb7ec3e397p-1, 0x1.1ee2ab9a3dc55p-1, +0x1.57fbe10eaff7cp-1, 0x1.c1bdea43837bdp-3, 0x1.5785ab4aaf0b5p-2, 0x1.5b776656b6eedp-1, +0x1.47f268028fe4dp-3, 0x1.f9be7d1bf37dp-2, 0x1.eed22027dda44p-1, 0x1.6484419ac9088p-1, +0x1.63799aa2c6f33p-3, 0x1.0ebdd8021d7bbp-4, 0x1.fb94ad9bf7296p-1, 0x1.792f1ac2f25e3p-2, +0x1.af24f4b35e49fp-3, 0x1.0bd5255617aa5p-1, 0x1.fe549c03fca94p-4, 0x1.e753c1b3cea78p-1, +0x1.6b872782d70e5p-6, 0x1.d894291bb1285p-1, 0x1.3f2057c27e40bp-4, 0x1.7684b902ed097p-1, +0x1.32bcc26265798p-2, 0x1.52173f82a42e8p-1, 0x1.4105d0aa820bap-2, 0x1.5d7afe7abaf6p-2, +0x1.d8a22a8bb1445p-1, 0x1.9d2a01733a54p-2, 0x1.a1619c0342c34p-2, 0x1.b71a7a2b6e34fp-1, +0x1.c309ca2386139p-3, 0x1.84f8998309f13p-2, 0x1.abfa4b8357f49p-2, 0x1.c8be539b917cap-1, +0x1.32ebc75265d79p-1, 0x1.81bffb67037ffp-1, 0x1.2435b9ee486b7p-1, 0x1.84e8615709d0cp-1, +0x1.fa7ce7c3f4f9dp-3, 0x1.1307da16260fbp-1, 0x1.d2d945dba5b29p-2, 0x1.aefb41335df68p-2, +0x1.34df951669bf3p-1, 0x1.ca02a11394054p-2, 0x1.94152dfb282a6p-1, 0x1.a0a8d2474151ap-1, +0x1.f0d675dfe1acfp-1, 0x1.d3dfc17ba7bf8p-1, 0x1.87fc93f70ff92p-1, 0x1.fc32af1ff8656p-1, +0x1.ac73ea9358e7dp-1, 0x1.afe09eef5fc14p-1, 0x1.72b7681ee56edp-1, 0x1.17492f022e926p-3, +0x1.01f7de7203efcp-1, 0x1.33a50702674a1p-5, 0x1.e91f95fbd23f3p-2, 0x1.b53411f36a682p-2, +0x1.c39ea25b873d4p-2, 0x1.c54098ff8a813p-1, 0x1.2369064246d21p-2, 0x1.5291c3b6a5238p-1, +0x1.0f79cb7a1ef39p-2, 0x1.67b1a8e2cf635p-1, 0x1.1b50174e36a03p-1, 0x1.baa8ad0f75516p-1, +0x1.d2e3488ba5c69p-2, 0x1.fc2e89e3f85d1p-4, 0x1.3f910e627f222p-1, 0x1.6810de36d021cp-1, +0x1.528dab52a51b5p-1, 0x1.47ed8a828fdb1p-4, 0x1.fc73f663f8e7fp-4, 0x1.0eda80ca1db5p-2, +0x1.0dff01da1bfep-1, 0x1.d3a3acc7a7476p-1, 0x1.40b0954281613p-4, 0x1.fdaaef6bfb55ep-2, +0x1.a7836e3f4f06ep-1, 0x1.b012a6a360255p-1, 0x1.f6104da3ec20ap-2, 0x1.53f758cea7eebp-1, +0x1.5ff3458ebfe69p-1, 0x1.b6fe3bc36dfc7p-3, 0x1.99c9a48f33935p-1, 0x1.87ac8ff30f592p-3, +0x1.01f3bec203e78p-2, 0x1.1cb2df123965cp-2, 0x1.3c852cfa790a6p-1, 0x1.62c9308ec5926p-1, +0x1.4e6822129cd04p-3, 0x1.ce39b01b9c736p-1, 0x1.6ab5e88ad56bdp-2, 0x1.b6addc836d5bcp-2, +0x1.35eb58fe6bd6bp-1, 0x1.d0ab0b93a1561p-1, 0x1.2bff36a257fe7p-2, 0x1.f5cfd403eb9fbp-5, +0x1.030dccc2061bap-5, 0x1.d590a9b3ab215p-1, 0x1.876ddb7b0edbbp-1, 0x1.62be881ec57d1p-1, +0x1.fe8e5b03fd1cbp-1, 0x1.c6fc5a478df8bp-1, 0x1.ea2bc887d4579p-1, 0x1.0c8d5cda191acp-1, +0x1.9aa0070f35401p-1, 0x1.241db2c2483b6p-5, 0x1.6c5a9202d8b52p-6, 0x1.4223754a8446fp-1, +0x1.c25481cf84a9p-1, 0x1.066afb620cd5fp-1, 0x1.2c359c32586b4p-2, 0x1.2247c75e448f9p-1, +0x1.742a8a52e8551p-1, 0x1.7f239522fe473p-4, 0x1.8432eb5b0865dp-1, 0x1.f52469b7ea48dp-1, +0x1.7c7bc462f8f79p-2, 0x1.817030a302e06p-2, 0x1.57ed9a42afdb3p-1, 0x1.11d7eab623afdp-1, +0x1.1de390da3bc72p-2, 0x1.a911d0835223ap-6, 0x1.ed2ed8fbda5dbp-1, 0x1.c4dd216b89ba4p-1, +0x1.ddf39a1bbbe73p-1, 0x1.065ce8920cb9dp-2, 0x1.e43a1eabc8744p-1, 0x1.ee2476e7dc48fp-1, +0x1.62fc77e2c5f8fp-3, 0x1.6ba7fa22d74ffp-1, 0x1.50e2ff06a1c6p-1, 0x1.5d35e3f2ba6bcp-3, +0x1.32a4546a6548bp-1, 0x1.3b0ec78a761d9p-1, 0x1.63dad5d6c7b5bp-1, 0x1.9a88b6eb35117p-2, +0x1.4d50a2b69aa14p-1, 0x1.6f3daa66de7b5p-1, 0x1.ecfa1783d9f43p-6, 0x1.0fa524861f4a5p-1, +0x1.d6a29723ad453p-3, 0x1.4b053daa960a8p-2, 0x1.8f675f031ececp-4, 0x1.e9d3301bd3a66p-1, +0x1.aace22fb559c4p-2, 0x1.b61fd73b6c3fbp-1, 0x1.def799cfbdef3p-1, 0x1.93a4f3af2749ep-1, +0x1.db5fbe33b6bf8p-3, 0x1.36e534126dca7p-1, 0x1.4af9bcc295f38p-2, 0x1.05c9b7fa0b937p-1, +0x1.442dc296885b8p-1, 0x1.25576eb24aaeep-2, 0x1.954db2c32a9b6p-2, 0x1.22215cae4442cp-1, +0x1.15da2ba22bb45p-1, 0x1.5dc1f012bb83ep-2, 0x1.1045d396208bap-1, 0x1.6e99499edd329p-1, +0x1.a88f22c3511e4p-5, 0x1.84a34a6309469p-3, 0x1.c5e6c29b8bcd8p-1, 0x1.4d2d46969a5a9p-1, +0x1.9c379a23386f3p-1, 0x1.29c1986e53833p-1, 0x1.a71a20834e344p-5, 0x1.d31079aba620fp-2, +0x1.31fe85aa63fd1p-2, 0x1.4ecb96229d973p-4, 0x1.f92d615bf25acp-1, 0x1.0ea7e89e1d4fdp-1, +0x1.9eb8233b3d704p-2, 0x1.58d269c2b1a4dp-4, 0x1.f0f6316be1ec6p-2, 0x1.a4c3231b49864p-1, +0x1.e13a2477c2745p-1, 0x1.aee5650b5dcadp-2, 0x1.386816c670d03p-1, 0x1.60485002c090ap-3, +0x1.cafcd28395f9ap-6, 0x1.dde4f527bbc9fp-1, 0x1.5ddbcbfabbb79p-1, 0x1.5285a92aa50b5p-1, +0x1.c242b20384856p-3, 0x1.44152ac2882a5p-4, 0x1.d29c1763a5383p-3, 0x1.866ad8230cd5bp-1, +0x1.aec73ac35d8e7p-2, 0x1.84ecd96f09d9bp-1, 0x1.ea08437bd4108p-2, 0x1.e3d91f1bc7b24p-2, +0x1.e615ac07cc2b6p-1, 0x1.75d5c8aaebab9p-2, 0x1.f8ceb103f19d6p-4, 0x1.824d4627049a9p-1, +0x1.e4ac7cc7c959p-1, 0x1.662de0a2cc5bcp-3, 0x1.af560be35eac1p-3, 0x1.f6aefe63ed5ep-3, +0x1.06c9d5e20d93bp-2, 0x1.940b915328172p-3, 0x1.8c53a83718a75p-1, 0x1.52c0fc8ea582p-1, +0x1.203a631a4074cp-2, 0x1.099d81d2133bp-2, 0x1.ef083f4bde108p-2, 0x1.c55d58038ababp-3, +0x1.5c41736eb882ep-1, 0x1.7f61b342fec36p-4, 0x1.92d2d40325a5bp-2, 0x1.6a995a02d532bp-1, +0x1.ba257183744aep-6, 0x1.3a29afc274536p-4, 0x1.7a3e065af47c1p-2, 0x1.f9876033f30ecp-3, +0x1.3f1f6d427e3eep-3, 0x1.31c60906638c1p-1, 0x1.332c0c0266582p-7, 0x1.272b78b64e56fp-1, +0x1.6d65c4e2dacb9p-2, 0x1.f3a1a3dbe7434p-2, 0x1.9180840323011p-5, 0x1.39911cea73224p-2, +0x1.b4bbb64769777p-1, 0x1.60c77992c18efp-3, 0x1.f15d4983e2ba9p-5, 0x1.9968330b32d06p-1, +0x1.637aad1ac6f56p-2, 0x1.15d6af222bad6p-2, 0x1.713f2a02e27e5p-5, 0x1.3522417e6a448p-1, +0x1.dfdc77cbbfb8fp-2, 0x1.a3679ad746cf3p-1, 0x1.0fc67c121f8dp-2, 0x1.800b6d770016ep-1, +0x1.41b2dde28365cp-4, 0x1.7f675daefececp-1, 0x1.f162c377e2c58p-1, 0x1.8477cf2f08efap-1, +0x1.af5394175ea73p-1, 0x1.75985af2eb30bp-2, 0x1.de22525bbc44ap-2, 0x1.bd24bfa77a498p-1, +0x1.c422c6e388459p-2, 0x1.ac302c5b58606p-1, 0x1.dc34bd83b8698p-4, 0x1.31d93ec663b28p-1, +0x1.bbec6abb77d8dp-2, 0x1.014d1f82029a4p-3, 0x1.6412dde2c825cp-3, 0x1.94a917cf29523p-1, +0x1.3a2419d274483p-1, 0x1.c872fee390e6p-3, 0x1.8b8d3203171a6p-4, 0x1.ddbfa02bbb7f4p-2, +0x1.949d3c3b293a8p-2, 0x1.421deb62843bdp-3, 0x1.1090063a21201p-2, 0x1.7c0bf4aef817fp-1, +0x1.b6e5a4db6dcb5p-2, 0x1.3eb7eb7a7d6fdp-2, 0x1.625c6c52c4b8ep-2, 0x1.cb610e5396c22p-1, +0x1.0b0e4242161c8p-3, 0x1.391174367222fp-1, 0x1.4b6c7bc696d8fp-1, 0x1.abe7b13357cf6p-3, +0x1.70f1a3c2e1e34p-2, 0x1.3ccf3f3e799e8p-1, 0x1.ef71bb7bdee37p-1, 0x1.9f3197e33e633p-3, +0x1.f79b6cb7ef36ep-1, 0x1.bd05c9537a0b9p-2, 0x1.27892ce24f126p-4, 0x1.b359a04b66b34p-2, +0x1.156622022acc4p-2, 0x1.81def53303bdfp-3, 0x1.70c1dd02e183cp-6, 0x1.68a94662d1529p-1, +0x1.41960a62832c1p-2, 0x1.922b198324563p-3, 0x1.faa4bc5bf5498p-2, 0x1.daef1f03b5de4p-1, +0x1.ad4f0c3b5a9e2p-2, 0x1.2ec404725d881p-1, 0x1.939dde2b273bcp-2, 0x1.a0f6243b41ec5p-1, +0x1.7f4b7f4afe97p-1, 0x1.5216f232a42dep-1, 0x1.1d0218e63a043p-1, 0x1.6af946d2d5f29p-3, +0x1.f172e7efe2e5dp-1, 0x1.ce304f139c60ap-1, 0x1.30fb004261f6p-4, 0x1.a1b3c3e343678p-4, +0x1.0741c3460e838p-1, 0x1.718bdbcee317bp-1, 0x1.3e60c9927cc19p-2, 0x1.bfba95277f753p-1, +0x1.5cb63612b96c7p-2, 0x1.1d44408a3a888p-2, 0x1.3c37d8e2786fbp-4, 0x1.4bed0f7a97da2p-2, +0x1.6d2504eeda4a1p-1, 0x1.31e082e263c1p-3, 0x1.7fa357e6ff46bp-1, 0x1.f7d815efefb03p-1, +0x1.59dfbc12b3bf8p-2, 0x1.8b2966cf1652dp-1, 0x1.60815c4ec102cp-1, 0x1.4dbae33a9b75cp-1, +0x1.efb42d33df686p-1, 0x1.774ee9f2ee9ddp-3, 0x1.28aa023a5154p-1, 0x1.8cb7669b196edp-2, +0x1.8c97beef192f8p-1, 0x1.f278f14fe4f1ep-1, 0x1.9d475e133a8ecp-3, 0x1.0be33e3617c68p-1, +0x1.448fe37e891fcp-1, 0x1.8453f06f08a7ep-1, 0x1.66a18feecd432p-1, 0x1.3602cb6a6c059p-1, +0x1.52843f7ea5088p-1, 0x1.8cc0eff71981ep-1, 0x1.6a3943e6d4728p-1, 0x1.67180b02ce301p-3, +0x1.fc999783f9333p-2, 0x1.2d3515825a6a3p-6, 0x1.98097e433013p-5, 0x1.aca7e6cf594fdp-1, +0x1.301791e2602f2p-2, 0x1.041e4c12083cap-3, 0x1.4a79ba2294f37p-3, 0x1.4c3377029866fp-7, +0x1.1aff677a35fedp-2, 0x1.d241c66fa4839p-1, 0x1.fd08e3cffa11cp-1, 0x1.3a6f91c674df2p-1, +0x1.5d6b2d3ebad66p-1, 0x1.5d8a401abb148p-1, 0x1.1054e9fa20a9dp-2, 0x1.4d1f5a6e9a3ebp-1, +0x1.bb5dfa9776bbfp-1, 0x1.b0d4773761a8fp-1, 0x1.37b0db826f61bp-5, 0x1.47f5b9828feb7p-1, +0x1.a34d6883469adp-1, 0x1.eb3394f3d6673p-3, 0x1.4f63dee29ec7cp-3, 0x1.cfba97fb9f753p-2, +0x1.ff20d5abfe41bp-1, 0x1.ba7a87a774f51p-1, 0x1.de017643bc02fp-5, 0x1.51a51526a34a3p-1, +0x1.473b779a8e76fp-1, 0x1.88195b4b1032bp-1, 0x1.ab6b17e756d63p-1, 0x1.16210d622c422p-3, +0x1.918303fb2306p-1, 0x1.c4ebafcf89d76p-1, 0x1.f2302a27e4605p-1, 0x1.4c76674298ecdp-4, +0x1.7cd0b402f9a17p-7, 0x1.133a62c22674cp-3, 0x1.75fcd642ebf9bp-4, 0x1.26e5ed1a4dcbep-2, +0x1.7105f1c2e20bep-5, 0x1.5e43f4a2bc87fp-4, 0x1.cde288579bc51p-1, 0x1.747b8c5ae8f72p-1, +0x1.8952beaf12a58p-1, 0x1.5833f542b067fp-3, 0x1.8335cd8b066bap-2, 0x1.44b0b94689617p-1, +0x1.b85d220370ba4p-7, 0x1.aa2be8fb5457dp-2, 0x1.194ce58a3299dp-2, 0x1.aa2edd0b545dcp-1, +0x1.4fe2d9be9fc5bp-1, 0x1.c0fed4fb81fdbp-2, 0x1.241852124830ap-2, 0x1.4f03af669e076p-1, +0x1.35f3e4426be7dp-2, 0x1.5fd880dabfb1p-2, 0x1.4151891a82a31p-2, 0x1.e23569bbc46adp-1, +0x1.c02cddc38059cp-4, 0x1.304f71c2609eep-3, 0x1.3ded68a27bdadp-4, 0x1.c9889fb393114p-1, +0x1.0ff8c3c21ff18p-5, 0x1.9edd73833dbaep-5, 0x1.f3176c9be62eep-1, 0x1.6f2cf0c2de59ep-5, +0x1.7af1bfa2f5e38p-3, 0x1.0eb83b021d707p-4, 0x1.54cb8b3aa9971p-2, 0x1.d7333c23ae668p-3, +0x1.367e17d26cfc3p-3, 0x1.e12137c3c2427p-3, 0x1.ea485b63d490bp-1, 0x1.d6f244a7ade49p-1, +0x1.9caa968339553p-2, 0x1.57c68452af8d1p-2, 0x1.1ba2fdea3746p-1, 0x1.aa6d7f9354dbp-2, +0x1.80f936a701f27p-1, 0x1.a84970af5092ep-1, 0x1.fd967353fb2cep-3, 0x1.a1b820c343704p-2, +0x1.1191b65a23237p-2, 0x1.1171c5de22e39p-1, 0x1.fdfbfc83fbf8p-5, 0x1.23c2cd4e4785ap-1, +0x1.c15e064b82bc1p-1, 0x1.811108ab02221p-2, 0x1.05f8370a0bf07p-1, 0x1.f963a203f2c74p-1, +0x1.0c9c60c61938cp-1, 0x1.2db5e41e5b6bdp-1, 0x1.c2ec41b385d88p-1, 0x1.1d9bed063b37ep-1, +0x1.47a3bb568f477p-1, 0x1.b603ae4f6c076p-1, 0x1.348ebc12691d8p-1, 0x1.a6602b434cc05p-1, +0x1.d7dab5afafb57p-1, 0x1.def481afbde9p-1, 0x1.c2cfa483859f5p-5, 0x1.2bd1dd2257a3cp-4, +0x1.5cf33e72b9e68p-3, 0x1.9d556a033aaadp-7, 0x1.fc6c804bf8d9p-1, 0x1.25921ae24b243p-1, +0x1.64b12fa2c9626p-2, 0x1.180f7e32301fp-1, 0x1.fac8daabf591bp-1, 0x1.9a8e73c3351cep-4, +0x1.80b1ddbb0163cp-2, 0x1.e8b9ddf3d173cp-3, 0x1.042ddeda085bcp-1, 0x1.4921ca0a92439p-1, +0x1.8ba03d5b17408p-1, 0x1.240d9ea2481b4p-1, 0x1.b3925d636724cp-3, 0x1.4cfe43a699fc8p-1, +0x1.e49622f7c92c4p-1, 0x1.72dcce62e5b9ap-1, 0x1.4661e5a68cc3dp-1, 0x1.e265077bc4ca1p-2, +0x1.412564fa824adp-2, 0x1.094e275a129c5p-1, 0x1.d9ce1803b39c3p-6, 0x1.e8366dd3d06cep-1, +0x1.7ea3ab4afd475p-2, 0x1.435d2cd286ba6p-1, 0x1.8e9699131d2d3p-1, 0x1.2e5916a25cb23p-2, +0x1.2251ae8244a36p-1, 0x1.aac3935b55872p-1, 0x1.794d8deaf29b2p-2, 0x1.798e7e1ef31dp-1, +0x1.b138e9076271dp-1, 0x1.72268e7ae44d2p-2, 0x1.3e4131fa7c826p-2, 0x1.8e4603531c8cp-3, +0x1.d122c56fa2459p-1, 0x1.33d2e75267a5dp-2, 0x1.2dc69e9a5b8d4p-2, 0x1.22f7689a45eedp-2, +0x1.1417eb26282fdp-1, 0x1.9b112e2b36226p-1, 0x1.da9d7e57b53bp-1, 0x1.3f7051027ee0ap-2, +0x1.7e3d9992fc7b3p-2, 0x1.1e0856b23c10bp-3, 0x1.ecb66c27d96cep-1, 0x1.4769df828ed3cp-2, +0x1.ba5ee40f74bddp-1, 0x1.331851ca6630ap-1, 0x1.94e7737f29ceep-1, 0x1.6bc65a22d78cbp-3, +0x1.e333c903c6679p-4, 0x1.a3b5e43f476bdp-1, 0x1.0ca0117219402p-3, 0x1.f7709d8beee14p-2, +0x1.ce26221b9c4c4p-2, 0x1.d1be9d6fa37d4p-1, 0x1.92e4da1b25c9bp-1, 0x1.2c97f182592fep-6, +0x1.7c8230caf9046p-1, 0x1.3e2e84327c5d1p-3, 0x1.82f33daf05e68p-1, 0x1.2dbb19ce5b763p-1, +0x1.089ee84e113ddp-1, 0x1.109eb542213d7p-4, 0x1.914c9aa322993p-1, 0x1.b3835b736706bp-2, +0x1.77fa94a2eff53p-2, 0x1.417f4f8282feap-4, 0x1.6b3d6206d67acp-1, 0x1.d015357ba02a7p-1, +0x1.c341181b86823p-1, 0x1.45dae05e8bb5cp-1, 0x1.bf3577e37e6afp-3, 0x1.04bfc9c2097f9p-2, +0x1.8d5cf60b1ab9fp-1, 0x1.720f2872e41e5p-3, 0x1.2614d4a24c29bp-1, 0x1.47bbda1a8f77bp-1, +0x1.8f9c1be71f383p-1, 0x1.75f8903aebf12p-2, 0x1.a2ad70a3455aep-1, 0x1.cc02950b98053p-1, +0x1.7ac8b162f5916p-3, 0x1.e5d574ffcbaafp-1, 0x1.8f75c79b1eeb9p-2, 0x1.45c53d6a8b8a8p-1, +0x1.b794126f6f282p-1, 0x1.6a7ef792d4fdfp-3, 0x1.4f29fcf69e54p-1, 0x1.34164336682c8p-1, +0x1.5456bdeaa8ad8p-2, 0x1.a43a75434874fp-2, 0x1.874574030e8afp-3, 0x1.b2ca474365949p-1, +0x1.e862229bd0c44p-2, 0x1.f31df7a3e63bfp-1, 0x1.1917e9f2322fdp-2, 0x1.b02e5b9f605cbp-1, +0x1.b4de190369bc3p-5, 0x1.f7c95703ef92bp-1, 0x1.8043911700872p-1, 0x1.de8ef9abbd1dfp-1, +0x1.3da4375e7b487p-1, 0x1.f010ef0fe021ep-1, 0x1.83bb7a330776fp-3, 0x1.96025acb2c04bp-2, +0x1.3252e4a264a5dp-3, 0x1.8703b32f0e076p-1, 0x1.2bd077c257a0fp-5, 0x1.dc30d513b861bp-1, +0x1.07ffed320fffep-3, 0x1.b56a78236ad4fp-1, 0x1.a8336a1b5066dp-1, 0x1.41644f4a82c8ap-2, +0x1.9b3fed1f367fep-1, 0x1.bfb937937f727p-3, 0x1.e677650fcceedp-1, 0x1.52d3ff8aa5a8p-1, +0x1.951c179b2a383p-2, 0x1.35a162066b42cp-1, 0x1.0dd4857a1ba91p-2, 0x1.74b96ac2e972dp-1, +0x1.efa72903df4e5p-7, 0x1.d1773f7ba2ee8p-2, 0x1.2783b2024f076p-1, 0x1.f7df5be3efbebp-2, +0x1.b7b32ec36f666p-2, 0x1.b40fa6fb681f5p-1, 0x1.583c1322b0782p-2, 0x1.ee4ef1e3dc9dep-2, +0x1.abd8fdfb57b2p-1, 0x1.630cd522c619bp-4, 0x1.ab6ce53b56d9dp-2, 0x1.d2fa6aaba5f4dp-2, +0x1.c7289b438e513p-5, 0x1.36a5512a6d4aap-1, 0x1.b47e62bf68fccp-1, 0x1.a41d0b73483a1p-3, +0x1.7b5208aaf6a41p-2, 0x1.c73b6a3b8e76dp-1, 0x1.14e05fb229c0cp-3, 0x1.ff51ff43fea4p-2, +0x1.7ca5e25af94bcp-1, 0x1.ed6b8207dad7p-1, 0x1.a05b274b40b65p-1, 0x1.17e5cf7a2fcbap-1, +0x1.75673fb2eace8p-3, 0x1.86d28c570da52p-1, 0x1.aae73c0355ce8p-3, 0x1.27e7dbba4fcfbp-1, +0x1.78e7dcb2f1cfcp-2, 0x1.e3482383c6904p-2, 0x1.39428cf272852p-2, 0x1.8865160310ca3p-2, +0x1.da5fb17fb4bf6p-1, 0x1.c424f87b8849fp-1, 0x1.c02238f380447p-1, 0x1.6c7291bad8e52p-2, +0x1.78349f72f0694p-1, 0x1.b1010a0362021p-3, 0x1.ad60c1d35ac18p-1, 0x1.240d9d6e481b4p-1, +0x1.3143ba5262877p-2, 0x1.062e68da0c5cdp-2, 0x1.b15a580362b4bp-6, 0x1.6a28cdbad451ap-2, +0x1.b9bc859773791p-1, 0x1.c209357f84127p-1, 0x1.1e1ba9ba3c375p-1, 0x1.dd9627a3bb2c5p-3, +0x1.89449fbb12894p-1, 0x1.6353c1aac6a78p-1, 0x1.770e898eee1d1p-1, 0x1.05ea82120bd5p-1, +0x1.50bf43aea17e8p-1, 0x1.1769b0d62ed36p-1, 0x1.dd051883ba0a3p-5, 0x1.ae19139b5c322p-1, +0x1.3c787a5278f0fp-2, 0x1.1114411a22288p-2, 0x1.ac01dea35803cp-2, 0x1.5ab02b86b5605p-1, +0x1.7a2e324ef45c6p-1, 0x1.72a235cae5447p-1, 0x1.ee2b6843dc56dp-5, 0x1.548de3caa91bcp-1, +0x1.36c72e426d8e6p-1, 0x1.df04ef77be09ep-1, 0x1.58e59502b1cb3p-6, 0x1.5df79b6abbef3p-2, +0x1.2d14c7e25a299p-3, 0x1.b827ee7b704fep-1, 0x1.d3096b23a612dp-1, 0x1.c7ce1e438f9c4p-2, +0x1.d9f91723b3f23p-4, 0x1.e0943de3c1288p-1, 0x1.98fb75ff31f6fp-1, 0x1.f4fba87be9f75p-1, +0x1.a29d7363453aep-1, 0x1.6e2e3f6adc5c8p-2, 0x1.b184c98363099p-3, 0x1.2be2131a57c42p-1, +0x1.a6ae15c34d5c3p-5, 0x1.e36fbbefc6df7p-1, 0x1.8e64a9431cc95p-4, 0x1.6b2a250ed6545p-1, +0x1.f5b2d983eb65bp-2, 0x1.3e739ad27ce73p-3, 0x1.194338a632867p-1, 0x1.9915a9ef322b5p-1, +0x1.b04e0e83609c2p-2, 0x1.ef4427fbde885p-1, 0x1.e78baae3cf175p-2, 0x1.4954e63292a9dp-3, +0x1.61e65dc2c3cccp-1, 0x1.12a88bf625511p-1, 0x1.a6e31d574dc64p-1, 0x1.315b180a62b63p-2, +0x1.e35af6d3c6b5fp-2, 0x1.b1aa49ff63549p-1, 0x1.47a959ba8f52bp-1, 0x1.3cf2ad6279e56p-1, +0x1.69d23876d3a47p-1, 0x1.1ab2c4da35659p-1, 0x1.06cde4020d9bdp-4, 0x1.a5115b5b4a22bp-1, +0x1.f68e0573ed1c1p-2, 0x1.b9d5327f73aa6p-1, 0x1.9a0d03d3341ap-1, 0x1.3bc8ec327791ep-2, +0x1.c3b148d387629p-3, 0x1.9b8d8d03371b2p-7, 0x1.c9c68933938d1p-1, 0x1.16ae67222d5cdp-2, +0x1.e9ddf223d3bbep-1, 0x1.fb931e5ff7264p-1, 0x1.f681589fed02bp-1, 0x1.c96ebdcb92dd8p-2, +0x1.2cc0144259803p-3, 0x1.0fc491461f892p-1, 0x1.f7342343ee684p-3, 0x1.23570c5246ae2p-1, +0x1.fe11727bfc22ep-2, 0x1.7192de42e325cp-1, 0x1.75ac45deeb589p-1, 0x1.83bc5bf30778bp-3, +0x1.0876d46a10edbp-2, 0x1.1c8f6332391ecp-1, 0x1.f3394603e6729p-2, 0x1.75e8e59eebd1dp-1, +0x1.9c735a6338e6bp-2, 0x1.0517f2e20a2fep-3, 0x1.65b72602cb6e5p-2, 0x1.c05f2d2380be6p-4, +0x1.5bf8c192b7f18p-1, 0x1.a76a9f034ed54p-2, 0x1.dd1d4103ba3a8p-1, 0x1.5cff1132b9fe2p-3, +0x1.1b150402362a1p-2, 0x1.772a44d2ee549p-1, 0x1.ea4874cbd490fp-2, 0x1.fceda86bf9db5p-2, +0x1.7d987b06fb30fp-1, 0x1.7dd58732fbab1p-2, 0x1.89ce07c7139c1p-1, 0x1.67766d2aceecep-1, +0x1.74fbc3eae9f78p-2, 0x1.804f6067009ecp-1, 0x1.30b73032616e6p-3, 0x1.05ade7060b5bdp-1, +0x1.2027e352404fcp-2, 0x1.93f5a9bb27eb5p-2, 0x1.48279aa2904f3p-4, 0x1.8f1caae71e395p-1, +0x1.dc6d98e3b8db3p-4, 0x1.9eb139333d627p-1, 0x1.f00bc1e3e0178p-1, 0x1.7f923aa2ff247p-2, +0x1.768138c2ed027p-2, 0x1.d350c9cba6a19p-2, 0x1.ad9017635b203p-4, 0x1.897a499312f49p-1, +0x1.2aee619e55dccp-1, 0x1.d11b2bdba2365p-2, 0x1.c1862f3b830c6p-1, 0x1.0dce46621b9c9p-2, +0x1.bc42e5737885dp-1, 0x1.9ea3703b3d46ep-1, 0x1.bc4dcefb789bap-2, 0x1.27359dc24e6b4p-3, +0x1.15cdb50a2b9b7p-1, 0x1.d34b21e3a6964p-1, 0x1.48443ba690887p-1, 0x1.26cc60224d98cp-2, +0x1.246bcaf248d79p-2, 0x1.a42486d348491p-2, 0x1.fadc9d3bf5b94p-1, 0x1.4cb3c76e99679p-1, +0x1.49868f32930d2p-3, 0x1.1c29a51238535p-3, 0x1.4986b9c2930d7p-3, 0x1.c4eb2aeb89d65p-2, +0x1.11053e22220a8p-1, 0x1.ed9a8713db351p-3, 0x1.c64901638c92p-3, 0x1.4c92f13e9925ep-1, +0x1.a17daf4342fb6p-5, 0x1.867808f30cf01p-3, 0x1.8b81d1831703ap-6, 0x1.aab0eeb35561ep-2, +0x1.4b466722968cdp-1, 0x1.083845e210709p-3, 0x1.7b4b03a2f696p-3, 0x1.d8d322f3b1a64p-3, +0x1.2a9ba76a55375p-1, 0x1.02c78102058fp-4, 0x1.fa37d7dbf46fbp-2, 0x1.cdbd19b39b7a3p-2, +0x1.befc605b7df8cp-1, 0x1.db42d36bb685ap-1, 0x1.30abf44a6157fp-1, 0x1.a9942acb53285p-2, +0x1.ae8df54f5d1bfp-1, 0x1.e3c0bfb3c7818p-3, 0x1.68304576d0609p-1, 0x1.030f6b12061edp-3, +0x1.4b0273569604ep-1, 0x1.630ce2aec619cp-1, 0x1.8d77a2371aef4p-1, 0x1.9d6417273ac83p-1, +0x1.aa174bf3542e9p-1, 0x1.dfd950a7bfb2ap-1, 0x1.ff66b263fecd6p-3, 0x1.76391422ec723p-2, +0x1.6cffc9b2d9ff9p-3, 0x1.e2d7d9ebc5afbp-2, 0x1.ebded303d7bdap-7, 0x1.d55f3583aabe7p-3, +0x1.5309ef32a613ep-1, 0x1.40b89d8281714p-5, 0x1.4ab044ba95609p-1, 0x1.3ca0aca279416p-2, +0x1.58666d42b0ccep-3, 0x1.a98305a753061p-1, 0x1.14851f0e290a4p-1, 0x1.80b542bb016a8p-1, +0x1.c9dbf5c793b7fp-1, 0x1.1a10afc234216p-5, 0x1.9e4f3e433c9e8p-3, 0x1.88d8562311b0bp-1, +0x1.ece3de67d9c7cp-1, 0x1.983fc3db307f8p-1, 0x1.7689ae12ed136p-3, 0x1.9b71d3b336e3ap-1, +0x1.12ff3c4225fe8p-5, 0x1.c5d2b0fb8ba56p-1, 0x1.dc35ae7bb86b6p-1, 0x1.5c32671eb864dp-1, +0x1.28df93a651bf2p-1, 0x1.69ad50aed35aap-1, 0x1.f32cfc83e65ap-2, 0x1.a5edbf2b4bdb8p-2, +0x1.4986a152930d4p-1, 0x1.79702adaf2e05p-1, 0x1.8e1369a71c26dp-1, 0x1.a4c693bf498d2p-1, +0x1.ab705f3356e0cp-3, 0x1.95c2e4f32b85dp-1, 0x1.a1e6120343cc2p-5, 0x1.bde606ff7bcc1p-1, +0x1.a9ce6ecb539cep-1, 0x1.64cea5dac99d5p-1, 0x1.70d97532e1b2fp-3, 0x1.ffe80a1bffd01p-1, +0x1.0e51ab7e1ca35p-1, 0x1.70bb7c5ee177p-1, 0x1.809d4cd7013aap-1, 0x1.b05b428b60b68p-2, +0x1.825c875b04b91p-1, 0x1.e8311c67d0624p-1, 0x1.8417dd93082fcp-3, 0x1.6f4065bede80dp-1, +0x1.8070e04300e1cp-1, 0x1.7d50c5d2faa19p-2, 0x1.0ab2397215647p-1, 0x1.91a0d4072341bp-1, +0x1.08f627c211ec5p-2, 0x1.cdcfcfd39b9fap-2, 0x1.dba67643b74cfp-2, 0x1.ad5aa7875ab55p-1, +0x1.4254e25284a9cp-3, 0x1.e769b963ced37p-1, 0x1.00a30e3201462p-2, 0x1.9a1bd9e73437bp-1, +0x1.60d9e43ec1b3dp-1, 0x1.cc9e1783993c3p-6, 0x1.3ee26da67dc4ep-1, 0x1.cbb5fc0b976cp-1, +0x1.a427d5af484fbp-1, 0x1.5900cec6b201ap-1, 0x1.899c030b1338p-1, 0x1.4df644769bec9p-1, +0x1.7b9ee93af73ddp-2, 0x1.e5d26057cba4cp-1, 0x1.4dde4e8e9bbcap-1, 0x1.cc21201f98424p-1, +0x1.568ddcb2ad1bcp-1, 0x1.9cf736c339ee7p-2, 0x1.489d82c2913bp-2, 0x1.b1d4c81363a99p-2, +0x1.6d596f92dab2ep-2, 0x1.0554b8c60aa97p-1, 0x1.20ab272241565p-3, 0x1.b8ecc04371d98p-4, +0x1.c3fd1baf87fa3p-1, 0x1.52dd033aa5bap-1, 0x1.c8be6c0f917cep-1, 0x1.21e0be3243c18p-3, +0x1.ce2759039c4ebp-4, 0x1.6d234e62da46ap-2, 0x1.f5d2d713eba5bp-1, 0x1.14b4476a29689p-2, +0x1.3bf6c12277ed8p-2, 0x1.d89178a3b122fp-3, 0x1.23afecc2475fep-4, 0x1.fed544cffdaa9p-1, +0x1.09129dca12254p-2, 0x1.63586b3ec6b0dp-1, 0x1.ca8b40db95168p-1, 0x1.458924828b125p-4, +0x1.78b27402f164fp-2, 0x1.542743e2a84e8p-1, 0x1.76a76906ed4edp-1, 0x1.7a28aea2f4516p-1, +0x1.39f9a43673f35p-1, 0x1.890b6f231216ep-2, 0x1.4649cebe8c93ap-1, 0x1.210f01d2421ep-2, +0x1.930152f72602ap-1, 0x1.ea98901fd5312p-1, 0x1.6971e4f2d2e3dp-1, 0x1.26b82af24d705p-3, +0x1.dfda91c3bfb52p-2, 0x1.b19caebb63396p-1, 0x1.0197458a032e9p-2, 0x1.67d4c91acfa99p-2, +0x1.0479b1f208f36p-1, 0x1.26283b424c507p-3, 0x1.f8c52833f18a5p-2, 0x1.3e3e9d127c7d4p-1, +0x1.001bb60200377p-1, 0x1.e46ad653c8d5bp-2, 0x1.c898c0c791318p-1, 0x1.9e1716973c2e3p-1, +0x1.6859c952d0b39p-1, 0x1.ed0ebe63da1d8p-1, 0x1.9cec5b6339d8bp-1, 0x1.ece31837d9c63p-1, +0x1.5067299ea0ce5p-1, 0x1.67779c3aceef4p-1, 0x1.5943cc42b287ap-5, 0x1.980c74033018fp-6, +0x1.773dc032ee7b8p-2, 0x1.8c3ba5cb18775p-1, 0x1.86e912430dd22p-1, 0x1.f5988453eb311p-1, +0x1.43057562860afp-3, 0x1.9a65c1fb34cb8p-2, 0x1.0c400a7218801p-2, 0x1.e3c2b04fc7856p-1, +0x1.6f96e232df2dcp-2, 0x1.ef91ea2bdf23dp-1, 0x1.6b85d842d70bbp-4, 0x1.a7b8b9fb4f717p-1, +0x1.a12e98e7425d3p-1, 0x1.5c78bb9ab8f17p-2, 0x1.6e8c7a12dd18fp-3, 0x1.4b5095aa96a13p-2, +0x1.ef8cd943df19bp-2, 0x1.5805b29eb00b6p-1, 0x1.e3e6e7ebc7cddp-1, 0x1.f7e222a3efc44p-1, +0x1.28ec771251d8fp-3, 0x1.ac7fa8af58ff5p-1, 0x1.95f939372bf27p-1, 0x1.b294e7176529dp-1, +0x1.998e670f331cdp-1, 0x1.32e5949a65cb3p-1, 0x1.9f77ff4b3efp-1, 0x1.d3eb215ba7d64p-2, +0x1.34ba61a26974cp-2, 0x1.b50c3c0f6a188p-1, 0x1.ed6be89bdad7dp-2, 0x1.55fc10eeabf82p-1, +0x1.4147e1d6828fcp-1, 0x1.f67c1a33ecf83p-3, 0x1.4b94953e97293p-1, 0x1.92093f2f24128p-1, +0x1.4ad1e78a95a3dp-1, 0x1.d1b49a77a3693p-1, 0x1.75cbef7eeb97ep-1, 0x1.4eac50029d58ap-8, +0x1.c146849f828d1p-1, 0x1.a33caa8746795p-1, 0x1.aa56129b54ac2p-1, 0x1.62751d82c4ea4p-1, +0x1.45e421528bc84p-3, 0x1.7e4c4702fc989p-7, 0x1.03ad0b02075a1p-6, 0x1.493f74f6927efp-1, +0x1.5dfee3babbfdcp-1, 0x1.ec045043d808ap-1, 0x1.4121979682433p-1, 0x1.a83a017f5074p-1, +0x1.9883f8ef3107fp-1, 0x1.ae35a19b5c6b4p-2, 0x1.5acee892b59ddp-1, 0x1.32125ffe6424cp-1, +0x1.400cac8280196p-6, 0x1.f48dcfb3e91bap-2, 0x1.c07f0a8380fe1p-5, 0x1.48bb2c6a91766p-2, +0x1.5ea647cabd4c9p-2, 0x1.12bde4f6257bdp-1, 0x1.fa59a723f4b35p-1, 0x1.f09b05bbe1361p-1, +0x1.905ceb8320b9dp-1, 0x1.45ee3c5e8bdc8p-1, 0x1.82a444e705489p-1, 0x1.b65da6136cbb5p-2, +0x1.17a2d6d22f45bp-1, 0x1.f0e068c3e1c0dp-2, 0x1.bb9857537730bp-2, 0x1.b1d2b6e363a57p-2, +0x1.3759bdd26eb38p-2, 0x1.10447c822089p-2, 0x1.daf3c783b5e79p-4, 0x1.da4bce7bb497ap-2, +0x1.1c36deba386dcp-2, 0x1.0def85221bdf1p-3, 0x1.b32ae1836655cp-4, 0x1.ec1a5317d834ap-1, +0x1.7c018c42f8032p-4, 0x1.7786f3c6ef0dep-1, 0x1.9454549328a8bp-1, 0x1.c8042a7b90085p-1, +0x1.3a871242750e2p-3, 0x1.de467a43bc8cfp-2, 0x1.f42d14ebe85a3p-2, 0x1.6288a7d2c5115p-3, +0x1.e96a24fbd2d45p-1, 0x1.161e7b1e2c3cfp-1, 0x1.f9ff805bf3ffp-2, 0x1.317a91ba62f52p-2, +0x1.46e300828dc6p-4, 0x1.eeb2ce9bdd65ap-2, 0x1.12b09d2a25614p-2, 0x1.b9394b9372729p-1, +0x1.ea3d1d63d47a4p-4, 0x1.7f926f02ff24ep-6, 0x1.28d03d3251a08p-2, 0x1.54ea7a7ea9d4fp-1, +0x1.046cc7de08d99p-1, 0x1.72344a42e4689p-1, 0x1.6e9eaf62dd3d6p-4, 0x1.a019a6c740335p-1, +0x1.fa568883f4ad1p-1, 0x1.a4c93b8349927p-3, 0x1.1a7f1c0234fe4p-2, 0x1.10e3efba21c7ep-2, +0x1.595c6052b2b8cp-2, 0x1.8749d4630e93bp-2, 0x1.d2312bc3a4625p-3, 0x1.b85cc36b70b98p-2, +0x1.d95eefa3b2bdep-4, 0x1.1c13f0023827ep-6, 0x1.4865185a90ca3p-2, 0x1.139b451227369p-2, +0x1.f007b943e00f7p-2, 0x1.9e4916a33c923p-1, 0x1.c4df98fb89bf3p-2, 0x1.c2dc033385b8p-2, +0x1.68cf237ad19e4p-2, 0x1.df6f8cabbedf2p-1, 0x1.7a2b4a76f4569p-1, 0x1.ba87e39b750fcp-2, +0x1.ad91e7f35b23dp-2, 0x1.c1cc840383991p-8, 0x1.2cfa7aba59f4fp-2, 0x1.141097a628213p-1, +0x1.f0059003e00b2p-6, 0x1.2ae55bf655cabp-1, 0x1.a3ec488347d89p-3, 0x1.13ecf45e27d9fp-1, +0x1.3a334c6a7466ap-2, 0x1.2d9dd0225b3bap-2, 0x1.680d3642d01a7p-2, 0x1.2ee05d6a5dc0cp-2, +0x1.000136f200027p-1, 0x1.41462922828c5p-1, 0x1.1fe226923fc45p-1, 0x1.acaf671b595edp-1, +0x1.3ac4d4027589bp-7, 0x1.946e718328dcep-1, 0x1.11bb919a23772p-2, 0x1.005bc52200b79p-3, +0x1.9d4f11033a9e2p-1, 0x1.2d1054fa5a20bp-1, 0x1.93c927a327925p-2, 0x1.2aa5db42554bbp-2, +0x1.96b2d7332d65bp-2, 0x1.ac54604f58a8cp-1, 0x1.76c0ef3aed81ep-1, 0x1.7fc0fd56ff82p-1, +0x1.8bc3ecfb1787ep-1, 0x1.e1d8735bc3b0ep-2, 0x1.7413bc82e8278p-3, 0x1.8a3383c31467p-3, +0x1.e8dfa56bd1bf5p-2, 0x1.e70458fbce08bp-2, 0x1.769d7896ed3afp-1, 0x1.03efff3607ep-1, +0x1.e6788703ccf11p-5, 0x1.df988ab7bf311p-1, 0x1.7dcf3942fb9e7p-5, 0x1.77025d4aee04cp-2, +0x1.d99dcb13b33b9p-3, 0x1.97c71d6b2f8e4p-2, 0x1.52f15d5aa5e2cp-1, 0x1.7668a9b6ecd15p-1, +0x1.a536fb034a6dfp-6, 0x1.cb4e0fa3969c2p-3, 0x1.231810d246302p-1, 0x1.214cb28242996p-5, +0x1.d07d5a03a0fabp-7, 0x1.abf5d99f57ebbp-1, 0x1.48aef1c2915dep-3, 0x1.a491066b49221p-1, +0x1.b20c5d336418cp-2, 0x1.1c1050423820ap-1, 0x1.cf1fa0439e3f4p-4, 0x1.a45f9a3348bf3p-1, +0x1.90c961232192cp-2, 0x1.b0a4e3436149cp-1, 0x1.2420978a48413p-1, 0x1.50a27622a144fp-3, +0x1.432239da86447p-2, 0x1.812586ab024b1p-1, 0x1.6d6afcf2dad6p-2, 0x1.9600efa32c01ep-1, +0x1.d29ecca3a53dap-3, 0x1.6a97b862d52f7p-4, 0x1.33e1ddb267c3cp-2, 0x1.261e77324c3cfp-2, +0x1.9d7038033ae07p-6, 0x1.639bc4dac7379p-2, 0x1.4e906a429d20dp-1, 0x1.06a5e9120d4bdp-2, +0x1.7db17122fb62ep-1, 0x1.43038f3286072p-2, 0x1.f9bb9e3ff3774p-1, 0x1.8adb28fb15b65p-1, +0x1.14554b8628aa9p-1, 0x1.1cd3af0e39a76p-1, 0x1.9ceff42739dffp-1, 0x1.1b9740ee372e8p-1, +0x1.9193115b23262p-2, 0x1.ef1bb097de376p-1, 0x1.80508eb300a12p-2, 0x1.a1cfb747439f7p-1, +0x1.0b2c00da1658p-1, 0x1.f41876c3e830fp-2, 0x1.462f51768c5eap-1, 0x1.d390b16ba7216p-1, +0x1.55623d4aaac48p-2, 0x1.a93fa3f3527f4p-3, 0x1.3dca77827b94fp-4, 0x1.4c423b9298847p-1, +0x1.eb756fabd6eaep-1, 0x1.bcdd9ad379bb3p-2, 0x1.c486566b890cbp-2, 0x1.80748b4300e91p-3, +0x1.0bc1c47617839p-1, 0x1.7c341a0ef8683p-1, 0x1.e658bcd3ccb18p-2, 0x1.18ad4636315a9p-1, +0x1.700fe3c2e01fcp-4, 0x1.06f322a20de64p-3, 0x1.9c003abf38007p-1, 0x1.abb36d9b5766ep-1, +0x1.c67d208b8cfa4p-2, 0x1.95bbd8ff2b77bp-1, 0x1.368e96966d1d3p-1, 0x1.f793dbcbef27bp-1, +0x1.651f1012ca3e2p-2, 0x1.a6fd15734dfa3p-2, 0x1.132b1cb626564p-1, 0x1.7b5910b6f6b22p-1, +0x1.8534769b0a68fp-2, 0x1.d353640fa6a6dp-1, 0x1.1d28c7fa3a519p-1, 0x1.cdc63c279b8c8p-1, +0x1.9abf3ee3357e8p-2, 0x1.8d6065c31ac0dp-3, 0x1.a156ed8f42adep-1, 0x1.7810be16f0218p-1, +0x1.9b5004db36a01p-2, 0x1.c9103c7f92208p-1, 0x1.88a5f34b114bep-2, 0x1.723ae42ae475dp-2, +0x1.4efe13ca9dfc2p-2, 0x1.a69624db4d2c5p-1, 0x1.193a94e632753p-1, 0x1.b340ce5b6681ap-1, +0x1.22ca3ee645948p-1, 0x1.8cde6a0319bcdp-6, 0x1.97dc29232fb85p-2, 0x1.50cc3b5ea1987p-1, +0x1.388eefe2711dep-3, 0x1.9fb93d333f728p-3, 0x1.f8ff51f3f1feap-2, 0x1.31624c3e62c4ap-1, +0x1.fdaa284bfb545p-1, 0x1.9871fc6330e4p-4, 0x1.28f6280651ec5p-1, 0x1.607360aac0e6cp-2, +0x1.068cca460d199p-1, 0x1.e10a25e3c2145p-4, 0x1.5c960842b92c1p-4, 0x1.c9270593924e1p-1, +0x1.ee951903dd2a3p-6, 0x1.48bb890691771p-1, 0x1.96ed41bb2dda8p-1, 0x1.b9a8907373512p-2, +0x1.ac13a27758274p-1, 0x1.38442f4670886p-1, 0x1.53941932a7283p-3, 0x1.e6ee9383cddd2p-3, +0x1.01546bc602a8dp-1, 0x1.1937fff6327p-1, 0x1.32d916fa65b23p-1, 0x1.a8d375ab51a6fp-1, +0x1.7f9c499aff389p-2, 0x1.304eaf72609d6p-3, 0x1.5c144406b8289p-1, 0x1.e29863b7c530cp-1, +0x1.61ea7cb2c3d5p-3, 0x1.4012c4a280259p-4, 0x1.33649f1266c94p-1, 0x1.4d3cb6529a797p-2, +0x1.1fe14fc23fc2ap-2, 0x1.7f224042fe448p-4, 0x1.d800a767b0015p-1, 0x1.1b35a05a366b4p-2, +0x1.8bca1e5317944p-3, 0x1.00f6cf6e01edap-1, 0x1.3dd480827ba9p-1, 0x1.697f51dad2feap-1, +0x1.3d18142a7a303p-1, 0x1.6967418ad2ce8p-1, 0x1.32a6576e654cbp-1, 0x1.4c8cbcf299198p-1, +0x1.6445951ac88b3p-2, 0x1.9327324b264e6p-2, 0x1.4b08296296105p-4, 0x1.78d9b402f1b37p-3, +0x1.d7c86803af90dp-9, 0x1.f9182de3f2306p-3, 0x1.afe423cb5fc84p-2, 0x1.032c342e06587p-1, +0x1.977e0b6f2efc1p-1, 0x1.59651b82b2ca3p-6, 0x1.57ff53b2affeap-2, 0x1.5d30c0f2ba618p-3, +0x1.5b7b52e2b6f6ap-3, 0x1.027dbb8204fb7p-6, 0x1.cf249f839e494p-4, 0x1.5eb2e7d2bd65dp-2, +0x1.80b2338301646p-4, 0x1.6d493302da926p-1, 0x1.55f7cf12abefap-1, 0x1.800ddca3001bcp-2, +0x1.9d2d7b0f3a5afp-1, 0x1.2df876765bf0fp-1, 0x1.4da1be7e9b438p-1, 0x1.00150002002ap-12, +0x1.777a2f02eef46p-4, 0x1.16ec7dfa2dd9p-2, 0x1.699f547ed33ebp-1, 0x1.6c075a0ad80ebp-1, +0x1.f4dd808be9bbp-1, 0x1.388b57d27116bp-2, 0x1.71282dfae2506p-2, 0x1.4e00962a9c013p-2, +0x1.65d9450ecbb29p-1, 0x1.c3ea385387d47p-2, 0x1.0536b81a0a6d7p-1, 0x1.67b10d76cf622p-1, +0x1.603b27a2c0765p-1, 0x1.dd28c9ffba519p-1, 0x1.ab75069356ea1p-3, 0x1.ef726623dee4dp-2, +0x1.e7f3f2dbcfe7ep-1, 0x1.16dceb7e2db9dp-1, 0x1.4f05634e9e0acp-1, 0x1.f6963c83ed2c8p-4, +0x1.1ef0d95a3de1bp-1, 0x1.88e9f73f11d3fp-1, 0x1.dc5876f3b8b0fp-2, 0x1.4f071fca9e0e4p-1, +0x1.ec66547bd8ccbp-2, 0x1.10902a2221205p-3, 0x1.e1c1c303c3838p-6, 0x1.26c14a924d829p-2, +0x1.721c8102e439p-1, 0x1.5cafcc9ab95fap-1, 0x1.27014fda4e02ap-2, 0x1.a10bc6e342179p-1, +0x1.e8260b97d04c1p-1, 0x1.fd1ffc6bfa4p-1, 0x1.0d1320ee1a264p-1, 0x1.dd038c1fba072p-1, +0x1.32cb50a26596ap-2, 0x1.c5a737eb8b4e7p-1, 0x1.0807ae6a100f6p-2, 0x1.ff3eed5ffe7dep-1, +0x1.4f38a8229e715p-2, 0x1.893a8f4f12752p-1, 0x1.66effad2cddffp-1, 0x1.f5deec03ebbdep-7, +0x1.6663594accc6bp-1, 0x1.d1cd3c77a39a8p-1, 0x1.ff215d83fe42cp-2, 0x1.4e574c229caeap-1, +0x1.d1544fe3a2a8ap-2, 0x1.3a58483274b09p-3, 0x1.8d2a13b31a542p-1, 0x1.e6c05203cd80ap-7, +0x1.d780094baf001p-1, 0x1.ed593cb3dab28p-3, 0x1.56a22112ad444p-1, 0x1.9b66671336ccdp-2, +0x1.7ef4b36afde96p-2, 0x1.65b02f2ecb606p-1, 0x1.6113d8d2c227bp-1, 0x1.8cb6d5a3196dbp-4, +0x1.84bff78b097ffp-2, 0x1.f49480bfe929p-1, 0x1.d2a2a19ba5454p-1, 0x1.550c0eb2aa182p-2, +0x1.f1b47d27e369p-1, 0x1.bf6b850b7ed71p-2, 0x1.0f1326f21e265p-2, 0x1.16344aea2c689p-2, +0x1.4ab9f4da9573fp-2, 0x1.0b8d6aae171adp-1, 0x1.14b225a229645p-2, 0x1.4cf94e7e99f2ap-1, +0x1.298ff3f2531fep-2, 0x1.f1490da7e2922p-1, 0x1.54d0ca2ea9a19p-1, 0x1.fb2b5343f656ap-1, +0x1.c3164a1b862c9p-1, 0x1.5185e3c2a30bcp-3, 0x1.49829f6293054p-1, 0x1.5780e41aaf01dp-2, +0x1.45ef15fa8bde3p-2, 0x1.ad5966235ab2dp-2, 0x1.66b6e6aacd6ddp-2, 0x1.e9de5123d3bcap-3, +0x1.5203023ea406p-1, 0x1.3fb28d027f652p-6, 0x1.482ac7d290559p-1, 0x1.17d5bf422fab8p-5, +0x1.6fadc396df5b8p-1, 0x1.527d4142a4fa8p-2, 0x1.0c50daa218a1bp-3, 0x1.906dfac320dbfp-4, +0x1.3ba642c2774c8p-2, 0x1.5b6d8402b6db1p-5, 0x1.b9278d63724f2p-2, 0x1.1f0f3d0a3e1e8p-2, +0x1.ead9358bd5b27p-2, 0x1.641d5a2ac83abp-1, 0x1.1aa1c3fe35438p-1, 0x1.9ac9953335933p-1, +0x1.beab13537d562p-3, 0x1.a4fad6cf49f5bp-1, 0x1.cf85c75b9f0b9p-2, 0x1.0472bece08e58p-1, +0x1.9643e4732c87dp-1, 0x1.e49d6ee3c93aep-4, 0x1.ff3c241bfe785p-2, 0x1.595a2e8eb2b46p-1, +0x1.21ea4d9a43d4ap-2, 0x1.2482c5b249059p-3, 0x1.46a826028d505p-7, 0x1.33ecb1ca67d96p-1, +0x1.1fcd64823f9adp-1, 0x1.70ec27dae1d85p-2, 0x1.ae6446135cc89p-1, 0x1.c7419af38e833p-3, +0x1.84e750ab09ceap-2, 0x1.ed1e1bc3da3c3p-2, 0x1.069b85620d371p-2, 0x1.910b5f432216cp-4, +0x1.9fcdae873f9b6p-1, 0x1.8cc3f2bb1987ep-2, 0x1.90bcad0321796p-3, 0x1.ed067f23da0dp-4, +0x1.b831a33b70634p-2, 0x1.40c2f1f68185ep-1, 0x1.9a50dcd334a1cp-2, 0x1.d1856c67a30aep-1, +0x1.49c0983a93813p-2, 0x1.e7ca3267cf946p-1, 0x1.6c4f0196d89ep-1, 0x1.148b10f629162p-1, +0x1.8cc50937198a1p-1, 0x1.50479512a08f3p-3, 0x1.8fdcfc031fbap-5, 0x1.2308eda64611ep-1, +0x1.214b264242965p-2, 0x1.189be1d23137cp-1, 0x1.f18c70c3e318ep-3, 0x1.219ab9ee43357p-1, +0x1.61bc933ec3792p-1, 0x1.02fb799205f6fp-2, 0x1.561daed2ac3b6p-3, 0x1.0313ef7a0627ep-2, +0x1.39f3d0ba73e7ap-1, 0x1.f5d8e403ebb1dp-8, 0x1.e6b4bcfbcd698p-2, 0x1.fc67790ff8cefp-1, +0x1.f4f57f53e9ebp-2, 0x1.76a8212eed504p-1, 0x1.744727c2e88e5p-4, 0x1.3490dc5a6921cp-2, +0x1.e850d443d0a1bp-4, 0x1.257020724ae04p-2, 0x1.afd27c235fa5p-2, 0x1.1922ec2a3245ep-1, +0x1.d37b022fa6f6p-1, 0x1.a511ac7f4a236p-1, 0x1.d550b11baaa16p-2, 0x1.e16d3933c2da7p-3, +0x1.8cdbdee319b7cp-1, 0x1.5bdd6882b7badp-3, 0x1.8ce65f4319cccp-1, 0x1.19a0e8163341dp-1, +0x1.56127ecaac25p-2, 0x1.a5e42f034bc86p-1, 0x1.e54eade3ca9d6p-4, 0x1.3baed286775dap-1, +0x1.7d0021a2fa004p-2, 0x1.7219e3dae433cp-2, 0x1.752631c2ea4c6p-3, 0x1.01e5208203ca4p-4, +0x1.3a8aaeba75156p-1, 0x1.65a1f052cb43ep-2, 0x1.438d379a871a7p-2, 0x1.d1f9fdc3a3f4p-3, +0x1.6d7953e2daf2ap-2, 0x1.9520fa4b2a41fp-1, 0x1.c397e1f3872fcp-3, 0x1.b137699b626edp-1, +0x1.0bc91b7a17923p-1, 0x1.3eddbaea7dbb7p-2, 0x1.2dff5f225bfecp-3, 0x1.48d3360291a67p-1, +0x1.3226edb2644dep-1, 0x1.236915da46d23p-1, 0x1.87d888a30fb11p-3, 0x1.05a1efde0b43ep-1, +0x1.90f584ab21eb1p-2, 0x1.4c9e7ab6993cfp-1, 0x1.7dfd3e2afbfa8p-1, 0x1.555a84e2aab51p-3, +0x1.a395d4db472bbp-1, 0x1.0ae39d6a15c74p-1, 0x1.6ef7894eddef1p-1, 0x1.3a7c50f274f8ap-3, +0x1.618f98dac31f3p-2, 0x1.aba15f0b5742cp-1, 0x1.8a4de6c7149bdp-1, 0x1.6f47dd3ede8fcp-1, +0x1.92b943e325728p-3, 0x1.e7977337cf2eep-1, 0x1.8f84814f1f09p-1, 0x1.9f38ffb33e72p-1, +0x1.34d0d6ba69a1bp-2, 0x1.8a58e8e314b1dp-4, 0x1.3b77f20276efep-5, 0x1.5125154ea24a3p-1, +0x1.c66c17678cd83p-1, 0x1.093aef3a1275ep-2, 0x1.025c7eea04b9p-1, 0x1.a46a65bb48d4dp-2, +0x1.240c55164818bp-1, 0x1.4ddc56b29bb8bp-1, 0x1.b0868e03610d2p-5, 0x1.58cd0b12b19a1p-3, +0x1.c515b2238a2b6p-3, 0x1.f3fa2c23e7f46p-3, 0x1.5bd532a2b7aa6p-1, 0x1.39c02ee273806p-1, +0x1.c99d05c3933a1p-1, 0x1.b3a4e19b6749cp-2, 0x1.8f16d01b1e2dap-1, 0x1.6d32da9ada65bp-1, +0x1.e4b60e37c96c2p-1, 0x1.fc1cb2cbf8396p-2, 0x1.bbd1eed777a3ep-1, 0x1.2afbb54255f77p-2, +0x1.535f70e2a6beep-2, 0x1.461fd59a8c3fbp-1, 0x1.316df80262dbfp-7, 0x1.0e5e096a1cbc1p-1, +0x1.2db748d25b6e9p-1, 0x1.944a392f28947p-1, 0x1.5b2e1232b65c2p-2, 0x1.c81fb42f903f7p-1, +0x1.c595564b8b2abp-1, 0x1.829d1073053a2p-2, 0x1.1944c97e32899p-1, 0x1.8c016db31802ep-1, +0x1.45ebffd68bd8p-1, 0x1.ba14864374291p-5, 0x1.78da8232f1b5p-3, 0x1.a7e153a34fc2ap-3, +0x1.697d9f16d2fb4p-1, 0x1.e4fc25b3c9f85p-3, 0x1.80572f5b00ae6p-2, 0x1.dac30b9fb5861p-1, +0x1.ec7b28f3d8f65p-2, 0x1.c00ca50380195p-5, 0x1.14833a7e29067p-1, 0x1.7fb53472ff6a7p-2, +0x1.eba6763bd74cfp-2, 0x1.4734152a8e683p-2, 0x1.686ba682d0d75p-4, 0x1.b51292a36a252p-2, +0x1.a1a863ff4350cp-1, 0x1.e8df63a7d1becp-1, 0x1.700723f6e00e4p-1, 0x1.2d6071b25ac0ep-3, +0x1.2eff39425dfe7p-1, 0x1.74ccdbd6e999bp-1, 0x1.59b625d6b36c5p-1, 0x1.72da0842e5b41p-3, +0x1.09171502122e3p-1, 0x1.d34bbb03a6977p-7, 0x1.26b1b1e24d636p-4, 0x1.9d58d69b3ab1bp-2, +0x1.91376e4b226eep-2, 0x1.3e1affba7c36p-1, 0x1.6ab763f2d56ecp-3, 0x1.d0f6df03a1edcp-6, +0x1.59bc481eb3789p-1, 0x1.71c8f312e391ep-2, 0x1.e2002f93c4006p-3, 0x1.8673ce630ce7ap-2, +0x1.322382fa6447p-1, 0x1.38aba39271574p-1, 0x1.3bf9e5a277f3dp-2, 0x1.4308bb8286117p-4, +0x1.54ac6de2a958ep-1, 0x1.b2802d4f65006p-1, 0x1.d0776353a0eecp-2, 0x1.29fea3f253fd4p-3, +0x1.5868df92b0d1cp-3, 0x1.1549267a2a925p-1, 0x1.2508f2524a11ep-1, 0x1.f7c29be3ef853p-1, +0x1.fc51143bf8a23p-2, 0x1.2a202c8a54406p-2, 0x1.0c6ae13218d5cp-3, 0x1.693e1ae2d27c3p-4, +0x1.3b9e4302773c8p-6, 0x1.9cd0de2339a1cp-1, 0x1.13bc8ada27791p-2, 0x1.12f4071a25e81p-1, +0x1.a41e0d0f483c2p-1, 0x1.5d68f75abad1fp-2, 0x1.e1a07267c340ep-1, 0x1.b2e710c365ce2p-3, +0x1.eccf7b67d99efp-1, 0x1.e2725b03c4e4bp-4, 0x1.ed05eca3da0bep-3, 0x1.468bc3868d178p-1, +0x1.ea6589dbd4cb1p-2, 0x1.e7830e1bcf062p-2, 0x1.38b55682716abp-6, 0x1.3ab23f2275648p-4, +0x1.63695502c6d2bp-4, 0x1.4f853b0a9f0a7p-2, 0x1.3edd7d527dbbp-3, 0x1.8119988302333p-1, +0x1.690b2b52d2165p-3, 0x1.37f310fe6fe62p-1, 0x1.cb99418397328p-1, 0x1.60ba0572c1741p-2, +0x1.34f0ddd269e1cp-3, 0x1.e14467a3c288dp-2, 0x1.503f3d32a07e8p-2, 0x1.4b64c19296c98p-1, +0x1.85b24a170b649p-1, 0x1.d674adcbace96p-2, 0x1.788c84f2f1191p-1, 0x1.8f8f3c2f1f1e8p-1, +0x1.10166a0a202cdp-2, 0x1.35652e026aca6p-8, 0x1.4506868a8a0d1p-2, 0x1.614a1082c2942p-4, +0x1.623e8c12c47d2p-2, 0x1.08476b5a108edp-2, 0x1.31c60c82638c2p-2, 0x1.3bdd82e277bbp-2, +0x1.80e4021b01c8p-2, 0x1.1424816a2849p-1, 0x1.e47a84f7c8f51p-1, 0x1.b5a4c5fb6b499p-1, +0x1.f9821e03f3044p-7, 0x1.ee402fabdc806p-1, 0x1.dcfb0ddfb9f62p-1, 0x1.a29998c345333p-4, +0x1.2c059a62580b3p-2, 0x1.65936982cb26dp-4, 0x1.b56ccb9b6ad99p-1, 0x1.e08b300bc1166p-2, +0x1.64a57e2ec94bp-1, 0x1.81060d1b020c2p-1, 0x1.a0a29abf41453p-1, 0x1.b1e1b5a363c37p-1, +0x1.c6a103a38d42p-3, 0x1.2308e5524611dp-3, 0x1.fa8cee6bf519ep-2, 0x1.f75a8affeeb51p-1, +0x1.33fc903a67f92p-1, 0x1.d74bf093ae97ep-3, 0x1.86e9c72b0dd39p-1, 0x1.bc07c53f780f9p-1, +0x1.e0f71a03c1ee3p-3, 0x1.4b68538296d0ap-4, 0x1.e831074fd0621p-1, 0x1.295d0c8e52ba2p-1, +0x1.5b21803ab643p-2, 0x1.02281b1a04503p-2, 0x1.c74bcdff8e97ap-1, 0x1.6e02c12adc058p-1, +0x1.95388ef72a712p-1, 0x1.abc652f3578cap-1, 0x1.23a78726474f1p-1, 0x1.9d1e976f3a3d3p-1, +0x1.9a06829b340dp-1, 0x1.00a2950201453p-1, 0x1.d171ca87a2e39p-1, 0x1.804a7e430095p-4, +0x1.2d5502365aaap-1, 0x1.86de96230dbd3p-1, 0x1.204ee7ce409ddp-1, 0x1.23f500c247eap-2, +0x1.07e4a33a0fc94p-1, 0x1.81e3051303c61p-2, 0x1.0f70d8121ee1bp-3, 0x1.798ce426f319dp-1, +0x1.09b3bbde13677p-1, 0x1.4122ad3a82456p-1, 0x1.70e76f22e1ceep-1, 0x1.ed8260a3db04cp-4, +0x1.b6f5a95f6deb5p-1, 0x1.efa26c9bdf44ep-2, 0x1.f9b81153f3702p-1, 0x1.799b7ee2f337p-4, +0x1.213e40be427c8p-1, 0x1.e1e9189fc3d23p-1, 0x1.58907c6ab121p-1, 0x1.cecf00db9d9ep-1, +0x1.8bf498a317e93p-3, 0x1.1fdc4a663fb89p-1, 0x1.3cd1c20279a38p-1, 0x1.f835b523f06b7p-1, +0x1.97453aab2e8a7p-2, 0x1.81e5249303ca5p-3, 0x1.95544c8f2aa8ap-1, 0x1.96a47fc32d49p-3, +0x1.611bde2ac237cp-1, 0x1.66c61716cd8c3p-1, 0x1.2b64df7256c9cp-2, 0x1.1ce1c0ba39c38p-2, +0x1.db495a6bb692bp-2, 0x1.b601578b6c02bp-1, 0x1.206b60be40d6cp-1, 0x1.f589506feb12ap-1, +0x1.dbcb6843b796dp-3, 0x1.644796c2c88f3p-1, 0x1.6f163492de2c7p-1, 0x1.80a695f3014d3p-1, +0x1.4ad487f295a91p-2, 0x1.bffb476b7ff69p-2, 0x1.be56e2077cadcp-1, 0x1.717fb552e2ff7p-3, +0x1.d7ceda03af9dbp-1, 0x1.b80ef35b701dep-1, 0x1.1726ba6a2e4d7p-2, 0x1.f21a357be4347p-2, +0x1.99f80bf733f01p-1, 0x1.e423d99fc847bp-1, 0x1.8fb8372b1f707p-2, 0x1.fcf53223f9ea6p-1, +0x1.0400240608005p-1, 0x1.2b77650256eedp-7, 0x1.f52ae743ea55dp-1, 0x1.cfa2c15b9f458p-1, +0x1.949c9af329393p-3, 0x1.8a7f33cf14fe6p-1, 0x1.aa5f0a4354be1p-4, 0x1.c64304e78c861p-1, +0x1.e28a95c3c5153p-2, 0x1.95fca20b2bf94p-2, 0x1.52cf9502a59f3p-3, 0x1.dee9f817bdd3fp-1, +0x1.01ff511a03feap-2, 0x1.751f45feea3e9p-1, 0x1.d4734887a8e69p-1, 0x1.efe5053bdfca1p-2, +0x1.b2cdb983659b7p-2, 0x1.43897d168713p-1, 0x1.e2646233c4c8cp-3, 0x1.7ed120bafda24p-1, +0x1.1c39064238721p-4, 0x1.b77fd4a36effbp-4, 0x1.db310e13b6622p-1, 0x1.fb55facbf6abfp-1, +0x1.eefeedefddfdep-1, 0x1.9b11ad1336236p-3, 0x1.e8c62b0bd18c5p-2, 0x1.88f6f9e311edfp-1, +0x1.2ba1138257422p-3, 0x1.bc3f311b787e6p-1, 0x1.85ec2c030bd86p-1, 0x1.4ee868e69dd0dp-1, +0x1.c0ed0eb381da2p-1, 0x1.7b171342f62e2p-1, 0x1.1e8b2a423d165p-1, 0x1.30a1ab6261435p-4, +0x1.059647120b2c9p-1, 0x1.53d70b8aa7ae1p-1, 0x1.ec573a53d8ae7p-1, 0x1.f6db91f3edb72p-1, +0x1.ed55c8c3daab9p-5, 0x1.042c7e420859p-3, 0x1.d5c58a0bab8b1p-1, 0x1.3faa0a327f541p-2, +0x1.b62a658f6c54dp-1, 0x1.aa38d28f5471ap-1, 0x1.97c787bb2f8f1p-1, 0x1.1f22849a3e451p-2, +0x1.db849f43b7094p-2, 0x1.060a04420c141p-5, 0x1.cc4c61039898cp-6, 0x1.1149706e2292ep-1, +0x1.1d426b623a84dp-3, 0x1.e993711bd326ep-1, 0x1.0c9f6b36193edp-1, 0x1.b27c462364f89p-4, +0x1.415f717282beep-3, 0x1.0280bc0205018p-9, 0x1.bf4682ab7e8dp-1, 0x1.3680427a6d008p-2, +0x1.bd41b1d77a836p-1, 0x1.4532aeaa8a656p-1, 0x1.ea288a27d4511p-1, 0x1.7e2ec086fc5d8p-1, +0x1.809383db0127p-2, 0x1.08b3b46611677p-1, 0x1.a442f5f34885fp-1, 0x1.c5e008ff8bc01p-1, +0x1.722affb2e456p-3, 0x1.909a304321346p-1, 0x1.bcbb9aef79773p-1, 0x1.ed8071f3db00ep-3, +0x1.d1a54fd3a34aap-1, 0x1.928124f725025p-1, 0x1.1b352196366a4p-1, 0x1.87cfb5630f9f7p-1, +0x1.3cb9f7827973fp-1, 0x1.65f9529acbf2ap-2, 0x1.760f7ac2ec1efp-5, 0x1.53e23922a7c47p-4, +0x1.86ba932b0d752p-2, 0x1.2e1ad5a25c35bp-4, 0x1.3bc5b792778b7p-1, 0x1.0aade46e155bdp-1, +0x1.ead97983d5b2fp-6, 0x1.21948b1243291p-3, 0x1.40fd6d3681faep-1, 0x1.7ebaa0a2fd754p-3, +0x1.259e8e024b3d2p-3, 0x1.0043efde0087ep-1, 0x1.f5dd92d3ebbb2p-2, 0x1.aa55560354aabp-7, +0x1.15da7a122bb4fp-3, 0x1.ca2ea71b945d5p-2, 0x1.84d815df09b03p-1, 0x1.05c060720b80cp-1, +0x1.edcb07f3db961p-1, 0x1.291b0bd252361p-1, 0x1.9740d2db2e81ap-2, 0x1.29571f7252ae4p-3, +0x1.736a7822e6d4fp-2, 0x1.10b808ba21701p-2, 0x1.8b6bc8b316d79p-2, 0x1.16b517ca2d6a3p-2, +0x1.add295035ba53p-5, 0x1.e0eb05f3c1d61p-1, 0x1.32a4144265483p-5, 0x1.579720d6af2e4p-1, +0x1.27cf5e7a4f9ecp-2, 0x1.5459c782a8b39p-4, 0x1.821367fb0426dp-1, 0x1.5744f8d2ae89fp-1, +0x1.413a4ea28274ap-3, 0x1.7bb23f12f7648p-2, 0x1.87cb75030f96fp-3, 0x1.7e957dd2fd2bp-3, +0x1.063e424e0c7c8p-1, 0x1.a2f04a7745e09p-1, 0x1.7ea80f42fd502p-2, 0x1.4fa5e5d29f4bdp-1, +0x1.466874a28cd0fp-2, 0x1.ba42d10b7485ap-1, 0x1.564f3b2aac9e7p-1, 0x1.d155b1aba2ab6p-2, +0x1.3eb4492a7d689p-2, 0x1.b64ea20b6c9d4p-2, 0x1.ee6b394bdcd67p-1, 0x1.1a4a590a3494bp-2, +0x1.10973502212e7p-7, 0x1.7417456ae82e9p-2, 0x1.aef5e8c35debdp-2, 0x1.7bef31d2f7de6p-2, +0x1.4267a71284cf5p-1, 0x1.9d30d8bf3a61bp-1, 0x1.495224ce92a45p-1, 0x1.5d44d066ba89ap-1, +0x1.7e1bdeaefc37cp-1, 0x1.5c7c6612b8f8dp-1, 0x1.69b7e272d36fcp-2, 0x1.2038de824071cp-5, +0x1.87079f030e0f4p-1, 0x1.b77ac9836ef59p-4, 0x1.694886bed2911p-1, 0x1.d75632abaeac6p-1, +0x1.e990f173d321ep-2, 0x1.cb3b63ff9676cp-1, 0x1.b7dc91036fb92p-4, 0x1.fb06bb07f60d7p-1, +0x1.6e2bae72dc576p-1, 0x1.ec9f3383d93e6p-2, 0x1.4aaca0d695594p-1, 0x1.15fe8c022bfd2p-5, +0x1.6124d592c249bp-2, 0x1.41f7b7fa83ef7p-2, 0x1.f415832be82bp-2, 0x1.4fec8f5e9fd92p-1, +0x1.7c232d06f8466p-1, 0x1.d0ebf5bba1d7fp-2, 0x1.dd11bbe3ba237p-1, 0x1.806589db00cb1p-1, +0x1.a2819d9745034p-1, 0x1.69196082d232cp-2, 0x1.f2e91603e5d23p-4, 0x1.c9d2894b93a51p-2, +0x1.46f623f28dec4p-3, 0x1.87af478f0f5e9p-1, 0x1.08b854221170bp-3, 0x1.cfd967ab9fb2dp-1, +0x1.c8575b3b90aebp-2, 0x1.ee140c83dc282p-2, 0x1.e1dcf597c3b9fp-1, 0x1.accd3283599a6p-3, +0x1.2df95f725bf2cp-1, 0x1.4b257c52964bp-1, 0x1.0a25fd22144cp-3, 0x1.160ec1422c1d8p-4, +0x1.1660e04e2cc1cp-1, 0x1.e61445a3cc289p-3, 0x1.dc893303b9126p-5, 0x1.09191d7a12324p-2, +0x1.6fd4ab2adfa95p-1, 0x1.68753406d0ea7p-1, 0x1.2bd8eefa57b1ep-2, 0x1.0338af8206716p-4, +0x1.2e2200825c44p-6, 0x1.8ff739131fee7p-1, 0x1.7053a54ee0a75p-1, 0x1.85943d0b0b288p-1, +0x1.e1b4cfc3c369ap-3, 0x1.4d65612e9acacp-1, 0x1.05f9c6e20bf39p-1, 0x1.aeed18435dda3p-5, +0x1.f2117003e422ep-9, 0x1.4456e9a688addp-1, 0x1.ffb02c53ff606p-2, 0x1.4ebe69b29d7cdp-3, +0x1.980c62633018cp-2, 0x1.42062b36840c5p-1, 0x1.1c4810c238902p-4, 0x1.b031ded36063cp-1, +0x1.c8818ba391031p-4, 0x1.597deb02b2fbdp-7, 0x1.b652b7036ca57p-5, 0x1.670990eace132p-1, +0x1.508b73fea116ep-1, 0x1.77baaae2ef755p-3, 0x1.89cb69131396dp-1, 0x1.9bb151233762ap-3, +0x1.aee7784b5dcefp-2, 0x1.a793fc434f28p-1, 0x1.d6f1c60bade39p-2, 0x1.1d219d323a434p-3, +0x1.1009304a20126p-1, 0x1.81655a8302cabp-1, 0x1.9ebdf5033d7bfp-3, 0x1.197a404e32f48p-1, +0x1.115c939222b92p-1, 0x1.d803228fb0064p-1, 0x1.3e1cfaaa7c39fp-2, 0x1.89c9c78313939p-1, +0x1.256883be4ad1p-1, 0x1.a50844374a109p-1, 0x1.a4b8990749713p-1, 0x1.275a952e4eb53p-1, +0x1.d2be5bb3a57cbp-2, 0x1.49215e629242cp-2, 0x1.7b0a2f9af6146p-1, 0x1.b5655f0f6acacp-1, +0x1.e696da67cd2dbp-1, 0x1.9e9331b33d266p-1, 0x1.65973ddecb2e8p-1, 0x1.fa70bd83f4e18p-5, +0x1.a3f9295f47f25p-1, 0x1.80fc694f01f8dp-1, 0x1.86b09cc30d614p-1, 0x1.e9093ab3d2127p-2, +0x1.deeb1407bdd63p-1, 0x1.107c05d620f81p-1, 0x1.5b70f1a2b6e1ep-1, 0x1.6cbda052d97b4p-2, +0x1.7020042ae0401p-2, 0x1.1ba75292374eap-3, 0x1.fb4e6ef3f69cep-2, 0x1.c819325f90326p-1, +0x1.c84f2f27909e6p-1, 0x1.6556b4bacaad7p-1, 0x1.c326e553864ddp-2, 0x1.b357857366af1p-2, +0x1.3d59d7467ab3bp-1, 0x1.80a1efff0143ep-1, 0x1.8dd628e31bac5p-3, 0x1.8b096c031612ep-3, +0x1.25aa34364b547p-1, 0x1.05c468020b88dp-6, 0x1.8a1cf02f1439ep-1, 0x1.e12c4183c2588p-6, +0x1.597da4e2b2fb5p-2, 0x1.05271fca0a4e4p-1, 0x1.c46ec11b88dd8p-1, 0x1.26ab59aa4d56bp-2, +0x1.4774a2f28ee94p-2, 0x1.2a05fef6540cp-1, 0x1.65f9715acbf2ep-2, 0x1.1ecdeb623d9bdp-3, +0x1.5604d082ac09ap-2, 0x1.cd6aab839ad55p-4, 0x1.3c38183278703p-1, 0x1.13daf89227b5fp-2, +0x1.4a295b469452bp-1, 0x1.2f5213aa5ea42p-2, 0x1.404c4c728098ap-1, 0x1.1caeac02395d6p-8, +0x1.bd25bcf37a4b8p-2, 0x1.ef9c1f43df384p-4, 0x1.ca528fbb94a52p-1, 0x1.4dc41b429b883p-2, +0x1.a34a38a346947p-1, 0x1.57cc04c2af981p-2, 0x1.808dd05b011bap-1, 0x1.c1481fd382904p-2, +0x1.643f9302c87f2p-4, 0x1.e4035a93c806bp-1, 0x1.43666aea86ccdp-1, 0x1.52322696a4645p-1, +0x1.ec317dd3d863p-1, 0x1.9b06b633360d7p-2, 0x1.613b88a2c2771p-1, 0x1.31e0a08263c14p-2, +0x1.d2aa7ae3a554fp-1, 0x1.25aa49be4b549p-1, 0x1.2c45fd16588cp-1, 0x1.d9933163b3266p-3, +0x1.3ec122c27d824p-3, 0x1.df42b5c7be857p-1, 0x1.7c308e62f8612p-2, 0x1.f56561ebeacacp-2, +0x1.8f00b3431e016p-5, 0x1.fa505f67f4a0cp-1, 0x1.84a02d3f09406p-1, 0x1.6319667ac632dp-1, +0x1.23f2d27247e5ap-2, 0x1.89d8f35b13b1ep-2, 0x1.6552c3d2caa58p-1, 0x1.708c47b2e1189p-1, +0x1.02dffd9a05cp-1, 0x1.2fa5538a5f4aap-1, 0x1.76e55502edcabp-5, 0x1.4c546c7298a8ep-2, +0x1.db8b55efb716bp-1, 0x1.97fc25ab2ff85p-1, 0x1.86ce46230d9c9p-1, 0x1.0269098204d21p-6, +0x1.7bff803ef7ffp-1, 0x1.9469621b28d2cp-2, 0x1.5a456ee2b48aep-1, 0x1.6830fe0ed062p-1, +0x1.97b80c272f702p-1, 0x1.7701ef02ee03ep-2, 0x1.214e5002429cap-9, 0x1.6a628706d4c51p-1, +0x1.e12b413fc2568p-1, 0x1.2d674b665ace9p-1, 0x1.e0c7535fc18eap-1, 0x1.86dc4f830db8ap-4, +0x1.0caa012a1954p-1, 0x1.3dbf35227b7e7p-2, 0x1.2b8e3ae6571c7p-1, 0x1.259a0c5e4b342p-1, +0x1.325ff3ea64bfep-2, 0x1.605cd042c0b9ap-2, 0x1.1166e5aa22cddp-2, 0x1.2b29632e5652cp-1, +0x1.751ae1ceea35cp-1, 0x1.ee0636abdc0c7p-1, 0x1.376b55ba6ed6bp-2, 0x1.dfeb7d93bfd7p-3, +0x1.1dab8a323b571p-1, 0x1.66480062cc9p-2, 0x1.1e2515a23c4a3p-1, 0x1.f26dc03be4db8p-2, +0x1.2c80976259013p-3, 0x1.49e6b78293cd7p-2, 0x1.014a286a02945p-1, 0x1.c71fa6178e3f5p-1, +0x1.6f280ccede502p-1, 0x1.6e3e5d22dc7ccp-3, 0x1.2f50a4265ea15p-1, 0x1.06e018f20dc03p-1, +0x1.17108ece2e212p-1, 0x1.3071f27660e3ep-1, 0x1.c50a7fd38a15p-3, 0x1.f077a013e0ef4p-2, +0x1.7764f762eec9fp-3, 0x1.4827cd52904fap-3, 0x1.291759fa522ebp-1, 0x1.6a833f06d5068p-1, +0x1.e1d31bcbc3a63p-2, 0x1.52965372a52cap-3, 0x1.203a96c240753p-2, 0x1.8a1987db14331p-1, +0x1.04d3fcfe09a8p-1, 0x1.18d0be3a31a18p-1, 0x1.6a85d60ad50bbp-2, 0x1.e7bb7b33cf76fp-3, +0x1.06d6f4e20dadfp-1, 0x1.50f895e2a1f13p-1, 0x1.e3d37c63c7a7p-2, 0x1.2413f8824827fp-4, +0x1.072584020e4b1p-7, 0x1.00ed3d0201da8p-5, 0x1.1db95f323b72cp-1, 0x1.3cf2efb279e5ep-3, +0x1.6a045f2ad408cp-2, 0x1.f0387983e070fp-5, 0x1.65c62002cb8c4p-5, 0x1.2151e30242a3cp-4, +0x1.ea4c7b93d498fp-3, 0x1.45ad06268b5a1p-1, 0x1.2b0a55565614bp-1, 0x1.91a3adb323476p-1, +0x1.d87be263b0f7cp-3, 0x1.9c4cf54b3899fp-1, 0x1.13befb72277dfp-2, 0x1.a7f06ceb4fe0ep-2, +0x1.ee56e89fdcaddp-1, 0x1.b2f6d7b765edbp-1, 0x1.f3dbabc3e7b75p-4, 0x1.be80ed037d01ep-2, +0x1.e71b2403ce365p-7, 0x1.9d3181b33a63p-2, 0x1.a567f9634acffp-3, 0x1.0c70699218e0dp-1, +0x1.e7697f13ced3p-1, 0x1.1e9ce95e3d39dp-1, 0x1.865f485f0cbe9p-1, 0x1.dc80e7e3b901dp-2, +0x1.be55fd037cacp-3, 0x1.e1241a33c2483p-3, 0x1.12c2f3062585ep-1, 0x1.cec855439d90bp-3, +0x1.10afb4c2215f7p-2, 0x1.83e291a307c52p-4, 0x1.85dda27b0bbb4p-2, 0x1.3d5a09f67ab41p-1, +0x1.3dff67327bfedp-3, 0x1.b2966683652cdp-2, 0x1.61844656c3089p-1, 0x1.9425f163284bep-2, +0x1.ef839643df073p-5, 0x1.191d3752323a7p-2, 0x1.6eda9982ddb53p-3, 0x1.2a2e6402545cdp-2, +0x1.46dc87a28db91p-4, 0x1.cb2c483b96589p-2, 0x1.690f6876d21edp-1, 0x1.73279902e64f3p-5, +0x1.3119f7a26233fp-2, 0x1.a78addef4f15cp-1, 0x1.ece5e02bd9cbcp-2, 0x1.4052d0c280a5ap-2, +0x1.d88e7b13b11cfp-3, 0x1.5fccee6ebf99ep-1, 0x1.ac99d1f35933ap-1, 0x1.76347762ec68fp-3, +0x1.f9a75f33f34ecp-3, 0x1.32f91a4e65f23p-1, 0x1.4bcd91ca979b2p-1, 0x1.dbfeae1bb7fd6p-2, +0x1.ab4220df56844p-1, 0x1.7a421332f4842p-3, 0x1.61b16c5ec362ep-1, 0x1.9ccfd9e3399fbp-4, +0x1.1e19ae023c336p-2, 0x1.2501ece24a03ep-4, 0x1.70f40532e1e81p-1, 0x1.bd1961a37a32cp-2, +0x1.fbd6e1bbf7adcp-2, 0x1.a4f0970b49e13p-2, 0x1.a89fa983513f5p-1, 0x1.1ce3aa4239c75p-1, +0x1.5f06e732be0ddp-1, 0x1.1593f9022b27fp-7, 0x1.b1fadc4363f5cp-1, 0x1.87e278270fc4fp-1, +0x1.d3d8e803a7b1dp-2, 0x1.1b0a44b636149p-1, 0x1.9f14f1b73e29ep-1, 0x1.82796fd304f2ep-1, +0x1.852a45430a549p-2, 0x1.2b0fc392561f8p-2, 0x1.1516c1822a2d8p-4, 0x1.38b8c16a71718p-1, +0x1.f554d03beaa9ap-1, 0x1.cf3caa279e795p-1, 0x1.9645df432c8bcp-1, 0x1.cefaa0139df54p-3, +0x1.0235c472046b9p-1, 0x1.c426e213884dcp-2, 0x1.61bdff12c37cp-1, 0x1.5aefca9ab5df9p-2, +0x1.40a3f5da8147fp-1, 0x1.86ded6db0dbdbp-2, 0x1.c223c11384478p-2, 0x1.cfb0ccdb9f61ap-1, +0x1.d01f5213a03eap-2, 0x1.481796e2902f3p-3, 0x1.5c7afb52b8f5fp-2, 0x1.e5fb19e7cbf63p-1, +0x1.247e314248fc6p-1, 0x1.5b749cb2b6e94p-3, 0x1.02dec42a05bd9p-1, 0x1.070a30e20e146p-2, +0x1.6ccddc42d99bcp-3, 0x1.69b340d2d3668p-2, 0x1.6cf21282d9e42p-6, 0x1.451feb128a3fdp-1, +0x1.cfe3e5239fc7dp-1, 0x1.aa7c824b54f9p-1, 0x1.8f32b5c31e657p-2, 0x1.24f20f8249e42p-2, +0x1.0011905200232p-3, 0x1.d4786623a8f0dp-2, 0x1.cb31c92b96639p-1, 0x1.aac9a26355934p-4, +0x1.72f1ba6ae5e37p-2, 0x1.6177a86ac2ef5p-1, 0x1.522fb8a2a45f7p-2, 0x1.bbaea1ab775d4p-1, +0x1.0e2c65d21c58dp-3, 0x1.5abb6c02b576ep-6, 0x1.a49a1bd349343p-3, 0x1.842f0f4f085e2p-1, +0x1.9c8a8d9b39152p-2, 0x1.4a3867829470dp-1, 0x1.53dfdc26a7bfcp-1, 0x1.b654efdb6ca9ep-1, +0x1.9c3e4d3b387cap-1, 0x1.0eace8021d59dp-8, 0x1.9c5009bf38a01p-1, 0x1.8178fcf302f2p-2, +0x1.63ea03f2c7d4p-3, 0x1.3e5d9bca7cbb3p-2, 0x1.444196ea88833p-1, 0x1.685bf01ad0b7ep-2, +0x1.54086e52a810ep-1, 0x1.4fa9277e9f525p-1, 0x1.f94de31ff29bcp-1, 0x1.23ec537247d8ap-1, +0x1.f44b5393e896ap-2, 0x1.81ce7bfb039cfp-2, 0x1.b6655b336ccabp-1, 0x1.3a2a0dde74542p-1, +0x1.ab23710f5646ep-1, 0x1.8197245f032e5p-1, 0x1.6f83422adf068p-1, 0x1.9271391324e27p-3, +0x1.c61d998b8c3b3p-2, 0x1.89b1e7831363dp-5, 0x1.02577f6204afp-4, 0x1.2699e63a4d33dp-1, +0x1.1b87cec2370fap-4, 0x1.12e2edc225c5ep-2, 0x1.5591eb0aab23dp-2, 0x1.e36c814bc6d9p-2, +0x1.d3a9de63a753cp-1, 0x1.fea8d1affd51ap-1, 0x1.501660faa02ccp-2, 0x1.6fe82b9edfd05p-1, +0x1.8c56f80318adfp-10, 0x1.116ce8f222d9dp-3, 0x1.852550a30a4aap-4, 0x1.6702b1e2ce056p-3, +0x1.c71410438e282p-2, 0x1.74e64102e9cc8p-1, 0x1.0deea4861bdd5p-1, 0x1.bc93b38379276p-4, +0x1.891ed0fb123dap-2, 0x1.073c87a20e791p-1, 0x1.5b7ec9e2b6fd9p-1, 0x1.beb512477d6a2p-1, +0x1.c823c59f90479p-1, 0x1.11e4251623c85p-1, 0x1.f1be4043e37c8p-2, 0x1.734736aae68e7p-1, +0x1.26f692e24ded2p-2, 0x1.a189892343131p-3, 0x1.d7e384efafc71p-1, 0x1.768a1636ed143p-1, +0x1.01fb018203f6p-2, 0x1.f82e74dbf05cfp-1, 0x1.3a47f8e2748ffp-2, 0x1.48dcf53291b9fp-2, +0x1.033fd77a067fbp-2, 0x1.47ecf1f68fd9ep-1, 0x1.9624bb432c497p-1, 0x1.55272872aa4e5p-3, +0x1.4695c3a28d2b8p-1, 0x1.f17f5de3e2fecp-4, 0x1.c531f5bb8a63fp-1, 0x1.475bef1e8eb7ep-1, +0x1.05164bf20a2c9p-2, 0x1.f5d69fd3ebad4p-1, 0x1.a11c9b9742393p-1, 0x1.66152e1ecc2a6p-1, +0x1.6abce0d2d579cp-1, 0x1.5e168032bc2dp-2, 0x1.9da7a48f3b4f5p-1, 0x1.7a624a62f4c49p-4, +0x1.b647c7bb6c8f9p-1, 0x1.f24cdce3e499cp-2, 0x1.ee015b97dc02bp-1, 0x1.7e6b8d56fcd72p-1, +0x1.61527082c2a4ep-6, 0x1.cdc0f76b9b81fp-2, 0x1.e3658803c6cb1p-2, 0x1.3d0bb9ea7a177p-2, +0x1.4f42de029e85cp-1, 0x1.932c91db26592p-2, 0x1.50ff3282a1fe6p-5, 0x1.d0405ec3a080cp-1, +0x1.83897b930712fp-2, 0x1.6467df32c8cfcp-2, 0x1.d2bb6573a576dp-3, 0x1.4364a98686c95p-1, +0x1.fa20e193f441cp-1, 0x1.5a729382b4e52p-6, 0x1.98ae73a3315cep-1, 0x1.40b6a532816d5p-1, +0x1.240e0162481cp-3, 0x1.5de0695ebbc0dp-1, 0x1.102528a2204a5p-2, 0x1.971d4cab2e3aap-2, +0x1.53b7092ea76e1p-1, 0x1.49797f2292f3p-4, 0x1.8d1ea3831a3d4p-4, 0x1.7ce7d3faf9cfap-2, +0x1.b074e00360e9cp-2, 0x1.cf4b78ff9e96fp-1, 0x1.db806693b700dp-2, 0x1.1d046f723a08ep-2, +0x1.90e3cedb21c7ap-2, 0x1.b7831dbb6f064p-2, 0x1.9db8a2033b714p-6, 0x1.a6f8f5e34df1fp-2, +0x1.c2a20a9785441p-1, 0x1.fd411223fa822p-2, 0x1.720257e6e404bp-1, 0x1.11e4e89623c9dp-1, +0x1.c836d1ff906dap-1, 0x1.87124b130e249p-1, 0x1.c44a8eab88952p-2, 0x1.13f71f8a27ee4p-2, +0x1.ca31d5439463bp-4, 0x1.56d420b2ada84p-1, 0x1.cd60394b9ac07p-1, 0x1.9b38e1c33671cp-4, +0x1.61a7b54ec34f7p-1, 0x1.660eaceecc1d6p-1, 0x1.741dc16ee83b8p-1, 0x1.aaab35ab55567p-1, +0x1.87de2c930fbc6p-2, 0x1.fc3055bff860bp-1, 0x1.d8e76ff3b1ceep-3, 0x1.7a61f742f4c3fp-5, +0x1.2afc2d0255f86p-4, 0x1.4fbb60da9f76cp-2, 0x1.ac3412e358682p-2, 0x1.fb33eb43f667dp-2, +0x1.dca4a5a3b9495p-3, 0x1.c3da3cbb87b48p-1, 0x1.8c1c2d5f18386p-1, 0x1.3f9b10da7f362p-1, +0x1.3f3797327e6f3p-2, 0x1.9909f26f3213ep-1, 0x1.3178bc8262f18p-5, 0x1.88f758b311eebp-3, +0x1.2f54f6fa5ea9fp-2, 0x1.8519e3b30a33cp-1, 0x1.7422bec2e8458p-1, 0x1.7f8535e2ff0a7p-3, +0x1.0c2c2ec218586p-1, 0x1.59201852b2403p-3, 0x1.d3b9ba83a7737p-2, 0x1.4572696a8ae4dp-1, +0x1.ad1c26cb5a385p-1, 0x1.6e7a2d12dcf46p-2, 0x1.78d985a6f1b31p-1, 0x1.0ec3dc161d87cp-1, +0x1.d4bc3743a9787p-5, 0x1.d9ee8e23b3dd2p-2, 0x1.72de237ae5bc4p-2, 0x1.c275b37b84eb6p-2, +0x1.d24f399ba49e7p-2, 0x1.2fa8edba5f51ep-1, 0x1.f1c1f263e383ep-2, 0x1.0e87226e1d0e4p-1, +0x1.d7869e27af0d4p-1, 0x1.cefb02a39df6p-1, 0x1.842302030846p-6, 0x1.3abf1e42757e4p-3, +0x1.92d53f5f25aa8p-1, 0x1.983d456f307a9p-1, 0x1.8e4ad86b1c95bp-1, 0x1.938857a32710bp-4, +0x1.314737da628e7p-1, 0x1.a162643342c4dp-1, 0x1.295dc24252bb8p-2, 0x1.c8f1b35791e36p-1, +0x1.267c47e24cf89p-1, 0x1.1a33fc023468p-6, 0x1.469806628d301p-4, 0x1.9543b5032a877p-4, +0x1.7c6697d2f8cd3p-3, 0x1.12afde0e255fcp-1, 0x1.781ae00ef035cp-1, 0x1.86b997830d733p-6, +0x1.c9ecf49b93d9fp-1, 0x1.e1e8cb63c3d19p-2, 0x1.1af9a8d635f35p-1, 0x1.e738b80fce717p-1, +0x1.ddebacc3bbd76p-1, 0x1.d468ba93a8d17p-1, 0x1.90e7239b21ce4p-2, 0x1.8e26931b1c4d2p-2, +0x1.0411a84e08235p-1, 0x1.c1548aff82a91p-1, 0x1.d59a6bfbab34dp-1, 0x1.b7308ce36e612p-2, +0x1.904f8da3209f2p-1, 0x1.e1bb840bc3771p-1, 0x1.2a480e0254902p-1, 0x1.2324ccfe4649ap-1, +0x1.79f8c976f3f19p-1, 0x1.7125ccd2e24bap-2, 0x1.5595d7f2ab2bbp-1, 0x1.5680029aadp-2, +0x1.67d52a72cfaa5p-3, 0x1.ea44b913d4897p-1, 0x1.d0c6d283a18dap-3, 0x1.8071927f00e32p-1, +0x1.f31658f3e62cbp-1, 0x1.3a096ae27412dp-2, 0x1.b31a092366341p-1, 0x1.48bffb92917ffp-3, +0x1.afb4937f5f692p-1, 0x1.2b34e92e5669dp-1, 0x1.79972e92f32e6p-3, 0x1.79a18816f3431p-1, +0x1.c294edc38529ep-5, 0x1.795f747af2befp-1, 0x1.60da4026c1b48p-1, 0x1.fa14fb9ff429fp-1, +0x1.4dc82f0a9b906p-1, 0x1.4a6e8f8294dd2p-4, 0x1.82508a5304a11p-2, 0x1.47675d528ececp-3, +0x1.eaa25cefd544cp-1, 0x1.2d8562425b0acp-2, 0x1.2d721dca5ae44p-1, 0x1.7af1ea8ef5e3dp-1, +0x1.e1f8d4b3c3f1bp-3, 0x1.5ee8af22bdd16p-3, 0x1.3c2d6f12785aep-2, 0x1.f276fea3e4eep-1, +0x1.104d1236209a2p-1, 0x1.f3ac8f7be7592p-1, 0x1.3b6dffe276dcp-2, 0x1.6a425cd2d484cp-1, +0x1.ddf1488bbbe29p-1, 0x1.11e8b49223d17p-1, 0x1.d567de9baacfcp-2, 0x1.d107a17ba20f4p-1, +0x1.aeed6a035ddadp-1, 0x1.3b9bf0da7737ep-2, 0x1.19bd0302337ap-4, 0x1.5ea1fd82bd44p-1, +0x1.c902e19b9205cp-1, 0x1.033ad80a0675bp-2, 0x1.b0870b2b610e1p-2, 0x1.e52c3077ca586p-1, +0x1.fafce07ff5f9cp-1, 0x1.c8ee2dc391dc6p-4, 0x1.df412c13be826p-1, 0x1.48c50f86918a2p-1, +0x1.89ae5ea3135ccp-3, 0x1.40d2e27281a5cp-2, 0x1.9a9ee6df353ddp-1, 0x1.3437d262686fap-3, +0x1.372c225e6e584p-1, 0x1.9022094b20441p-2, 0x1.c7ffdf278fffcp-1, 0x1.afaa578b5f54bp-1, +0x1.1fcb306e3f966p-1, 0x1.985a5ac330b4bp-3, 0x1.a221562b4442bp-1, 0x1.80c2150301843p-4, +0x1.670c98a2ce193p-3, 0x1.fec2b0c3fd856p-4, 0x1.9a5a9f7334b54p-1, 0x1.bda375a37b46fp-4, +0x1.51c10aaea3821p-1, 0x1.0a1d1d82143a4p-2, 0x1.178205822f041p-6, 0x1.00ae74ae015cfp-1, +0x1.22dc872e45b91p-1, 0x1.5f9d8462bf3b1p-4, 0x1.7d41c8b2fa839p-3, 0x1.d7bed193af7dap-2, +0x1.5b223922b6447p-2, 0x1.3793f7c66f27fp-1, 0x1.a217327b442e6p-2, 0x1.511bfa1aa237fp-2, +0x1.70b1bd7ee1638p-1, 0x1.60998aa2c1331p-2, 0x1.f1530c97e2a62p-1, 0x1.d31d552ba63abp-1, +0x1.50b6368aa16c7p-1, 0x1.8bf1f37317e3ep-1, 0x1.015a4e0202b4ap-4, 0x1.0fc4b1ca1f896p-2, +0x1.500be052a017cp-3, 0x1.e82b28e7d0565p-1, 0x1.bc65836378cbp-4, 0x1.73ce2882e79c5p-1, +0x1.3906fe52720ep-3, 0x1.d9ae069bb35c1p-1, 0x1.a3e66b2747ccdp-1, 0x1.5009cb82a0139p-2, +0x1.9865cb0330cb9p-5, 0x1.3e410a967c821p-1, 0x1.bf72a8eb7ee55p-2, 0x1.6b47675ed68edp-1, +0x1.c34f9957869f3p-1, 0x1.d0eac943a1d59p-2, 0x1.afd770335faeep-3, 0x1.cc58410b98b08p-2, +0x1.1469153228d23p-1, 0x1.968c9c732d194p-2, 0x1.d20b894fa4171p-1, 0x1.c1fa31c383f46p-1, +0x1.6d22fe02da46p-8, 0x1.462e45128c5c9p-2, 0x1.aa20bb4354417p-3, 0x1.738c037ee718p-1, +0x1.5363e7daa6c7dp-1, 0x1.6f6ced92ded9ep-3, 0x1.46a958a68d52bp-1, 0x1.48343cca90688p-2, +0x1.e7cd2ed7cf9a6p-1, 0x1.66d4a266cda94p-1, 0x1.2bfc774a57f8fp-1, 0x1.de813743bd027p-4, +0x1.4effcb4a9dff9p-1, 0x1.638927bac7125p-1, 0x1.af9e4f6b5f3cap-1, 0x1.9d418ae33a831p-1, +0x1.3d372e527a6e6p-1, 0x1.5384ba8ea7097p-1, 0x1.1519c2822a338p-3, 0x1.56bd8b02ad7b1p-1, +0x1.238b8a4a47171p-2, 0x1.24ffc51649ff9p-1, 0x1.8409e4c30813dp-2, 0x1.545579e2a8aafp-3, +0x1.aea536835d4a7p-6, 0x1.2dface6e5bf5ap-1, 0x1.3b417efe7683p-1, 0x1.21de3ee643bc8p-1, +0x1.f9411ca7f2824p-1, 0x1.0d4d084a1a9a1p-1, 0x1.c7b0e1538f61cp-2, 0x1.fc1b62a7f836cp-1, +0x1.b0642ad760c85p-1, 0x1.4e609f7a9cc14p-1, 0x1.6fa76622df4edp-1, 0x1.03c812ae07902p-1, +0x1.aa3bdadf5477bp-1, 0x1.6ca17d8ad943p-2, 0x1.a7e231134fc46p-1, 0x1.920909b324121p-1, +0x1.d2561283a4ac2p-5, 0x1.a7bd50bb4f7aap-2, 0x1.cdd9309b9bb26p-1, 0x1.6c252c72d84a6p-1, +0x1.bb3e80a3767dp-4, 0x1.7d778002faefp-1, 0x1.0966b75212cd7p-1, 0x1.749efe66e93ep-1, +0x1.a1f8752343f0fp-2, 0x1.4ead27f29d5a5p-1, 0x1.96b912cb2d722p-2, 0x1.62c1ffb6c584p-1, +0x1.ceb3b4139d677p-3, 0x1.8d617bc71ac2fp-1, 0x1.b7d75e2f6faecp-1, 0x1.02442d7a04886p-2, +0x1.76b89462ed713p-2, 0x1.e631ba5bcc637p-2, 0x1.a30055a34600bp-1, 0x1.693acdb2d275ap-2, +0x1.9795d0032f2bap-11, 0x1.0db18c921b632p-2, 0x1.617192fac2e32p-2, 0x1.b0ca104b61942p-1, +0x1.d53965c3aa72dp-1, 0x1.03017ce20603p-4, 0x1.692445f2d2489p-2, 0x1.7f75409efeea8p-1, +0x1.ad61dcc35ac3cp-2, 0x1.71d15022e3a2ap-3, 0x1.117e4a4e22fc9p-1, 0x1.e7ac9f13cf594p-2, +0x1.3052fc6660a6p-1, 0x1.beaef5cb7d5dfp-2, 0x1.7fedefe2ffdbep-3, 0x1.67bacc7acf75ap-1, +0x1.733beba2e677dp-3, 0x1.6962334ed2c46p-1, 0x1.b8b395bb71673p-2, 0x1.2dcb357a5b967p-1, +0x1.701eb67ae03d7p-2, 0x1.a7b654474f6cbp-1, 0x1.211a6a5a4234dp-2, 0x1.2bbc484657789p-1, +0x1.3517d00a6a2fap-1, 0x1.21924d624324ap-3, 0x1.acde5f0359bccp-1, 0x1.f0741a3fe0e83p-1, +0x1.3b7d708676faep-1, 0x1.4fdeb4a29fbd7p-1, 0x1.4a23022a9446p-2, 0x1.3be355fe77c6bp-1, +0x1.d6b77aefad6efp-1, 0x1.55ca4a92ab949p-1, 0x1.d95acc8bb2b5ap-2, 0x1.abf0e0af57e1cp-1, +0x1.762a7a2eec54fp-1, 0x1.a13f893f427f1p-1, 0x1.2b66214e56cc4p-1, 0x1.336da23266db4p-3, +0x1.fdb3dd4bfb67cp-1, 0x1.e7235cc3ce46cp-4, 0x1.40b1b81681637p-1, 0x1.2e06d9ae5c0dbp-1, +0x1.1c3be6823877dp-1, 0x1.a0ad340f415a7p-1, 0x1.2b834c525706ap-2, 0x1.790ae16af215cp-1, +0x1.0a0f675a141edp-1, 0x1.721b7106e436ep-1, 0x1.4dac2dc29b586p-2, 0x1.c21ec29b843d8p-1, +0x1.19d1c54a33a39p-1, 0x1.37634c0e6ec6ap-1, 0x1.dbb615bbb76c3p-2, 0x1.3ba65552774cbp-3, +0x1.7fc7df66ff8fcp-1, 0x1.3572d3ba6ae5ap-2, 0x1.faed7c83f5dbp-4, 0x1.768a9fdaed154p-2, +0x1.ea981e7fd5304p-1, 0x1.c8de614b91bccp-2, 0x1.f728a5ebee515p-1, 0x1.c14f996b829f3p-1, +0x1.d1cbd9a3a397bp-4, 0x1.c7ac185b8f583p-2, 0x1.6d407a1ada80fp-1, 0x1.b063f56360c7fp-1, +0x1.0a2b2ada14565p-2, 0x1.314d36ca629a7p-2, 0x1.fd3f5deffa7ecp-1, 0x1.0592e56a0b25dp-2, +0x1.ab160dfb562c2p-2, 0x1.3df116027be23p-1, 0x1.b0d04c6361a0ap-1, 0x1.f1c6ed7fe38dep-1, +0x1.bd3c941b7a793p-2, 0x1.1a47ca22348f9p-3, 0x1.6ad1cee6d5a3ap-1, 0x1.e8adb16bd15b6p-1, +0x1.b8ad6393715acp-1, 0x1.1a7e5c4234fccp-5, 0x1.aacc74035598fp-1, 0x1.a4fe51b349fcap-2, +0x1.490b31d292166p-1, 0x1.314efdba629ep-2, 0x1.2168be2e42d18p-1, 0x1.91a62273234c4p-2, +0x1.3360e8ba66c1dp-1, 0x1.60c66dbec18cep-1, 0x1.841861270830cp-1, 0x1.1df907363bf21p-1, +0x1.14d6798229acfp-3, 0x1.7b41070ef6821p-1, 0x1.be9141437d228p-2, 0x1.fdbc6653fb78dp-3, +0x1.7c5c4ce2f8b8ap-3, 0x1.32246ae26448dp-3, 0x1.7e9877a2fd30fp-4, 0x1.c859514b90b2ap-2, +0x1.ca5f6c3b94beep-2, 0x1.68936702d126dp-4, 0x1.66f61b5acdec3p-1, 0x1.bababd1b75758p-1, +0x1.6b0382e2d607p-1, 0x1.17c667be2f8cdp-1, 0x1.ac81aa9b59035p-1, 0x1.268733c24d0e6p-3, +0x1.5e585a46bcb0bp-1, 0x1.1753797e2ea6fp-1, 0x1.927bf2c324f7ep-4, 0x1.1705bdd62e0b8p-1, +0x1.28fb5f4651f6cp-1, 0x1.dd1bf25bba37ep-1, 0x1.e984e6b3d309dp-1, 0x1.c81a445390349p-3, +0x1.d70dc4d3ae1b9p-3, 0x1.0aeda4de15db5p-1, 0x1.3ad9a24e75b34p-1, 0x1.a92459ef5248bp-1, +0x1.aed04a735da09p-3, 0x1.7de406e2fbc81p-2, 0x1.8e3ac2431c758p-2, 0x1.61d361fac3a6cp-2, +0x1.d19853e3a330ap-4, 0x1.a66601c34cccp-1, 0x1.3058ca9660b19p-1, 0x1.32943b7265287p-2, +0x1.f2ef1c7be5de4p-1, 0x1.602bd98ac057bp-1, 0x1.7d76c65efaed9p-1, 0x1.b03da52b607b5p-2, +0x1.8d3e466f1a7c9p-1, 0x1.c8d9c37391b38p-2, 0x1.25b31f624b664p-2, 0x1.f083929be1072p-2, +0x1.fc334977f8669p-1, 0x1.fad9d243f5b3ap-4, 0x1.41e3963e83c73p-1, 0x1.5a8ba3bab5174p-1, +0x1.56aeb3c6ad5d6p-1, 0x1.74331496e8663p-1, 0x1.c64586438c8b1p-3, 0x1.fea84c23fd50ap-3, +0x1.514f06eea29e1p-1, 0x1.6c592102d8b24p-3, 0x1.e3614843c6c29p-2, 0x1.c71278238e24fp-1, +0x1.6603ed1ecc07ep-1, 0x1.64523362c8a46p-4, 0x1.7036d20ee06dap-1, 0x1.d1b7ffbba37p-1, +0x1.d6f893c3adf12p-2, 0x1.baa1998375433p-4, 0x1.054361720a86cp-2, 0x1.25af545e4b5ebp-1, +0x1.ddba34f3bb747p-1, 0x1.b2fa7b4f65f4fp-1, 0x1.bef972177df2ep-1, 0x1.d0a9516fa152ap-1, +0x1.132654d6264cbp-1, 0x1.3c70387678e07p-1, 0x1.51904802a3209p-2, 0x1.40c9368281927p-2, +0x1.06e8d1620dd1ap-4, 0x1.3ba1b3b277436p-1, 0x1.98a66493314cdp-1, 0x1.d1063a03a20c7p-5, +0x1.7afcedfaf5f9ep-1, 0x1.b513f59b6a27fp-2, 0x1.779c075aef381p-1, 0x1.a357438346ae8p-2, +0x1.3af43d9275e88p-3, 0x1.e92d68ebd25adp-1, 0x1.5155b4caa2ab7p-1, 0x1.a00c165340183p-1, +0x1.110ec4a2221d9p-3, 0x1.0c1963a21832cp-3, 0x1.671e8e76ce3d2p-1, 0x1.aa479e4b548f4p-1, +0x1.be427d637c85p-3, 0x1.aeaac1035d558p-2, 0x1.7bff9e02f7ff4p-1, 0x1.5b0ce93ab619dp-1, +0x1.0ea993b21d532p-1, 0x1.fea14ebbfd42ap-1, 0x1.01787b2a02f0fp-2, 0x1.d8c7914bb18f2p-2, +0x1.b19bca0763379p-1, 0x1.fdad7d63fb5bp-4, 0x1.7a1a3422f4347p-2, 0x1.89843dbb13088p-2, +0x1.7c25e822f84bdp-1, 0x1.65d53e12cbaa8p-1, 0x1.6526ba1eca4d7p-1, 0x1.9d03024f3a06p-1, +0x1.42ede38a85dbcp-2, 0x1.fb9a3d5bf7348p-2, 0x1.ba1365ef7426dp-1, 0x1.c73dfbc38e7bfp-5, +0x1.d857197fb0ae3p-1, 0x1.31af6d46635eep-1, 0x1.dc3f02fbb87ep-2, 0x1.38a1470271429p-4, +0x1.1adcd63235b9bp-1, 0x1.fba9b243f7536p-4, 0x1.c7203f338e408p-1, 0x1.5f20875abe411p-1, +0x1.04f71e6209ee4p-2, 0x1.2e3ecda65c7dap-1, 0x1.096825a212d05p-1, 0x1.e4185d13c830cp-2, +0x1.650b8a02ca171p-7, 0x1.0acf874a159f1p-2, 0x1.34645f0268c8cp-3, 0x1.143dc1da287b8p-1, +0x1.081224ba10245p-2, 0x1.9baaaab337555p-2, 0x1.4314f8028629fp-10, 0x1.ad26e3235a4dcp-4, +0x1.0d8b05061b161p-1, 0x1.7b5d491af6ba9p-2, 0x1.f4cdf683e99bfp-2, 0x1.1361da4a26c3bp-2, +0x1.1c1f1502383e3p-4, 0x1.7e36d572fc6dbp-3, 0x1.359f7b826b3efp-4, 0x1.89f5a8cb13eb5p-2, +0x1.5d5ad40ebab5bp-1, 0x1.e0c7555fc18ebp-1, 0x1.c2dd684385badp-2, 0x1.35b1ed8a6b63ep-1, +0x1.1276c2a224ed8p-1, 0x1.cf8e35a39f1c7p-1, 0x1.5cc6166ab98c3p-1, 0x1.6a9cc682d5399p-4, +0x1.e06d7d03c0dbp-6, 0x1.23e6559a47ccbp-1, 0x1.8c74202f18e84p-1, 0x1.22fdf63245fbfp-2, +0x1.48948d0291292p-3, 0x1.2bb88b9a57711p-2, 0x1.838b29a707165p-1, 0x1.5ee545a2bdca9p-3, +0x1.1b44097236881p-1, 0x1.d0a44167a1488p-1, 0x1.6bf71342d7ee2p-1, 0x1.9f4d1bd33e9a3p-1, +0x1.3cf32d7a79e66p-2, 0x1.6c989dc2d9314p-1, 0x1.d4f1f837a9e3fp-1, 0x1.ac049bc358093p-1, +0x1.523a1262a4742p-4, 0x1.9eb1e6eb3d63dp-2, 0x1.adac47235b589p-4, 0x1.372c93b26e592p-3, +0x1.2ee6a8d25dcd5p-1, 0x1.71a5e152e34bcp-3, 0x1.12c5f952258bfp-1, 0x1.1882f9ba3105fp-2, +0x1.e9866d83d30cep-4, 0x1.f434ad77e8696p-1, 0x1.c1f36a6783e6dp-1, 0x1.4fa790569f4f2p-1, +0x1.c3c2e3178785cp-1, 0x1.1eb980ce3d73p-1, 0x1.7cfb2926f9f65p-1, 0x1.d2c64effa58cap-1, +0x1.0a7f59a214febp-3, 0x1.096f495212de9p-1, 0x1.91152853222a5p-3, 0x1.2989f3525313ep-2, +0x1.9f4b8f233e972p-1, 0x1.e7d073bbcfa0ep-1, 0x1.d8fc9623b1f93p-2, 0x1.751f3122ea3e6p-2, +0x1.b874b52370e97p-1, 0x1.61d57942c3aafp-3, 0x1.6772d182cee5ap-3, 0x1.5bb92f72b7726p-3, +0x1.c50dfc138a1cp-1, 0x1.767564a2eceadp-4, 0x1.7973d002f2e7ap-8, 0x1.ef553e63deaa8p-1, +0x1.fc4f4013f89e8p-2, 0x1.c54384238a871p-4, 0x1.e9031a63d2063p-4, 0x1.687246e2d0e49p-4, +0x1.2a23d1ba5447ap-2, 0x1.4fe65ca29fcccp-1, 0x1.729f8b72e53f1p-2, 0x1.a4856d1b490aep-2, +0x1.441b0a1688361p-1, 0x1.ed0cc083da198p-3, 0x1.0f5237021ea47p-4, 0x1.07dded2a0fbbep-1, +0x1.99fcb0ef33f96p-1, 0x1.9ee5700b3dcaep-1, 0x1.b548784b6a90fp-2, 0x1.dc9c8757b9391p-1, +0x1.50a972b2a152ep-2, 0x1.3ee9863a7dd31p-1, 0x1.c58603f38b0cp-3, 0x1.1e8121e23d024p-3, +0x1.26b9f9f64d73fp-1, 0x1.5ddfcc0ebbbfap-1, 0x1.022fe10e045fcp-1, 0x1.be5d5e2b7cbacp-2, +0x1.b6552a636caa5p-1, 0x1.5c0c956eb8193p-1, 0x1.361cfaf26c39fp-1, 0x1.7b632672f6c65p-1, +0x1.8adb420715b68p-1, 0x1.390fe292721fcp-1, 0x1.6ab864d2d570dp-1, 0x1.1205c41a240b9p-2, +0x1.71b8531ae370ap-1, 0x1.a7d8c8234fb19p-1, 0x1.6c2255d2d844bp-2, 0x1.b28efd03651ep-7, +0x1.ef7e4983defc9p-2, 0x1.6f60f0a6dec1ep-1, 0x1.b219e5036433dp-2, 0x1.ded176a3bda2fp-4, +0x1.eaa420c7d5484p-1, 0x1.f5ee72cbebdcep-2, 0x1.43b81bfe87703p-1, 0x1.84a0d1b30941ap-1, +0x1.33b952da6772ap-2, 0x1.e5c58203cb8bp-5, 0x1.613d590ac27abp-1, 0x1.423162c68462cp-1, +0x1.5d45de5aba8bcp-1, 0x1.d29eda07a53dbp-1, 0x1.89d1ab4313a35p-1, 0x1.07ffb09a0fff6p-2, +0x1.307ea61660fd5p-1, 0x1.1803189a30063p-2, 0x1.632e8762c65d1p-1, 0x1.cda7a0eb9b4f4p-2, +0x1.e80e21bbd01c4p-1, 0x1.329704aa652e1p-2, 0x1.88dbdb9311b7bp-3, 0x1.72e963bee5d2cp-1, +0x1.d25b64e7a4b6dp-1, 0x1.ccef5bbb99debp-1, 0x1.fbec45cff7d89p-1, 0x1.4413b7fe88277p-1, +0x1.74c823dae9904p-1, 0x1.63fae16ac7f5cp-2, 0x1.4addf3f295bbep-1, 0x1.b21d2263643a4p-3, +0x1.0af30ac215e61p-4, 0x1.1f5733a23eae6p-4, 0x1.50c2eedaa185ep-2, 0x1.8050438300a08p-6, +0x1.1ee21fda3dc44p-1, 0x1.ec19936bd8332p-1, 0x1.90a353d32146ap-1, 0x1.b8bec947717d9p-1, +0x1.4ebd71029d7aep-6, 0x1.e3c159b3c782bp-2, 0x1.f5e05813ebc0bp-2, 0x1.67bbc9e2cf779p-1, +0x1.88ff0dbb11fe2p-2, 0x1.0983ae9213076p-2, 0x1.ebbba233d7774p-1, 0x1.f4fe2cf3e9fc6p-1, +0x1.10c363962186cp-1, 0x1.4eea29929dd45p-1, 0x1.b7a3facb6f47fp-2, 0x1.f1a30aa3e3461p-2, +0x1.e835abe7d06b5p-1, 0x1.3e08f44e7c11fp-1, 0x1.aeeba4335dd75p-3, 0x1.ba9110cf75222p-1, +0x1.0af8500615f0ap-1, 0x1.9e9cbb633d397p-3, 0x1.fd499193fa932p-2, 0x1.ff01cf73fe03ap-3, +0x1.19a49f9233494p-1, 0x1.260af2f24c15ep-3, 0x1.d88f78ebb11efp-2, 0x1.3b0300ea7606p-1, +0x1.b5b68cc36b6d2p-3, 0x1.94a933e329526p-1, 0x1.4705830a8e0bp-1, 0x1.8c4fc30b189f8p-1, +0x1.80c2c74b01859p-1, 0x1.af51adb35ea36p-2, 0x1.450e8c4e8a1d2p-1, 0x1.8b38b2d316716p-1, +0x1.c98983b39313p-1, 0x1.fff5c2a3ffeb8p-4, 0x1.e5e8f963cbd1fp-2, 0x1.1c12151a38243p-2, +0x1.89811f4313024p-2, 0x1.bd603dc37ac08p-2, 0x1.060e6f020c1cep-2, 0x1.d583f337ab07ep-1, +0x1.6cd243a2d9a48p-4, 0x1.5ed934e6bdb27p-1, 0x1.9caaf10b3955ep-2, 0x1.5cff4582b9fe9p-5, +0x1.39c452627388ap-2, 0x1.3a1061967420cp-1, 0x1.d0610527a0c21p-1, 0x1.a7da79374fb4fp-1, +0x1.a1b7906f436f2p-1, 0x1.9e0b9be33c173p-2, 0x1.3cd7688279aedp-4, 0x1.76b85ffaed70cp-2, +0x1.18888aae31111p-1, 0x1.13e2a98627c55p-1, 0x1.f65f30ebecbe6p-1, 0x1.85f62ddf0bec6p-1, +0x1.5117bacaa22f7p-2, 0x1.3d64b3f27ac96p-1, 0x1.1245f0e6248bep-1, 0x1.4a75256294ea5p-4, +0x1.50d8ac82a1b16p-5, 0x1.5d51f4c2baa3fp-3, 0x1.b487577f690ebp-1, 0x1.de970e7bbd2e2p-1, +0x1.2ea66b0a5d4cdp-2, 0x1.4ef7a8629def5p-2, 0x1.b28064136500dp-3, 0x1.5c13c526b8279p-1, +0x1.862bf3130c57ep-1, 0x1.df4ea10bbe9d4p-2, 0x1.3197b85e632f7p-1, 0x1.b3c63b87678c7p-1, +0x1.3a0215b274043p-3, 0x1.ffed30e3ffda6p-1, 0x1.c9962fe3932c6p-1, 0x1.d6c55d3bad8acp-2, +0x1.39fd927673fb2p-1, 0x1.99f7350733ee7p-1, 0x1.267a4faa4cf4ap-2, 0x1.b76a45cb6ed49p-2, +0x1.a3f40bd347e81p-3, 0x1.75b029caeb605p-2, 0x1.971152e32e22ap-1, 0x1.81858da3030b2p-1, +0x1.cebabe6f9d758p-1, 0x1.8d7083cb1ae1p-1, 0x1.077bbb7e0ef77p-1, 0x1.dd1a6f43ba34ep-3, +0x1.95aa6f732b54ep-2, 0x1.9c1ac60338359p-5, 0x1.412a81028255p-2, 0x1.bfc585037f8b1p-2, +0x1.c458a64388b15p-3, 0x1.54725ff2a8e4cp-3, 0x1.7cf3a1f2f9e74p-2, 0x1.08695f1a10d2cp-1, +0x1.f930d85bf261bp-2, 0x1.2b19ea025633dp-1, 0x1.91f490f323e92p-3, 0x1.0588be820b118p-2, +0x1.ac13a84358275p-5, 0x1.9614dc9b2c29cp-1, 0x1.b454d62368a9bp-4, 0x1.a506ffc34a0ep-3, +0x1.96020d7f2c042p-1, 0x1.065520020caa4p-12, 0x1.54a46e92a948ep-1, 0x1.9fff3fe33ffe8p-2, +0x1.9a17ffaf343p-1, 0x1.e7e19667cfc33p-1, 0x1.abb4c2d757698p-1, 0x1.8a8150031502ap-8, +0x1.457356928ae6bp-2, 0x1.42c615ba858c3p-1, 0x1.849a904709352p-1, 0x1.c5d1a6d38ba35p-3, +0x1.a06d330340da6p-2, 0x1.182c978230593p-2, 0x1.d1760b13a2ec1p-2, 0x1.9b0bd13f3617ap-1, +0x1.4baff04a975fep-2, 0x1.8950460b12a09p-1, 0x1.ebba4ef3d774ap-3, 0x1.16ee21b62ddc4p-1, +0x1.de6cde07bcd9cp-1, 0x1.396864ba72d0dp-1, 0x1.f5780cc3eaf02p-5, 0x1.b60a946b6c153p-2, +0x1.92093ae324127p-3, 0x1.07a94a1a0f529p-2, 0x1.5dc9a976bb935p-1, 0x1.fd0e24f3fa1c5p-3, +0x1.9e981a433d303p-5, 0x1.9454443b28a89p-1, 0x1.d10a9263a2152p-2, 0x1.afeb8f235fd72p-1, +0x1.94750ee328ea2p-1, 0x1.e94dbe03d29b8p-4, 0x1.ffacbc53ff598p-3, 0x1.2e8d0e8e5d1a2p-1, +0x1.285a712250b4ep-4, 0x1.5cff8f42b9ff2p-4, 0x1.31a2112e63442p-1, 0x1.8f89f2db1f13ep-2, +0x1.6e6607a2dccc1p-1, 0x1.6c7942e2d8f28p-2, 0x1.393963267272cp-1, 0x1.f4e50923e9ca1p-4, +0x1.4252ed3684a5ep-1, 0x1.0fa345621f469p-4, 0x1.d9a87263b350ep-1, 0x1.e82ae55bd055dp-1, +0x1.ab44aeb756896p-1, 0x1.525c1872a4b83p-3, 0x1.fe320e1bfc642p-2, 0x1.89b18cbb13632p-1, +0x1.8dff6ad71bfedp-1, 0x1.1e7087de3ce11p-1, 0x1.92db5bb325b6bp-3, 0x1.f281b98fe5037p-1, +0x1.a2452ceb448a6p-1, 0x1.c28080638501p-1, 0x1.c7150b338e2a1p-3, 0x1.bc2eae8f785d6p-1, +0x1.56d4c49eada99p-1, 0x1.5a4a8bfeb4951p-1, 0x1.6c1a3db2d8348p-1, 0x1.d693a6fbad275p-2, +0x1.977443bf2ee88p-1, 0x1.ec056cc7d80aep-1, 0x1.9d6e20833adc4p-5, 0x1.bc7f91e378ff2p-1, +0x1.7a55eac2f4abdp-5, 0x1.4b78f33696f1ep-1, 0x1.0889169a11123p-2, 0x1.860b66530c16dp-1, +0x1.b594a8036b295p-9, 0x1.bd7dee737afbep-1, 0x1.c4a8077789501p-1, 0x1.440881de8811p-1, +0x1.df72571fbee4bp-1, 0x1.9e5079d73ca0fp-1, 0x1.2c3367365866dp-1, 0x1.8ab705d3156e1p-1, +0x1.f2e77ff3e5cfp-1, 0x1.5a637202b4c6ep-4, 0x1.1468928e28d12p-1, 0x1.80e6eacb01cddp-1, +0x1.49bcf61e9379fp-1, 0x1.791f697af23edp-1, 0x1.7368a456e6d15p-1, 0x1.d804460bb0089p-2, +0x1.3b9fe9de773fdp-1, 0x1.e52de723ca5bdp-1, 0x1.5061a32aa0c34p-2, 0x1.24e95cf249d2cp-2, +0x1.3f78731e7ef0ep-1, 0x1.44b0f4428961fp-5, 0x1.7dbe81f6fb7dp-1, 0x1.add96db35bb2ep-2, +0x1.41f0200283e04p-11, 0x1.979563ff2f2acp-1, 0x1.26d891724db12p-2, 0x1.7f5dab42febb5p-5, +0x1.c61cae638c396p-2, 0x1.17b0d40a2f61bp-1, 0x1.9e0141073c028p-1, 0x1.c987d7b3930fbp-2, +0x1.aa5d84f354bb1p-2, 0x1.62a9487ac5529p-1, 0x1.46636da28cc6ep-4, 0x1.69423332d2846p-2, +0x1.00f9c24e01f38p-1, 0x1.54ffd4eaa9ffbp-1, 0x1.fac0fb43f581fp-4, 0x1.e7c28483cf851p-2, +0x1.804c432f00988p-1, 0x1.53c0b1f6a7816p-1, 0x1.d320b423a6417p-3, 0x1.941272932824ep-2, +0x1.99c036e333807p-2, 0x1.e830d15fd061ap-1, 0x1.b60b5c536c16cp-1, 0x1.1000a98220015p-6, +0x1.cd5eb8839abd7p-1, 0x1.78f0b792f1e17p-3, 0x1.35e9678a6bd2dp-2, 0x1.0cd72b9e19ae5p-1, +0x1.ca1cf4a39439fp-3, 0x1.8b335b831666bp-5, 0x1.e3c3e27bc787cp-1, 0x1.cb5ee4c396bddp-3, +0x1.b04899b760913p-1, 0x1.dcc0acc3b9816p-3, 0x1.159b27ca2b365p-2, 0x1.26ade1ca4d5bcp-2, +0x1.8ee0ff3b1dc2p-1, 0x1.4676a7628ced5p-4, 0x1.781adcc2f035cp-1, 0x1.903f06d3207e1p-3, +0x1.8b781d6716f04p-1, 0x1.a0e74a7741ce9p-1, 0x1.18b0db4e3161bp-1, 0x1.18e3bf6a31c78p-2, +0x1.ebce3ec3d79c8p-2, 0x1.5808fab6b011fp-1, 0x1.805321f700a64p-1, 0x1.d8cd8a33b19b1p-3, +0x1.5793595aaf26bp-2, 0x1.f51b4effea36ap-1, 0x1.403c9bd680793p-1, 0x1.78a9c81ef1539p-1, +0x1.dd4c205bba984p-1, 0x1.ec8ff04bd91fep-2, 0x1.8129cd6b0253ap-1, 0x1.aaaad8db5555bp-1, +0x1.5484260aa9085p-1, 0x1.c1e812c383d02p-5, 0x1.6f0408f2de081p-2, 0x1.c70b63338e16cp-1, +0x1.a68db7234d1b7p-4, 0x1.368bcde26d17ap-2, 0x1.cf18e3039e31cp-4, 0x1.e51a509bca34ap-1, +0x1.1276122224ec2p-1, 0x1.8961609312c2cp-2, 0x1.e1c505f3c38a1p-3, 0x1.42ae22ba855c4p-2, +0x1.daff0a6bb5fe1p-2, 0x1.f08c1e3fe1184p-1, 0x1.0566d3120acdap-1, 0x1.e3de8a63c7bd1p-3, +0x1.917368b722e6dp-1, 0x1.e17ae5c3c2f5dp-5, 0x1.0569824e0ad3p-1, 0x1.0eb5102a1d6a2p-2, +0x1.7620a912ec415p-1, 0x1.0b79488216f29p-2, 0x1.fb1bd543f637bp-2, 0x1.0f52ade21ea56p-4, +0x1.eb5fccf3d6bfap-3, 0x1.ee5433a3dca86p-4, 0x1.9a941ddb35284p-1, 0x1.60904e62c120ap-3, +0x1.34127e9e6825p-1, 0x1.1bbdeb42377bdp-1, 0x1.67763802ceec7p-8, 0x1.112d494a225a9p-2, +0x1.37dc6c6e6fb8ep-1, 0x1.74a1e1d2e943cp-2, 0x1.3e881f627d104p-3, 0x1.6cae2352d95c4p-1, +0x1.5596d7daab2dbp-1, 0x1.130a487226149p-2, 0x1.51c873eaa390ep-1, 0x1.a033a7f340675p-3, +0x1.4e35d4829c6bbp-1, 0x1.ca39b56b94737p-1, 0x1.0963fb5a12c7fp-1, 0x1.ddaacda3bb55ap-4, +0x1.bac5d3a7758bap-1, 0x1.d959cd03b2b3ap-6, 0x1.6959f8a2d2b3fp-2, 0x1.4c393c5a98728p-1, +0x1.6713e622ce27dp-4, 0x1.ba167e9f742dp-1, 0x1.d393c46fa7279p-1, 0x1.a30325d746065p-1, +0x1.fe991703fd323p-4, 0x1.a2435e1b4486cp-2, 0x1.c4ed7b9789dafp-1, 0x1.75562c3aeaac6p-2, +0x1.0eec35861dd87p-1, 0x1.5f81996ebf033p-1, 0x1.12cf29b6259e5p-1, 0x1.0bfad08217f5ap-3, +0x1.ecfe12c3d9fc2p-3, 0x1.159e162a2b3c3p-1, 0x1.972ab18b2e556p-2, 0x1.b31bf11f6637ep-1, +0x1.cfef07139fde1p-1, 0x1.1b37609e366ecp-1, 0x1.1fca14723f943p-1, 0x1.2585deee4b0bcp-1, +0x1.a4bc84db49791p-1, 0x1.c64a21638c944p-3, 0x1.8d92c8eb1b259p-1, 0x1.e5e4b2b3cbc96p-2, +0x1.de61ee03bcc3ep-4, 0x1.2ded88825bdb1p-2, 0x1.2ea7b3125d4f6p-1, 0x1.f692116bed242p-1, +0x1.4b83255297065p-2, 0x1.e354af63c6a96p-1, 0x1.42cb4dc28596ap-1, 0x1.a5481edb4a904p-2, +0x1.9d6b2dff3ad66p-1, 0x1.165f12322cbe2p-1, 0x1.d69cd503ad39bp-3, 0x1.dd3e50dfba7cap-1, +0x1.e780c13fcf018p-1, 0x1.d4a586a3a94b1p-4, 0x1.2fd2cdfa5fa5ap-2, 0x1.ecd9ed83d9b3ep-2, +0x1.9a164a47342c9p-1, 0x1.aab890b355712p-1, 0x1.396baae272d75p-1, 0x1.555cef42aab9ep-5, +0x1.80ad4db3015aap-2, 0x1.4040ea028081dp-7, 0x1.c871c01390e38p-1, 0x1.208b5bda4116bp-2, +0x1.203864464070dp-1, 0x1.d077a903a0ef5p-2, 0x1.b5cb8cdb6b972p-1, 0x1.89e9d23b13d3ap-2, +0x1.59ce5cdeb39ccp-1, 0x1.435e55c286bcbp-1, 0x1.b7e7427b6fce8p-1, 0x1.959a9a9f2b353p-1, +0x1.da551a03b4aa3p-1, 0x1.cd1deb139a3bdp-2, 0x1.8c2cac0718596p-1, 0x1.002d5952005abp-2, +0x1.93c749d3278e9p-2, 0x1.9deff3933bdfep-2, 0x1.52babc16a5758p-1, 0x1.9d3b4b933a769p-3, +0x1.e5570bfbcaae1p-1, 0x1.c861f15790c3ep-1, 0x1.12348f1224692p-3, 0x1.ccd7cd3799afap-1, +0x1.7b511602f6a23p-8, 0x1.b8ed158371da3p-2, 0x1.868987f30d131p-2, 0x1.9d0cec733a19ep-1, +0x1.0e5e36e21cbc7p-2, 0x1.fcb06edbf960ep-1, 0x1.b262bb6764c57p-1, 0x1.4785c24e8f0b8p-1, +0x1.b172800362e5p-9, 0x1.7ad47b76f5a8fp-1, 0x1.d7cb703baf96ep-1, 0x1.21e9d6ca43d3bp-1, +0x1.8c413fe318828p-3, 0x1.8d96fd131b2ep-1, 0x1.e6debfe7cdbd8p-1, 0x1.bcdeacd779bd6p-1, +0x1.a1eaa5a343d55p-2, 0x1.9ec6025f3d8cp-1, 0x1.52794772a4f29p-1, 0x1.5694d9a2ad29bp-2, +0x1.0aa9efca1553ep-2, 0x1.bd4be6f37a97dp-2, 0x1.2b61197a56c23p-1, 0x1.4f389cce9e714p-1, +0x1.ad9ded435b3bep-1, 0x1.f86f5633f0debp-3, 0x1.b6876fb76d0eep-1, 0x1.92f4f93b25e9fp-1, +0x1.19f71b8233ee3p-3, 0x1.fb14937bf6292p-1, 0x1.5fccc66ebf999p-1, 0x1.25d1a4324ba35p-3, +0x1.af163c735e2c8p-2, 0x1.188c53223118ap-4, 0x1.e681557fcd02bp-1, 0x1.5eba39aabd747p-1, +0x1.fc1f9403f83f3p-5, 0x1.98e410e331c82p-1, 0x1.4c7ff7ea98fffp-2, 0x1.0b9b5e021736cp-4, +0x1.13b88c5a27712p-1, 0x1.f82db0b3f05b6p-3, 0x1.435d428a86ba8p-1, 0x1.76c8dc52ed91cp-1, +0x1.744d2782e89a5p-6, 0x1.2a3c02725478p-1, 0x1.33a78926674f1p-1, 0x1.b92f781b725efp-2, +0x1.9204099b24081p-2, 0x1.0c41a12a18834p-2, 0x1.87e228df0fc45p-1, 0x1.4e56fcb69caep-1, +0x1.64c6c40ec98d9p-1, 0x1.668684aacd0d1p-2, 0x1.3b1f3302763e6p-2, 0x1.1264b14e24c96p-1, +0x1.315f17e262be3p-1, 0x1.505c24d2a0b85p-3, 0x1.4ab3550a9566bp-2, 0x1.77dcdec6efb9cp-1, +0x1.3cae72b2795cep-3, 0x1.499c3d0293388p-7, 0x1.c15147d382a29p-1, 0x1.26b6bae64d6d7p-1, +0x1.41bfdac2837fbp-4, 0x1.a7d29d534fa54p-1, 0x1.0ae1e92215c3dp-2, 0x1.1fe7d2623fcfap-3, +0x1.40b6ae32816d6p-1, 0x1.2bb0f0865761ep-1, 0x1.a5b581734b6bp-3, 0x1.51bcea22a379dp-3, +0x1.a9bc5cb75378cp-1, 0x1.accaa2e759954p-1, 0x1.cb3816db96703p-1, 0x1.b55ec5f36abd9p-1, +0x1.ae0d4aab5c1a9p-2, 0x1.fdbf3ffbfb7e8p-2, 0x1.23ed040247da1p-2, 0x1.a008aa2740115p-1, +0x1.850070970a00ep-1, 0x1.9d8aadc33b156p-5, 0x1.dcbf4db3b97eap-2, 0x1.d38e6943a71cdp-2, +0x1.9a37da6b346fbp-2, 0x1.8bef405b17de8p-1, 0x1.fc2be5f3f857dp-1, 0x1.fe7b0517fcf61p-1, +0x1.e0064993c00c9p-1, 0x1.430b20ea86164p-2, 0x1.7657e3daecafcp-1, 0x1.798f31e2f31e6p-4, +0x1.4d5802d29abp-2, 0x1.37a92bae6f525p-1, 0x1.55e8a126abd14p-1, 0x1.9dc7f98b3b8ffp-2, +0x1.bef791fb7def2p-2, 0x1.db5995b7b6b33p-1, 0x1.16ddf15e2dbbep-1, 0x1.0193b96203277p-4, +0x1.070a863a0e151p-1, 0x1.804b51bb0096ap-1, 0x1.d286c6e3a50d9p-3, 0x1.618dc5dac31b9p-2, +0x1.2d15f4a25a2bfp-1, 0x1.fece4483fd9c9p-4, 0x1.9896a383312d4p-3, 0x1.07267d020e4dp-7, +0x1.3eb968927d72dp-1, 0x1.f03855c3e070bp-2, 0x1.a425441b484a9p-1, 0x1.8773b24b0ee76p-2, +0x1.11f4d5be23e9bp-1, 0x1.2509d5e24a13bp-2, 0x1.ad810dc75b022p-1, 0x1.df10c2f3be218p-1, +0x1.e742b4c3ce857p-5, 0x1.a9acf3b75359ep-1, 0x1.dd8bc80bbb179p-1, 0x1.fe7a74dffcf4fp-1, +0x1.2cca10b259942p-3, 0x1.53e3abe2a7c75p-1, 0x1.6d62d8c2dac5bp-4, 0x1.e3bd0b2bc77a1p-2, +0x1.1719af1a2e336p-2, 0x1.8394fc3f072ap-1, 0x1.c0c2825b8185p-1, 0x1.6b08a08ad6114p-1, +0x1.5eee91f2bddd2p-1, 0x1.af40e7735e81dp-2, 0x1.8b3b17bb16763p-1, 0x1.97e460b32fc8cp-3, +0x1.5faf15c2bf5e3p-3, 0x1.ffdcc973ffb99p-1, 0x1.16bffb1a2d7ffp-1, 0x1.8501ba130a037p-1, +0x1.fdb49003fb692p-4, 0x1.7ce5a3faf9cb4p-1, 0x1.891e540b123cbp-1, 0x1.7e6ffa92fcdffp-1, +0x1.d4073b63a80e7p-3, 0x1.2d4398225a873p-1, 0x1.08a74ed2114eap-3, 0x1.86f6a49b0ded5p-1, +0x1.bfc883177f91p-1, 0x1.efaae17fdf55cp-1, 0x1.6607678acc0edp-1, 0x1.de3cae63bc796p-1, +0x1.9957d53332afbp-1, 0x1.43932f9287266p-1, 0x1.dcb7233fb96e4p-1, 0x1.e48a595fc914bp-1, +0x1.2eedb6ea5ddb7p-2, 0x1.4c6fca8298df9p-6, 0x1.acd1bdeb59a38p-2, 0x1.2303b30246076p-1, +0x1.8df87a971bf0fp-1, 0x1.2e56c29a5cad8p-2, 0x1.1c18a71a38315p-2, 0x1.d9ce190bb39c3p-2, +0x1.6ecbd506dd97bp-1, 0x1.9476b44328ed7p-5, 0x1.52e024b2a5c05p-1, 0x1.c6b79a7b8d6f3p-1, +0x1.92434b4324869p-5, 0x1.a6807f334d01p-3, 0x1.4bb9548a9772bp-1, 0x1.636b1ad2c6d63p-3, +0x1.e685c3c7cd0b8p-1, 0x1.a9af5123535eap-2, 0x1.d74ac14bae958p-1, 0x1.6e1e4a82dc3c9p-3, +0x1.0da05a021b40bp-8, 0x1.97494fc32e92ap-5, 0x1.e27e373bc4fc7p-1, 0x1.c1e3c3cb83c78p-1, +0x1.23eecf0247ddap-6, 0x1.48859ec2910b4p-1, 0x1.a020722b4040ep-1, 0x1.a2774baf44ee9p-1, +0x1.18319caa30634p-2, 0x1.7cd79566f9af3p-1, 0x1.8701a50b0e035p-1, 0x1.238fa9ca471f5p-1, +0x1.873b13bb0e762p-1, 0x1.75aa0ff2eb542p-3, 0x1.1a4d7322349aep-3, 0x1.15338e4e2a672p-1, +0x1.e92bca9bd2579p-2, 0x1.a93f60ab527ecp-2, 0x1.0d4d6a021a9adp-8, 0x1.8d86e9431b0ddp-3, +0x1.dbce3733b79c7p-2, 0x1.54fabf86a9f58p-1, 0x1.50caa642a1955p-4, 0x1.070b504e0e16ap-1, +0x1.be9adf537d35cp-1, 0x1.75d2a956eba55p-1, 0x1.5fe61706bfcc3p-1, 0x1.a520a31b4a414p-1, +0x1.2aa9479255529p-3, 0x1.3730d84e6e61bp-1, 0x1.506b7002a0d6ep-10, 0x1.33164a62662c9p-3, +0x1.50a56d4aa14aep-1, 0x1.e3266cf3c64cep-1, 0x1.d52acc03aa55ap-6, 0x1.59c4e3c6b389cp-1, +0x1.2bac0bb257581p-1, 0x1.aec9c88b5d939p-1, 0x1.f8785ee3f0f0cp-2, 0x1.b7c4da076f89bp-1, +0x1.2ba15dee5742cp-1, 0x1.067ba8f20cf75p-2, 0x1.b6a9079b6d521p-2, 0x1.65b8e352cb71cp-2, +0x1.c150b0f382a16p-2, 0x1.21e7e09a43cfcp-1, 0x1.c80ffff7902p-1, 0x1.d53e3dc7aa7c8p-1, +0x1.f68790efed0f2p-1, 0x1.ca2a9acb94553p-1, 0x1.c4ffc0a389ff8p-4, 0x1.c8dd591391babp-2, +0x1.1f255a523e4abp-1, 0x1.8ae5338315ca6p-3, 0x1.eb79fcd7d6f4p-1, 0x1.bb8073437700ep-2, +0x1.d88bf637b117fp-1, 0x1.4b6013da96c02p-1, 0x1.05c1b9720b837p-2, 0x1.19b240c233648p-4, +0x1.0521d84a0a43bp-2, 0x1.071224e20e245p-2, 0x1.bfef6ad37fdedp-3, 0x1.d3365973a66cbp-1, +0x1.9abdfd83357cp-3, 0x1.fa94c453f5299p-3, 0x1.2cfb3d3659f68p-1, 0x1.925b8b1724b71p-1, +0x1.6b77cd02d6efap-4, 0x1.49bb65229376dp-4, 0x1.4a20651a9440dp-1, 0x1.5910578eb220bp-1, +0x1.58ea823ab1d5p-2, 0x1.2ba74742574e9p-4, 0x1.7d992682fb325p-6, 0x1.8d1d99971a3b3p-1, +0x1.475cc9828eb99p-1, 0x1.d3fcc92fa7f99p-1, 0x1.625bd75ac4b7bp-1, 0x1.3de45a6e7bc8bp-1, +0x1.9e2763f73c4ecp-1, 0x1.9afbcf7335f7ap-1, 0x1.129837a225307p-4, 0x1.7a997c8af533p-2, +0x1.fdb51c53fb6a4p-1, 0x1.b9a079837340fp-6, 0x1.9b0cf7eb3619fp-1, 0x1.d6411287ac822p-1, +0x1.592d17a6b25a3p-1, 0x1.dedd4a03bdba9p-5, 0x1.f9775a9ff2eebp-1, 0x1.dbbe03cfb77cp-1, +0x1.42edce2a85dbap-2, 0x1.a5ccd5434b99bp-3, 0x1.aef45d3f5de8cp-1, 0x1.08266676104cdp-1, +0x1.d030ccd3a061ap-2, 0x1.b7df34e36fbe7p-2, 0x1.3503e3126a07cp-2, 0x1.1587600a2b0ecp-1, +0x1.052707160a4e1p-1, 0x1.e4a256a7c944bp-1, 0x1.ba5ede5374bdcp-3, 0x1.b19c483363389p-1, +0x1.42e7f18285cfep-6, 0x1.ea120333d424p-3, 0x1.3eb9e1ca7d73cp-1, 0x1.5174090ea2e81p-1, +0x1.3a0527e2740a5p-3, 0x1.422b72428456ep-2, 0x1.1eb0c6f23d619p-2, 0x1.eca8adefd9516p-1, +0x1.e08c4483c1189p-4, 0x1.6356d4e2c6adbp-2, 0x1.53ead86aa7d5bp-2, 0x1.ce3527039c6a5p-4, +0x1.7ef0dc7afde1cp-2, 0x1.1409907228132p-3, 0x1.007b764200f6fp-5, 0x1.8a585e0314b0cp-5, +0x1.8bc0e2f31781cp-3, 0x1.2fe240825fc48p-6, 0x1.f46389afe8c71p-1, 0x1.04671fd208ce4p-1, +0x1.cbc91d5397924p-3, 0x1.a357e6eb46afdp-1, 0x1.91b0c90323619p-6, 0x1.5b0aadbeb6156p-1, +0x1.fd1e0563fa3c1p-3, 0x1.4e1eefa29c3dep-2, 0x1.c248371384907p-3, 0x1.846e886f08dd1p-1, +0x1.17639cea2ec74p-2, 0x1.be538abb7ca71p-2, 0x1.360ad0a26c15ap-1, 0x1.2b921c0257244p-2, +0x1.59ae462ab35c9p-1, 0x1.d312c9a3a6259p-3, 0x1.e73d170fce7a3p-1, 0x1.a82f9023505f2p-1, +0x1.15da6b8a2bb4dp-1, 0x1.da55ea23b4abdp-3, 0x1.94d83e0f29b08p-1, 0x1.51ebf41ea3d7fp-1, +0x1.2840e4fa5081dp-1, 0x1.f66d5203ecdaap-4, 0x1.8bb298ff17653p-1, 0x1.e7b95337cf72ap-1, +0x1.07a01cba0f404p-2, 0x1.9bba50673774ap-1, 0x1.7b645002f6c8ap-11, 0x1.cd808e3b9b012p-2, +0x1.a539626b4a72cp-1, 0x1.f4c262c7e984cp-1, 0x1.eb2766efd64edp-1, 0x1.82ba9bc305753p-5, +0x1.981a49af30349p-1, 0x1.f7b4ed37ef69ep-1, 0x1.7336577ee66cbp-1, 0x1.761cb082ec396p-5, +0x1.3d88ca127b119p-2, 0x1.e3c86543c790dp-1, 0x1.9bd0537737a0ap-1, 0x1.2a76337e54ec6p-1, +0x1.85e4553b0bc8bp-2, 0x1.a3b6482b476c9p-2, 0x1.c03f4183807e8p-1, 0x1.ca070c43940e2p-5, +0x1.469fd67e8d3fbp-1, 0x1.a77c588f4ef8bp-1, 0x1.c4d000e789ap-1, 0x1.71e90822e3d21p-3, +0x1.e11d3143c23a6p-5, 0x1.59a83ef6b3508p-1, 0x1.ae6636275ccc7p-1, 0x1.4652b80e8ca57p-1, +0x1.9875e93730ebdp-1, 0x1.3a18cf227431ap-1, 0x1.2e0c0b425c181p-1, 0x1.c45f794388befp-5, +0x1.aba63f0b574c8p-2, 0x1.2e6ae45a5cd5dp-1, 0x1.03063eb2060c8p-1, 0x1.ec3207b3d8641p-3, +0x1.232d471e465a9p-1, 0x1.dc5b4b3bb8b69p-2, 0x1.2670575a4ce0bp-2, 0x1.768f2192ed1e4p-2, +0x1.cbc525ab978a5p-2, 0x1.9ba0ca0337419p-7, 0x1.a552b7a34aa57p-2, 0x1.84a6f7df094dfp-1, +0x1.ea36e86bd46ddp-1, 0x1.b9e6bd2373cd8p-3, 0x1.5e3a56b2bc74bp-2, 0x1.5a522612b4a45p-2, +0x1.4054d35e80a9ap-1, 0x1.bd71b3637ae36p-3, 0x1.9393079b27261p-2, 0x1.0de953ba1bd2ap-2, +0x1.6d8c5682db18bp-5, 0x1.1d33096a3a661p-2, 0x1.c6ddd7cb8dbbbp-2, 0x1.a754c3e34ea98p-4, +0x1.e841c3abd0838p-1, 0x1.23aa441247549p-2, 0x1.7b3d508ef67aap-1, 0x1.80b7acdf016f6p-1, +0x1.cbedf12b97dbep-1, 0x1.5292b79aa5257p-2, 0x1.9cfda47339fb5p-1, 0x1.4382216287044p-2, +0x1.d7b44027af688p-1, 0x1.4007c642800f9p-2, 0x1.1ccd929e399b2p-1, 0x1.f5c30e83eb862p-2, +0x1.8e3188c31c631p-1, 0x1.b005be4b600b8p-1, 0x1.b629180f6c523p-1, 0x1.d0506e53a0a0ep-3, +0x1.b67441736ce88p-1, 0x1.11a4e7ba2349dp-2, 0x1.f8bb1373f1762p-1, 0x1.a0ab29df41565p-1, +0x1.ee98464bdd309p-2, 0x1.4fb07d929f61p-2, 0x1.3750f3926ea1ep-3, 0x1.bd07b4237a0f7p-4, +0x1.1734aba62e695p-1, 0x1.179dc0b22f3b8p-1, 0x1.7d2b40c2fa568p-2, 0x1.2e0d710e5c1aep-1, +0x1.a63745674c6e9p-1, 0x1.a2048c4744092p-1, 0x1.62f8098ac5f01p-1, 0x1.8e79090f1cf21p-1, +0x1.9ecd72633d9aep-4, 0x1.bc6ab42b78d57p-2, 0x1.0f30b5ee1e617p-1, 0x1.ffc79f77ff8f4p-1, +0x1.877eb5e70efd7p-1, 0x1.585cb4bab0b97p-2, 0x1.4311604a8622cp-2, 0x1.5f32f60abe65fp-1, +0x1.4c323d8298648p-1, 0x1.be5642c77cac8p-1, 0x1.6851f532d0a3fp-3, 0x1.b4c78c83698f2p-2, +0x1.6e5c010edcb8p-1, 0x1.03d9558207b2bp-5, 0x1.4e77e1d69cefcp-1, 0x1.24d0428249a08p-1, +0x1.3220126a64402p-2, 0x1.4732f5468e65fp-1, 0x1.8af6d8bb15edbp-2, 0x1.905c2c5f20b86p-1, +0x1.ef0b340fde167p-1, 0x1.134fa942269f5p-1, 0x1.c7fd22e38ffa4p-1, 0x1.063fdfb20c7fcp-1, +0x1.576b4f82aed6ap-4, 0x1.0d2586821a4b1p-2, 0x1.a26a85e344d51p-4, 0x1.d124af5ba2496p-1, +0x1.44ba7c228975p-4, 0x1.97455a4b2e8abp-1, 0x1.5f9db866bf3b7p-1, 0x1.71c3f742e387fp-3, +0x1.d5ead173abd5ap-3, 0x1.bb39b94376737p-3, 0x1.70e27512e1c4fp-3, 0x1.fcf96a43f9f2dp-1, +0x1.1afcc8b235f99p-1, 0x1.fb829adbf7053p-2, 0x1.5c2c604eb858cp-1, 0x1.9cbc18c339783p-3, +0x1.782f2062f05e4p-2, 0x1.b640dd9b6c81cp-1, 0x1.4192cc728325ap-1, 0x1.539c89e2a7391p-4, +0x1.c67e72f38cfcep-1, 0x1.20155c8a402acp-2, 0x1.4f43d3be9e87ap-1, 0x1.7e39f092fc73ep-3, +0x1.d73da38bae7b4p-1, 0x1.4bf4018297e8p-5, 0x1.efeaa883dfd55p-1, 0x1.c648d7978c91bp-1, +0x1.280ee95a501ddp-1, 0x1.b7e7cb636fcf9p-1, 0x1.99116e933222ep-2, 0x1.52fc534ea5f8ap-1, +0x1.f3d47503e7a8fp-4, 0x1.00d6080601ac1p-1, 0x1.242102a64842p-1, 0x1.9c477893388efp-3, +0x1.3036c49a606d9p-2, 0x1.077d76120efafp-2, 0x1.8705b7eb0e0b7p-2, 0x1.0d9616ae1b2c3p-1, +0x1.e51a52bbca34ap-2, 0x1.1fbb793e3f76fp-1, 0x1.0a8f80ee151fp-1, 0x1.b13e4183627c8p-6, +0x1.d7cc6a83af98dp-5, 0x1.9aef84e335df1p-3, 0x1.d2e3e0f3a5c7cp-3, 0x1.b328adb366516p-2, +0x1.cfcbed039f97ep-5, 0x1.b64bc4af6c979p-1, 0x1.0407e816080fdp-1, 0x1.e37b31c3c6f66p-1, +0x1.1959cbc232b39p-3, 0x1.4d2eef529a5dep-3, 0x1.0c26b7a2184d7p-3, 0x1.d9416783b282dp-5, +0x1.a02befb34057ep-3, 0x1.97a2b3432f456p-4, 0x1.e3dcee0fc7b9ep-1, 0x1.9019e54b2033dp-1, +0x1.eadc21cfd5b84p-1, 0x1.60cb4aaac1969p-2, 0x1.c62c712b8c58ep-2, 0x1.4ab58362956bp-4, +0x1.b13bad5f62776p-1, 0x1.cdcece039b9dap-7, 0x1.20d11d2a41a24p-2, 0x1.255c3ea24ab88p-3, +0x1.15ebec822bd7ep-2, 0x1.53eb6a8aa7d6dp-1, 0x1.56ed2656adda5p-1, 0x1.7d831f9efb064p-1, +0x1.ce9b8f139d372p-3, 0x1.85f29d130be54p-3, 0x1.8b0d11ab161a2p-1, 0x1.224754da448ebp-2, +0x1.907110fb20e22p-2, 0x1.ffc609e7ff8c1p-1, 0x1.6ab80146d57p-1, 0x1.ca6a8ea394d52p-2, +0x1.b611ce936c23ap-1, 0x1.baffa57375ff5p-3, 0x1.9160f22322c1ep-2, 0x1.fc684183f8d08p-1, +0x1.84174a63082e9p-2, 0x1.0bba26fa17745p-1, 0x1.9fc57f833f8bp-5, 0x1.2a16a11e542d4p-1, +0x1.3eae7d667d5dp-1, 0x1.fdd9460bfbb29p-1, 0x1.74610ccae8c22p-2, 0x1.298a9f3253154p-1, +0x1.5c7dd6bab8fbbp-2, 0x1.9d46befb3a8d8p-1, 0x1.52e14f9ea5c2ap-1, 0x1.7dea62e2fbd4cp-3, +0x1.a47dfa3348fbfp-1, 0x1.e349de33c693cp-1, 0x1.51a350caa346ap-2, 0x1.7b9f83a2f73fp-4, +0x1.373548be6e6a9p-1, 0x1.ffbecebbff7dap-1, 0x1.acf7101359ee2p-1, 0x1.aadc2c8355b86p-1, +0x1.84edd7f309dbbp-3, 0x1.380421be70084p-1, 0x1.dffeb783bffd7p-4, 0x1.2973fe7e52e8p-1, +0x1.37ca2ba26f945p-1, 0x1.a6b7d8374d6fbp-1, 0x1.d528b983aa517p-6, 0x1.dbb7f46bb76ffp-2, +0x1.577c1902aef83p-5, 0x1.aeb37dbb5d67p-2, 0x1.d488776ba910fp-2, 0x1.af06cd835e0dap-2, +0x1.e313e5dbc627dp-1, 0x1.044093b208812p-1, 0x1.9a07e003340fcp-9, 0x1.21c2633e4384cp-1, +0x1.0219d9ba0433bp-1, 0x1.77951c8aef2a4p-2, 0x1.2d3409b25a681p-3, 0x1.b058c51760b19p-1, +0x1.64453502c88a7p-3, 0x1.9e2e520b3c5cap-1, 0x1.fa6bba03f4d77p-6, 0x1.fd8f4773fb1e9p-1, +0x1.8178303f02f06p-1, 0x1.714a0c6ae2942p-2, 0x1.6819bf22d0338p-4, 0x1.715af1f2e2b5ep-2, +0x1.70c7a9dae18f5p-2, 0x1.d9fa47fbb3f49p-1, 0x1.8e2695e31c4d3p-3, 0x1.199f4aee333e9p-1, +0x1.11fe69b623fcdp-1, 0x1.3f12f8d27e25fp-2, 0x1.0c4d25a2189a5p-3, 0x1.272255524e44bp-3, +0x1.19055282320aap-3, 0x1.46f23cd28de48p-3, 0x1.37a48f8a6f492p-1, 0x1.6ee458c2ddc8bp-3, +0x1.29164e12522cap-1, 0x1.0f465a021e8cbp-4, 0x1.333c7cf66679p-1, 0x1.0c2a33ea18546p-1, +0x1.26295ef24c52cp-1, 0x1.34d684d669ad1p-1, 0x1.6f64b922dec97p-4, 0x1.4219c54284339p-4, +0x1.f0a1131be1422p-1, 0x1.e4e66643c9ccdp-3, 0x1.d89bfdbfb138p-1, 0x1.26c981624d93p-3, +0x1.767eb9c2ecfd7p-5, 0x1.e86f5b8fd0debp-1, 0x1.1d069f323a0d4p-3, 0x1.98e01bdb31c03p-1, +0x1.4228c38284518p-2, 0x1.d1137ec3a227p-3, 0x1.463653428c6cap-3, 0x1.597836b2b2f07p-1, +0x1.38fc9ea271f94p-3, 0x1.6a2e7492d45cfp-2, 0x1.cc5e067398bc1p-3, 0x1.603d915ec07b2p-1, +0x1.54a0b6b6a9417p-1, 0x1.6c55960ad8ab3p-2, 0x1.aa0626b7540c5p-1, 0x1.9ae20b5735c41p-1, +0x1.07e75a3a0fcebp-1, 0x1.c3556c7b86aaep-2, 0x1.f69b2187ed364p-1, 0x1.87ed42430fda8p-4, +0x1.0393817e0727p-1, 0x1.29d79e7a53af4p-1, 0x1.3d27dc367a4fcp-1, 0x1.4de703629bcep-4, +0x1.7ab88d32f5712p-3, 0x1.6b14735ad628ep-1, 0x1.480064529000dp-3, 0x1.3d3cd9a27a79bp-3, +0x1.e44e0cefc89c2p-1, 0x1.54e0b6a2a9c17p-4, 0x1.32032d8264066p-2, 0x1.fbb5f88bf76bfp-1, +0x1.30b72602616e5p-5, 0x1.c0867d1b810dp-2, 0x1.94961463292c3p-1, 0x1.683fa84ad07f5p-2, +0x1.54881e42a9104p-1, 0x1.e623a933cc475p-1, 0x1.b3015a836602bp-6, 0x1.a2c745eb458e9p-1, +0x1.3675c6f26ceb9p-2, 0x1.015f18e202be3p-2, 0x1.0304d74a0609bp-1, 0x1.efdb9a2fdfb73p-1, +0x1.36da57766db4bp-1, 0x1.5a15fbfab42bfp-2, 0x1.8abda583157b5p-1, 0x1.f60d8d63ec1b2p-4, +0x1.8eb5b43b1d6b7p-1, 0x1.8158c70b02b19p-1, 0x1.befd67d37dfadp-3, 0x1.24926b724924dp-2, +0x1.5660cb02acc19p-2, 0x1.ace7362b59ce7p-1, 0x1.780c2c4af0186p-2, 0x1.09de88d213bd1p-1, +0x1.17fba9862ff75p-1, 0x1.0e062f3e1c0c6p-1, 0x1.592dbf3ab25b8p-1, 0x1.f8936ce3f126ep-2, +0x1.38a2461271449p-1, 0x1.f22f55fbe45ebp-1, 0x1.efff5df3dffecp-2, 0x1.4badb872975b7p-1, +0x1.a4e5291349ca5p-2, 0x1.192b86b232571p-2, 0x1.ffcd8c97ff9b2p-1, 0x1.37d596426fab3p-4, +0x1.cae5b22395cb6p-3, 0x1.acb2ed035965ep-6, 0x1.c9c1f8b39383fp-1, 0x1.0df450021be8ap-1, +0x1.1c2a47b238549p-2, 0x1.998d9ff3331b4p-2, 0x1.fb9fd463f73fbp-2, 0x1.c4ef7b4f89defp-1, +0x1.79d1cdf6f3a3ap-1, 0x1.111b1f6222364p-2, 0x1.d8967c03b12dp-8, 0x1.08878232110fp-1, +0x1.3ccad7027995bp-6, 0x1.cdc21bc39b843p-3, 0x1.9ad0b7eb35a17p-1, 0x1.6a2d787ad45afp-2, +0x1.02bde8c2057bdp-4, 0x1.5b5b3832b6b67p-3, 0x1.bef5450f7dea9p-1, 0x1.3853669e70a6dp-1, +0x1.64dcfd4ac9bap-1, 0x1.1823044630461p-1, 0x1.a4e8e86349d1dp-4, 0x1.3afe86b275fd1p-2, +0x1.0a525a3e14a4bp-1, 0x1.2c9ccc065939ap-1, 0x1.e92cfbcfd259fp-1, 0x1.dcc4eec7b989ep-1, +0x1.b9328f5f72652p-1, 0x1.e8fa8863d1f51p-1, 0x1.dfd0c603bfa19p-8, 0x1.5f5fdf22bebfcp-4, +0x1.f6601fcfecc04p-1, 0x1.cd819a439b033p-1, 0x1.39e04bea73c09p-1, 0x1.08ea874a11d51p-2, +0x1.3490d4726921bp-2, 0x1.bd81b0c37b036p-4, 0x1.2592fbd24b25fp-3, 0x1.41a383028347p-5, +0x1.807b8b9300f71p-2, 0x1.3457afb268af6p-3, 0x1.1ca1ba6239437p-1, 0x1.9448390b28907p-2, +0x1.810ce5bb0219dp-2, 0x1.6ee4e492ddc9dp-2, 0x1.7f3ad8c2fe75bp-1, 0x1.c1bc5ff38378cp-2, +0x1.0e4940561c928p-1, 0x1.3e301dce7c604p-1, 0x1.931969432632dp-5, 0x1.cc98f6839931fp-3, +0x1.594c8842b2991p-3, 0x1.373ace926e75ap-3, 0x1.10a580fa214bp-1, 0x1.60a57c4ec14bp-1, +0x1.7a6b7faaf4d7p-1, 0x1.f3a4f98be749fp-2, 0x1.3d6a6b167ad4dp-1, 0x1.339e0f0a673c2p-1, +0x1.c59a0a538b341p-2, 0x1.412a0ca282542p-1, 0x1.5f8a0aeebf141p-1, 0x1.b25a49eb64b49p-2, +0x1.0eaba6e21d575p-1, 0x1.32d4adaa65a96p-2, 0x1.5da2689abb44dp-1, 0x1.a8f4111f51e82p-1, +0x1.a23519db446a3p-2, 0x1.a707278f4e0e5p-1, 0x1.bd0e494f7a1c9p-1, 0x1.915852bb22b0ap-1, +0x1.f41d137fe83a2p-1, 0x1.b360075b66c01p-2, 0x1.6df1bcf2dbe38p-3, 0x1.69470cb2d28e2p-2, +0x1.912275f72244fp-1, 0x1.dab747ffb56e9p-1, 0x1.9581b6532b037p-1, 0x1.3ed76c927daeep-2, +0x1.18e765ca31cedp-1, 0x1.aeb34ceb5d66ap-1, 0x1.1291f3ea2523ep-1, 0x1.6f3a87dade751p-1, +0x1.fc82008ff904p-1, 0x1.19bba72233775p-4, 0x1.9fc0084b3f801p-2, 0x1.76ed8036eddbp-1, +0x1.1d09f1aa3a13ep-1, 0x1.a94de703529bdp-6, 0x1.55171e7aaa2e4p-2, 0x1.ffd6f6d3ffadfp-1, +0x1.4e747bde9ce8fp-1, 0x1.42b3458285669p-6, 0x1.b208378b64107p-2, 0x1.74808af2e9011p-3, +0x1.46ffe2028dffcp-2, 0x1.b53423036a684p-4, 0x1.850cf6030a19fp-7, 0x1.749a7df2e935p-1, +0x1.ddadabefbb5b5p-1, 0x1.c3227d278645p-1, 0x1.05f2d0aa0be5ap-1, 0x1.d1cabf6ba3958p-1, +0x1.39a501a2734ap-2, 0x1.616f3fe6c2de8p-1, 0x1.0cdc8b8a19b91p-2, 0x1.6fa7b622df4f7p-4, +0x1.3c2687e2784d1p-1, 0x1.beffc1437dff8p-5, 0x1.9ac15a233582bp-2, 0x1.5437b6a2a86f7p-3, +0x1.caa348ff95469p-1, 0x1.dff2a0fbbfe54p-1, 0x1.c44875838890fp-1, 0x1.c725498b8e4a9p-1, +0x1.950aee032a15ep-8, 0x1.2850f34a50a1ep-2, 0x1.3e12c9c27c259p-1, 0x1.2034078a40681p-1, +0x1.42e5d1c285cbap-2, 0x1.e89e58ffd13cbp-1, 0x1.200afe5a4016p-1, 0x1.efe764bfdfcedp-1, +0x1.f2b3f32be567ep-1, 0x1.f90f1a23f21e3p-1, 0x1.341e1de2683c4p-3, 0x1.2c67c85a58cf9p-2, +0x1.7dacf402fb59fp-4, 0x1.4c6eed5298ddep-3, 0x1.59cc4382b3988p-6, 0x1.ac694d8358d2ap-6, +0x1.63e38782c7c71p-5, 0x1.10c132c621826p-1, 0x1.df2e09dbbe5c1p-1, 0x1.6621729acc42ep-2, +0x1.c8c1caa391839p-3, 0x1.96713e732ce28p-3, 0x1.c20b60238416cp-2, 0x1.ae56fa8b5cadfp-1, +0x1.0318976206313p-2, 0x1.ae665d235ccccp-1, 0x1.b274180364e83p-8, 0x1.30be52c2617cap-3, +0x1.8e58fe1f1cb2p-1, 0x1.c7ad5db38f5acp-1, 0x1.354de3826a9bcp-5, 0x1.918313fb23062p-1, +0x1.6f575d52deaecp-3, 0x1.5167a7faa2cf5p-1, 0x1.636e3702c6dc7p-2, 0x1.fa91806bf523p-2, +0x1.3a0600fa740cp-1, 0x1.d1c219dfa3843p-1, 0x1.da6049e3b4c09p-2, 0x1.2cb9f4225973fp-1, +0x1.cad133ff95a26p-1, 0x1.3a37ac6e746f6p-1, 0x1.c2edd84f85dbbp-1, 0x1.fa86d27ff50dap-1, +0x1.8d5367c31aa6dp-1, 0x1.cdbc3a6b9b787p-1, 0x1.fa873a03f50e7p-7, 0x1.a391a03b47234p-1, +0x1.bcfada5b79f5bp-2, 0x1.e71826c3ce305p-1, 0x1.5a896612b512dp-3, 0x1.50addfd6a15bcp-1, +0x1.32d1d97265a3bp-3, 0x1.37a8099a6f501p-1, 0x1.fe09b4bbfc137p-2, 0x1.9c81842339031p-2, +0x1.cc1ccd739839ap-2, 0x1.0269c28e04d38p-1, 0x1.1a7056c234e0bp-1, 0x1.d19d9353a33b2p-3, +0x1.942e407b285c8p-2, 0x1.2dc534fa5b8a7p-1, 0x1.7a9e3402f53c7p-7, 0x1.25ecf7964bd9fp-1, +0x1.fcb373d3f966ep-3, 0x1.6f4328a2de865p-2, 0x1.19adbe42335b8p-4, 0x1.b932ddef7265cp-1, +0x1.12c75c5a258ecp-2, 0x1.1065dcbe20cbcp-1, 0x1.cbd9a41b97b35p-2, 0x1.50d388a2a1a71p-3, +0x1.2a7624a254ec5p-3, 0x1.51b554baa36abp-2, 0x1.3aeed29275ddap-3, 0x1.d7f0f0ebafe1ep-1, +0x1.da5b9313b4b72p-3, 0x1.5a974642b52e9p-3, 0x1.7b829122f7052p-1, 0x1.551451f6aa28ap-1, +0x1.edefc283dbdf8p-4, 0x1.d224eaaba449dp-1, 0x1.4b8463929708cp-2, 0x1.14e4dd6229c9cp-2, +0x1.09ccf4421399fp-1, 0x1.a4c70c2b498e2p-1, 0x1.58b330c2b1666p-1, 0x1.efdb5afbdfb6bp-1, +0x1.4e619d6a9cc34p-2, 0x1.cc8e1e03991c4p-3, 0x1.910aff432216p-3, 0x1.7147eef6e28fep-1, +0x1.a0e8bc7b41d18p-1, 0x1.a8b4e2835169cp-3, 0x1.2e69cd125cd3ap-2, 0x1.00accb6201599p-4, +0x1.21ceccf2439dap-1, 0x1.74d53ca2e9aa8p-2, 0x1.d948775bb290fp-1, 0x1.ab327b235664fp-1, +0x1.cad07b0f95a0fp-1, 0x1.7e6a92d2fcd52p-2, 0x1.ff675d4bfececp-1, 0x1.56e04342adc08p-5, +0x1.680ff3c6d01fep-1, 0x1.388c47c271189p-3, 0x1.ed5ef51fdabdfp-1, 0x1.dea6d88bbd4dbp-1, +0x1.4991c70293239p-2, 0x1.68e18642d1c31p-1, 0x1.33bb2a7e67765p-1, 0x1.c50db7a38a1b7p-2, +0x1.3b0670ea760cep-1, 0x1.d97d5c4bb2facp-1, 0x1.6cf94a82d9f29p-1, 0x1.134d94a2269b3p-3, +0x1.7e446872fc88dp-1, 0x1.8b58f68316b1fp-2, 0x1.a57601034aecp-4, 0x1.2ba9b92257537p-4, +0x1.38d002c271ap-1, 0x1.31e2ffe263c6p-2, 0x1.96bd261b2d7a5p-1, 0x1.b3717e7b66e3p-2, +0x1.031eb892063d7p-1, 0x1.6f906502df20dp-4, 0x1.f39cb153e7396p-2, 0x1.276c2c224ed86p-4, +0x1.d0b955eba172bp-2, 0x1.a62da00b4c5b4p-2, 0x1.d02000a7a04p-1, 0x1.665a4c02ccb4ap-2, +0x1.924c196f24983p-1, 0x1.cf875def9f0ecp-1, 0x1.91365473226cbp-2, 0x1.f4b81a63e9703p-2, +0x1.daa6fdc3b54ep-5, 0x1.6bf43eaad7e88p-2, 0x1.b205cb73640b9p-2, 0x1.84e6a6bb09cd5p-2, +0x1.edba5943db74bp-5, 0x1.97c207032f841p-6, 0x1.a4fa2f3349f46p-1, 0x1.59e2167eb3c43p-1, +0x1.e63b6c83cc76ep-1, 0x1.11f379b223e6fp-1, 0x1.9eb57ba73d6afp-1, 0x1.647fd4f2c8ffbp-1, +0x1.d79ff4f7af3ffp-1, 0x1.d3643bcba6c87p-1, 0x1.89f50c1713ea2p-1, 0x1.106ff7b620dffp-1, +0x1.b156eee362adep-3, 0x1.20b2323241646p-1, 0x1.ea28b6f3d4517p-1, 0x1.6f74744edee8fp-1, +0x1.4ea43ed29d488p-1, 0x1.c7ee1f3b8fdc4p-2, 0x1.9461f9d328c3fp-1, 0x1.b8074e23700eap-4, +0x1.b70ddfa36e1bcp-1, 0x1.6481fa76c903fp-1, 0x1.d45c1f93a8b84p-2, 0x1.4959f90e92b3fp-1, +0x1.340958626812bp-1, 0x1.b2c93a0365927p-1, 0x1.0ed818f21db03p-3, 0x1.51b3c842a3679p-1, +0x1.a30d6553461adp-3, 0x1.1cb8ebf63971dp-1, 0x1.4271b9c284e37p-5, 0x1.0f3dfdda1e7cp-2, +0x1.2976fc2e52eep-1, 0x1.b9214acf72429p-1, 0x1.e181156bc3023p-1, 0x1.0fb268ae1f64dp-1, +0x1.962989032c531p-2, 0x1.80369113006d2p-1, 0x1.d0c8f673a191fp-3, 0x1.456972ea8ad2ep-2, +0x1.539accdaa735ap-1, 0x1.fe2749b7fc4e9p-1, 0x1.b324b12b66496p-1, 0x1.bff088937fe11p-1, +0x1.1ed97be63db2fp-1, 0x1.9d4d681f3a9adp-1, 0x1.2f64fcde5ecap-1, 0x1.b5f6ead36beddp-3, +0x1.0288ef720511ep-2, 0x1.878ded5b0f1bep-2, 0x1.48fd48fa91fa9p-2, 0x1.c292bac385257p-4, +0x1.42478902848f1p-4, 0x1.8eacb4471d597p-1, 0x1.81ac50670358ap-1, 0x1.5c524986b8a49p-1, +0x1.4175ee4682ebep-1, 0x1.c56256a38ac4bp-1, 0x1.5c0c238ab8184p-2, 0x1.aa39479b54729p-1, +0x1.c436852b886d1p-2, 0x1.845a5ac308b4bp-2, 0x1.8ec234231d847p-4, 0x1.7247d882e48fbp-6, +0x1.ed39e0c3da73cp-3, 0x1.3595bf026b2b8p-5, 0x1.1b44a77236895p-1, 0x1.46633cb28cc68p-1, +0x1.938fed03271fep-1, 0x1.8f76e5131eeddp-1, 0x1.e917f627d22ffp-1, 0x1.ce5573b39caaep-2, +0x1.8d9e2ec71b3c6p-1, 0x1.9c3ca74f38795p-1, 0x1.4e3684d29c6d1p-2, 0x1.58ef5552b1debp-2, +0x1.398a0f6a73142p-1, 0x1.d6803f4bad008p-1, 0x1.19f5655e33eadp-1, 0x1.bace8723759d1p-1, +0x1.348e6bea691cdp-2, 0x1.be7409db7ce81p-1, 0x1.f320de7be641cp-1, 0x1.85204e330a40ap-2, +0x1.4d20be1e9a418p-1, 0x1.74cd2edee99a6p-1, 0x1.ee2709c3dc4e1p-5, 0x1.1d2d58c23a5abp-2, +0x1.3a2f857e745f1p-1, 0x1.99d104c333a21p-2, 0x1.c67f9fe38cff4p-4, 0x1.c4ac81438959p-5, +0x1.8f15afc31e2b6p-1, 0x1.aaa0ea035541dp-3, 0x1.3ee836c27dd07p-4, 0x1.4c84fe02990ap-6, +0x1.f80659c3f00cbp-3, 0x1.4321ae4a86436p-1, 0x1.50c764a2a18edp-1, 0x1.1918370232307p-5, +0x1.a53126b34a625p-2, 0x1.39df5ac673bebp-1, 0x1.f1787a93e2f0fp-2, 0x1.80db087301b61p-3, +0x1.ac38042b58701p-2, 0x1.9fd77fb73fafp-1, 0x1.0cae6cc6195cep-1, 0x1.f4c22f83e9846p-6, +0x1.7657befeecaf8p-1, 0x1.351e91226a3d2p-4, 0x1.ca7498a394e93p-1, 0x1.09ef4f0213deap-5, +0x1.e517dbffca2fbp-1, 0x1.bd95771b7b2afp-1, 0x1.a65e38134cbc7p-2, 0x1.32389a1e64713p-1, +0x1.3262a5fa64c55p-1, 0x1.e423194bc8463p-2, 0x1.c0cf467f819e9p-1, 0x1.b248add364916p-3, +0x1.befa0f077df42p-1, 0x1.f99f3a7bf33e7p-1, 0x1.11b9e7122373dp-2, 0x1.4e0fbeca9c1f8p-1, +0x1.911dd3f3223bap-3, 0x1.6173f4c2c2e7fp-2, 0x1.5873e6bab0e7dp-1, 0x1.c49216db89243p-2, +0x1.f3dba8afe7b75p-1, 0x1.527696baa4ed3p-2, 0x1.e7b51dc3cf6a4p-2, 0x1.8ce8780b19d0fp-2, +0x1.e31aa623c6355p-1, 0x1.ec96cc2bd92dap-1, 0x1.26aafe264d56p-1, 0x1.726d506ae4daap-2, +0x1.8c6e4bdf18dc9p-1, 0x1.9acb57433596bp-4, 0x1.91b9736b2372ep-2, 0x1.02c60ada058c1p-1, +0x1.67f4f432cfe9fp-3, 0x1.26a2a4aa4d455p-2, 0x1.1364ffce26cap-1, 0x1.f8a8c863f1519p-4, +0x1.439b25b287365p-3, 0x1.e6941bd7cd283p-1, 0x1.714db32ae29b6p-1, 0x1.83496f670692ep-1, +0x1.b14b50fb6296ap-2, 0x1.321cf9a66439fp-1, 0x1.efdb9adfdfb73p-1, 0x1.2f3f6f025e7eep-2, +0x1.2bbc342257787p-1, 0x1.e2e23993c5c47p-3, 0x1.e5af764bcb5efp-1, 0x1.9003a91f20075p-1, +0x1.297288ca52e51p-1, 0x1.3e235d067c46cp-1, 0x1.c932d2239265ap-3, 0x1.1d4e31763a9c6p-1, +0x1.e75ea863cebd5p-1, 0x1.6627436acc4e8p-1, 0x1.e3c26d7bc784ep-1, 0x1.ca794e8394f2ap-1, +0x1.52be0f96a57c2p-1, 0x1.0a6d6b9e14dadp-1, 0x1.075fed720ebfep-2, 0x1.be58b6e37cb17p-2, +0x1.3dc6d68a7b8dbp-1, 0x1.4c8cb06e99196p-1, 0x1.e1f2664fc3e4dp-1, 0x1.97c413972f882p-1, +0x1.dfde02c3bfbcp-1, 0x1.eaaecc33d55dap-2, 0x1.d6d92ca3adb26p-1, 0x1.862661630c4ccp-4, +0x1.b7d703db6faep-2, 0x1.4826dfca904dcp-1, 0x1.b40e3b97681c7p-1, 0x1.b4912a6b69225p-1, +0x1.e90f65c3d21edp-3, 0x1.a3e9d67347d3bp-1, 0x1.30c387b261871p-3, 0x1.a6000d934c002p-1, +0x1.ca264d43944cap-5, 0x1.8f02c1a31e058p-4, 0x1.3603b6ae6c077p-1, 0x1.4614ed9e8c29ep-1, +0x1.7003b53ae0077p-1, 0x1.a8506b3750a0dp-1, 0x1.8d8c7c431b19p-3, 0x1.57625d9aaec4cp-1, +0x1.0e77aea21cef6p-1, 0x1.1c963232392c6p-3, 0x1.21dbac1e43b76p-1, 0x1.84d6f8d309adfp-3, +0x1.5192f82aa325fp-1, 0x1.a58ba2d74b174p-1, 0x1.406219a680c43p-1, 0x1.1eb39d623d674p-2, +0x1.e430a683c8615p-2, 0x1.22547ff244a9p-1, 0x1.38ef124271de2p-4, 0x1.a3ecac0347d96p-2, +0x1.7abe6082f57ccp-5, 0x1.fdf70eebfbee2p-1, 0x1.02bb222e05764p-1, 0x1.e72ecff3ce5dap-2, +0x1.461deeb68c3bep-1, 0x1.6d92bb82db257p-2, 0x1.505124c2a0a25p-2, 0x1.c061c82780c39p-1, +0x1.6accd0c2d599ap-3, 0x1.e8b2e89bd165dp-2, 0x1.6661d5b6ccc3bp-1, 0x1.dd566423baacdp-3, +0x1.2639cc864c73ap-1, 0x1.38cb18c271963p-2, 0x1.bd6a86a77ad51p-1, 0x1.2c7b037a58f6p-2, +0x1.12d7de5225afcp-3, 0x1.066d2dc20cda6p-4, 0x1.ed9fdf5bdb3fcp-1, 0x1.532da636a65b5p-1, +0x1.9fccc9133f999p-3, 0x1.0f7b8b761ef71p-1, 0x1.b463646b68c6dp-1, 0x1.b9862a6f730c5p-1, +0x1.6a0e5c92d41ccp-2, 0x1.e98afc23d316p-2, 0x1.237fe48246ffdp-3, 0x1.a71f818b4e3fp-1, +0x1.719fe002e33fcp-5, 0x1.bff76da37feeep-3, 0x1.e4575e23c8aecp-3, 0x1.762f2062ec5e4p-4, +0x1.b7d3a9436fa75p-3, 0x1.7bd0f9b6f7a1fp-1, 0x1.225d4c0644baap-1, 0x1.b412d9076825bp-1, +0x1.94d2bbc329a57p-4, 0x1.ca85de67950bcp-1, 0x1.7474a12ae8e94p-1, 0x1.1a9b175235363p-2, +0x1.7dbea56afb7d5p-2, 0x1.b5acedbb6b59ep-2, 0x1.04a324b209465p-1, 0x1.e5191f3bca324p-1, +0x1.773c033eee78p-1, 0x1.841b56b30836bp-2, 0x1.ed5a83d3dab5p-3, 0x1.bbf1fad777e3fp-1, +0x1.c5b6a2238b6d4p-2, 0x1.a3da013347b4p-3, 0x1.0f1fa10a1e3f4p-1, 0x1.4ace8356959dp-1, +0x1.78720bc2f0e41p-1, 0x1.87060aeb0e0c1p-2, 0x1.0454adc208a96p-1, 0x1.6bc9d042d793ap-4, +0x1.b84883877091p-1, 0x1.4d34a6e29a695p-1, 0x1.d498bb93a9317p-1, 0x1.cf6281879ec5p-1, +0x1.bd32824b7a65p-1, 0x1.36ba4c626d74ap-3, 0x1.fe286593fc50dp-1, 0x1.593b64e2b276dp-4, +0x1.c97f8cd392ff2p-1, 0x1.2085b196410b6p-1, 0x1.df3a45a3be749p-1, 0x1.fc19e44bf833dp-1, +0x1.d6171ffbac2e4p-2, 0x1.53aee6cea75ddp-1, 0x1.12cedfe2259dcp-2, 0x1.a9eae2b353d5cp-1, +0x1.742aed42e855ep-4, 0x1.8e0a94a71c153p-1, 0x1.8f0401eb1e08p-1, 0x1.a5c160eb4b82cp-1, +0x1.4060fff280c2p-3, 0x1.4b545b8296a8bp-6, 0x1.61b35bbec366bp-1, 0x1.32f3910e65e72p-1, +0x1.cd448cb39a892p-3, 0x1.c34bf3138697ep-3, 0x1.f7085183ee10ap-3, 0x1.ebc32eefd7866p-1, +0x1.3456023a68acp-1, 0x1.8216c223042d8p-1, 0x1.93c68f83278d2p-5, 0x1.d93d0b7bb27a1p-2, +0x1.9e96d20b3d2dap-2, 0x1.edd5248bdbaa5p-1, 0x1.78020e8af0042p-2, 0x1.18fbd69a31f7bp-2, +0x1.dc1dbd23b83b8p-4, 0x1.7452d9aae8a5bp-2, 0x1.6f4aafd2de956p-2, 0x1.40d11d0281a24p-7, +0x1.daaf1e6fb55e4p-1, 0x1.2dbf3b1a5b7e7p-2, 0x1.1d28bc023a518p-9, 0x1.8b755cd316eacp-2, +0x1.ea8e845bd51d1p-1, 0x1.1509315a2a126p-2, 0x1.be9644637d2c9p-3, 0x1.913e2003227c4p-5, +0x1.88f2d50311e5bp-5, 0x1.fea99303fd532p-1, 0x1.bed542eb7daa8p-1, 0x1.a29db533453b7p-3, +0x1.2086bb82410d7p-6, 0x1.20889ea641114p-1, 0x1.9b9afe5b3736p-1, 0x1.f1556423e2aadp-3, +0x1.915b9b6f22b73p-1, 0x1.95d12b832ba25p-5, 0x1.a0621fe340c44p-3, 0x1.8b633b4b16c67p-2, +0x1.9b73d4df36e7bp-1, 0x1.02a9e1e20553cp-2, 0x1.b250236764a04p-1, 0x1.aafcf78355f9fp-3, +0x1.bca855e37950bp-3, 0x1.b944aaa372895p-3, 0x1.ee7a525bdcf4ap-2, 0x1.555b9a3aaab73p-2, +0x1.287a977e50f53p-1, 0x1.aee2811b5dc5p-1, 0x1.5f622322bec44p-2, 0x1.0329b5ea06537p-1, +0x1.17087a922e10fp-3, 0x1.619c749ac338fp-2, 0x1.c8e4645391c8dp-1, 0x1.828517e3050a3p-4, +0x1.3b52d2fe76a5ap-1, 0x1.c44fab43889f5p-4, 0x1.259213f24b242p-3, 0x1.53e2004ea7c4p-1, +0x1.b99c434373388p-4, 0x1.0738fd020e72p-6, 0x1.bc896d9f7912ep-1, 0x1.00def92201bdfp-3, +0x1.28c2668e5184dp-1, 0x1.58246bf6b048dp-1, 0x1.791a2ea2f2346p-2, 0x1.743c03f2e878p-2, +0x1.71817eb2e303p-1, 0x1.24a59f4a494b4p-1, 0x1.7fcf9fa2ff9f4p-1, 0x1.0cf5538e19eaap-1, +0x1.a5fa903b4bf52p-1, 0x1.321fc306643f8p-1, 0x1.77b4916eef692p-1, 0x1.524a5b42a494bp-5, +0x1.a070edaf40e1ep-1, 0x1.bbc6ea63778ddp-3, 0x1.7fa4e5a2ff49dp-2, 0x1.91d70a5323ae1p-2, +0x1.dd43bb03ba877p-5, 0x1.6f838466df071p-1, 0x1.cc153b17982a7p-1, 0x1.8e5969531cb2dp-3, +0x1.028df582051bfp-4, 0x1.94f99f6729f34p-1, 0x1.27cdfaa24f9bfp-2, 0x1.5ba491aeb7492p-1, +0x1.cd8394d39b073p-1, 0x1.ba9704a3752e1p-2, 0x1.5f0d23fabe1a4p-2, 0x1.2dc74e025b8eap-7, +0x1.cb0a947396153p-2, 0x1.b03ffe63608p-3, 0x1.13bb6e022776ep-3, 0x1.c8f6188391ec3p-6, +0x1.c4346b8f8868dp-1, 0x1.017bf2d602f7ep-1, 0x1.90cb65832196dp-2, 0x1.35b5ea3e6b6bdp-1, +0x1.310c90e262192p-4, 0x1.20d5498241aa9p-3, 0x1.0aacf7221559fp-3, 0x1.cc1c225b98384p-1, +0x1.7a551566f4aa3p-1, 0x1.ba5fcf3774bfap-1, 0x1.e140c80fc2819p-1, 0x1.1ac60312358cp-1, +0x1.4a8c4e829518ap-4, 0x1.422675ba844cfp-2, 0x1.e3b1883bc7631p-1, 0x1.1c971602392e3p-3, +0x1.096bf40212d7fp-5, 0x1.afc6c34f5f8d8p-1, 0x1.55783fb2aaf08p-2, 0x1.8743efa30e87ep-4, +0x1.44c062b68980cp-1, 0x1.3ea31d2a7d464p-1, 0x1.8c8d0fa3191a2p-1, 0x1.1243f7862487fp-1, +0x1.bee9f7837dd3fp-5, 0x1.e09d0ce3c13a2p-4, 0x1.16fb14be2df63p-1, 0x1.0173e9b202e7dp-1, +0x1.5047426aa08e8p-2, 0x1.5be9f042b7d3ep-1, 0x1.0fbb9a7a1f773p-1, 0x1.b160331362c06p-3, +0x1.75978c52eb2f2p-3, 0x1.d8214d3bb042ap-1, 0x1.a20df703441bfp-1, 0x1.070eea620e1ddp-2, +0x1.02b4fcc2056ap-4, 0x1.e4b934cfc9727p-1, 0x1.3e8e5e227d1ccp-3, 0x1.9aabb4ff35577p-1, +0x1.9f1904033e321p-1, 0x1.8722fca30e46p-4, 0x1.6ae3701ad5c6ep-2, 0x1.c86a8dd390d52p-1, +0x1.a3ef34eb47de7p-2, 0x1.3246808a648dp-2, 0x1.f20a6a83e414dp-6, 0x1.c51cb36b8a396p-2, +0x1.23a80e5247502p-3, 0x1.7498e65ae931dp-2, 0x1.1376d7aa26edbp-1, 0x1.8daa664b1b54dp-1, +0x1.f8ef9057f1df2p-1, 0x1.4007ce9a800fap-2, 0x1.3fdcbb9a7fb97p-2, 0x1.4de2fd029bc6p-5, +0x1.b82f11d3705e2p-2, 0x1.b6e9728b6dd2ep-1, 0x1.165219822ca43p-1, 0x1.843b2a2308765p-1, +0x1.12d362ca25a6cp-1, 0x1.306d9fc260db4p-4, 0x1.f09336e7e1267p-1, 0x1.703945dee0729p-1, +0x1.fe2f0133fc5ep-1, 0x1.92a12de725426p-1, 0x1.f3c0bb13e7817p-1, 0x1.e85a0c83d0b42p-5, +0x1.775a62b2eeb4cp-1, 0x1.0d914a621b229p-3, 0x1.b93155c77262bp-1, 0x1.167366b62ce6dp-1, +0x1.d122c8c3a2459p-3, 0x1.ba8c374375187p-3, 0x1.bdbbe90b7b77dp-2, 0x1.46404ca68c80ap-1, +0x1.07c64e1a0f8cap-1, 0x1.dcdc8fb3b9b92p-2, 0x1.467532c28cea6p-4, 0x1.50b051aea160ap-1, +0x1.a8babb0751757p-1, 0x1.3c457e06788bp-1, 0x1.bcb56feb796aep-2, 0x1.a1aa4b5f43549p-1, +0x1.dc496553b892dp-1, 0x1.7e4915c2fc923p-1, 0x1.b6887b2f6d10fp-1, 0x1.70c1dc72e183cp-2, +0x1.3532884a6a651p-1, 0x1.99b5295b336a5p-2, 0x1.e4e0c2c3c9c18p-4, 0x1.2017ac52402f6p-3, +0x1.e5d09153cba12p-2, 0x1.697a79e2d2f4fp-4, 0x1.b83f30f3707e6p-1, 0x1.e22e93b3c45d2p-2, +0x1.bfd07d277fa1p-1, 0x1.abffec0357ffep-1, 0x1.0f9ceaa61f39dp-1, 0x1.372adfd66e55cp-1, +0x1.ef643e9fdec88p-1, 0x1.919c80d32339p-2, 0x1.36791a226cf23p-3, 0x1.8eb3c3331d678p-3, +0x1.37714e3e6ee2ap-1, 0x1.2c7c3b1258f87p-1, 0x1.a9ed3d7353da8p-1, 0x1.f9bce2a3f379cp-4, +0x1.aea82e835d506p-5, 0x1.d2bbe3cba577cp-1, 0x1.8fe7ee031fcfep-1, 0x1.c3a53df3874a8p-1, +0x1.0f0161ce1e02cp-1, 0x1.b90a97d372153p-3, 0x1.654f894eca9f1p-1, 0x1.d6958e3bad2b2p-2, +0x1.ec8bbbb7d9177p-1, 0x1.1bd8047a37b01p-1, 0x1.a3abb55b47577p-1, 0x1.21be43fe437c8p-1, +0x1.e8b29927d1653p-1, 0x1.e047cdb3c08fap-1, 0x1.69c42f12d3886p-1, 0x1.b735c39b6e6b8p-2, +0x1.aee39e035dc74p-6, 0x1.220360064406cp-1, 0x1.ccb22bab99645p-1, 0x1.cd479a179a8f3p-1, +0x1.9c06980b380d3p-2, 0x1.b89e2c9b713c6p-2, 0x1.047279ea08e4fp-1, 0x1.7acf1542f59e3p-2, +0x1.a51d56b74a3abp-1, 0x1.5210c076a4218p-1, 0x1.21147b6e4228fp-1, 0x1.b91d49e3723a9p-2, +0x1.fa33ee13f467ep-3, 0x1.960371bb2c06ep-2, 0x1.1bc64146378c8p-1, 0x1.32eefcda65dep-2, +0x1.3b7b395276f67p-2, 0x1.575c5e8aaeb8cp-2, 0x1.7472f172e8e5ep-3, 0x1.acbefe77597ep-1, +0x1.19f0d53a33e1bp-1, 0x1.c26c45ab84d89p-1, 0x1.30138b2a60271p-2, 0x1.067c90ee0cf92p-1, +0x1.bc88944379113p-2, 0x1.ddabd763bb57bp-4, 0x1.41d6a76283ad5p-4, 0x1.8dedc6931bdb9p-2, +0x1.bfd489c37fa91p-5, 0x1.91ff03ff23fep-1, 0x1.a291c51745239p-1, 0x1.4ba32c6297466p-4, +0x1.6804c802d0099p-2, 0x1.6f43f0bede87ep-1, 0x1.f6bbffa3ed78p-1, 0x1.8205b00b040b6p-1, +0x1.2e4c1c225c984p-3, 0x1.f65cf31becb9ep-2, 0x1.fb69d543f6d3bp-4, 0x1.f0b05dc3e160cp-1, +0x1.34fce80269f9dp-3, 0x1.6081b61ac1037p-1, 0x1.9a7e056334fc1p-2, 0x1.97986b0b2f30dp-2, +0x1.5c1b77a2b836fp-4, 0x1.e90543fbd20a8p-1, 0x1.6543b3f2ca876p-1, 0x1.9282173b25043p-2, +0x1.2966e67a52cddp-2, 0x1.c260705384c0ep-1, 0x1.d8002853b0005p-3, 0x1.aea4487b5d489p-1, +0x1.84ccb5fb09997p-1, 0x1.0e09cfaa1c13ap-1, 0x1.6a41b2cad4836p-2, 0x1.8c4400731888p-3, +0x1.49bf4a96937e9p-1, 0x1.bab75ca3756ecp-2, 0x1.2a07e366540fcp-1, 0x1.65bc9332cb792p-1, +0x1.bd6ac9437ad59p-3, 0x1.993350f33266ap-2, 0x1.8f30f8c31e61fp-1, 0x1.235d165246ba3p-1, +0x1.deecc9c3bdd99p-4, 0x1.85ecf8630bd9fp-1, 0x1.4ac58cb2958b2p-2, 0x1.0ee140821dc28p-2, +0x1.0236e3da046dcp-2, 0x1.c9a0020b934p-2, 0x1.e083f803c107fp-3, 0x1.9cb557db396abp-2, +0x1.1546dc722a8dcp-3, 0x1.456000b68acp-1, 0x1.9a26e173344dcp-1, 0x1.c354984386a93p-3, +0x1.2e6544ae5cca9p-1, 0x1.fed52acbfdaa5p-2, 0x1.3a1631b2742c6p-1, 0x1.c318b7eb86317p-1, +0x1.83960b6b072c1p-2, 0x1.b0163bc7602c7p-1, 0x1.71bd0062e37ap-1, 0x1.1a5eeeb234bdep-3, +0x1.7c4016daf8803p-2, 0x1.36eece426dddap-4, 0x1.53517792a6a2fp-2, 0x1.f7d58003efabp-7, +0x1.0439881a08731p-1, 0x1.d3b09f2fa7614p-1, 0x1.6d9be932db37dp-1, 0x1.73943a6ae7287p-1, +0x1.40948f5281292p-2, 0x1.f999c3e3f3338p-2, 0x1.2de2a17a5bc54p-2, 0x1.b84fc1c3709f8p-2, +0x1.0573b4aa0ae77p-2, 0x1.3c54171678a83p-1, 0x1.63988122c731p-1, 0x1.03d54c4207aaap-1, +0x1.0920c0c212418p-4, 0x1.dbb97f27b773p-1, 0x1.d22ff833a45ffp-1, 0x1.99d73cd333ae8p-3, +0x1.21197fda4233p-1, 0x1.6c56d9a2d8adbp-1, 0x1.ae95ea935d2bdp-2, 0x1.3dfb12127bf62p-3, +0x1.af05bc135e0b8p-3, 0x1.16126f822c24ep-5, 0x1.2977c6c252ef9p-5, 0x1.2d8c74ba5b18fp-1, +0x1.c17762bf82eecp-1, 0x1.84547cd308a9p-1, 0x1.7424306ae8486p-1, 0x1.fe5db8a3fcbb7p-3, +0x1.ab32569b5664bp-1, 0x1.dccec303b99d8p-5, 0x1.0eed88521ddb1p-2, 0x1.5ed7bd62bdaf8p-2, +0x1.f17d8b63e2fb1p-1, 0x1.f512ad5bea256p-1, 0x1.1800c8e230019p-4, 0x1.238fa612471f5p-2, +0x1.e3bf1e9bc77e4p-2, 0x1.73e2d3b2e7c5ap-2, 0x1.6defb3eadbdf6p-1, 0x1.749969a2e932dp-1, +0x1.f64580efec8bp-1, 0x1.a3106a134620dp-2, 0x1.e1bad783c375bp-3, 0x1.76999082ed332p-5, +0x1.5a83685ab506dp-2, 0x1.2a7ab84254f57p-3, 0x1.f77da0f3eefb4p-3, 0x1.ce5b34079cb67p-1, +0x1.b6f587b76deb1p-1, 0x1.552a5d86aa54cp-1, 0x1.dd9f8883bb3f1p-5, 0x1.15b7b5c22b6f7p-4, +0x1.668b847ecd171p-1, 0x1.838ba7c307175p-4, 0x1.50436b76a086dp-1, 0x1.2802e73a5005dp-1, +0x1.b4c5f1cb698bep-1, 0x1.88cf37bb119e7p-2, 0x1.a79a55634f34bp-1, 0x1.5ff84862bff09p-1, +0x1.c469101b88d22p-2, 0x1.7888cc42f111ap-4, 0x1.ec84e203d909cp-6, 0x1.a76426db4ec85p-2, +0x1.211e3722423c7p-4, 0x1.932201632644p-4, 0x1.6579e676caf3dp-1, 0x1.160356322c06bp-1, +0x1.d8ab540bb156bp-2, 0x1.a6d334bb4da67p-2, 0x1.15397fa22a73p-2, 0x1.c53655eb8a6cbp-2, +0x1.a4f1cf6b49e3ap-1, 0x1.030b75b20616fp-1, 0x1.f40987fbe8131p-2, 0x1.48ce0e52919c2p-3, +0x1.4daa23c69b544p-1, 0x1.77e42c3aefc86p-1, 0x1.0475bce208eb8p-4, 0x1.049fab7a093f5p-1, +0x1.9a1d1383343a2p-2, 0x1.f3458123e68bp-4, 0x1.2756a2324ead4p-1, 0x1.9cd071e339a0ep-4, +0x1.bb68947376d13p-3, 0x1.de683693bcd07p-3, 0x1.5b9cf57ab739fp-1, 0x1.1d00b7223a017p-4, +0x1.3c01a98278035p-1, 0x1.03374ada066e9p-1, 0x1.83985f470730cp-1, 0x1.e3631903c6c63p-5, +0x1.324864666490dp-1, 0x1.92fc865b25f91p-1, 0x1.e3d089fbc7a11p-2, 0x1.566c2b4aacd85p-1, +0x1.c560c6878ac19p-1, 0x1.5d88add2bb116p-3, 0x1.b1be05e3637c1p-3, 0x1.636ce11ac6d9cp-2, +0x1.2acbc5d255979p-1, 0x1.ee188293dc31p-2, 0x1.94519b8328a33p-1, 0x1.9f7b2a733ef65p-2, +0x1.fa17b6fbf42f7p-1, 0x1.1cacbefa39598p-2, 0x1.21f118d243e23p-1, 0x1.47c1dabe8f83bp-1, +0x1.8ea2ed031d45ep-7, 0x1.427fd06e84ffap-1, 0x1.318618d2630c3p-3, 0x1.a6922aeb4d245p-2, +0x1.80e8809301d1p-1, 0x1.73b8286ae7705p-1, 0x1.06e323b60dc64p-1, 0x1.efc2a5b3df855p-1, +0x1.eb52360fd6a47p-1, 0x1.8a0064b31400dp-3, 0x1.362bc9426c579p-5, 0x1.2753df924ea7cp-1, +0x1.65b76406cb6edp-1, 0x1.96fb1bdf2df63p-1, 0x1.458a11228b142p-1, 0x1.2fff90d25fff2p-2, +0x1.29f7a23653ef4p-1, 0x1.bb92b0e377256p-4, 0x1.ee6bf3b3dcd7ep-1, 0x1.deb0d173bd61ap-2, +0x1.1da903223b52p-2, 0x1.6b6dd4a2d6dbbp-3, 0x1.a10ed947421dbp-1, 0x1.b9a0476773409p-1, +0x1.51e7b672a3cf7p-1, 0x1.356074c66ac0fp-1, 0x1.12bbb93a25777p-2, 0x1.4bff6d6e97feep-1, +0x1.c3b6d443876dbp-1, 0x1.ab4ef56f569dfp-1, 0x1.278290524f052p-2, 0x1.c9f15ffb93e2cp-1, +0x1.db9d8bb3b73b1p-2, 0x1.c0459cc3808b4p-2, 0x1.3a74eada74e9dp-2, 0x1.badd19b375ba3p-3, +0x1.4f6bdb229ed7bp-3, 0x1.a41d9923483b3p-1, 0x1.79e7b072f3cf6p-3, 0x1.f96966a3f2d2dp-4, +0x1.a76c93034ed92p-7, 0x1.c772a2c38ee54p-3, 0x1.66810c66cd022p-1, 0x1.6c551656d8aa3p-1, +0x1.1af8918235f12p-6, 0x1.58163b0ab02c7p-2, 0x1.1537af022a6f6p-7, 0x1.32cf66c2659edp-1, +0x1.c6fae74b8df5dp-2, 0x1.f2c0d273e581ap-1, 0x1.113e7be2227cfp-4, 0x1.7251f536e4a3fp-1, +0x1.36711e626ce24p-3, 0x1.c336a8c3866d5p-1, 0x1.2bf23c9a57e48p-1, 0x1.9f83fe0f3f08p-1, +0x1.f12e3b13e25c7p-2, 0x1.b550193b6aa03p-1, 0x1.d706d6f3ae0dbp-2, 0x1.789be392f137cp-2, +0x1.609f0ea6c13e2p-1, 0x1.7f44b3a2fe896p-1, 0x1.0c7ea38218fd4p-2, 0x1.39b75202736eap-3, +0x1.7d9e0802fb3c1p-3, 0x1.2379c73246f39p-1, 0x1.7a4a35daf4947p-2, 0x1.6684f192cd09ep-2, +0x1.8f2ec0a31e5d8p-2, 0x1.1b9f070a373e1p-1, 0x1.e4df4b43c9be9p-2, 0x1.9c6a254338d45p-2, +0x1.8d7bafbb1af76p-1, 0x1.63c2c812c7859p-3, 0x1.d45147a3a8a29p-4, 0x1.9653744b2ca6fp-1, +0x1.04fbcf8e09f7ap-1, 0x1.f6f83d83edf08p-4, 0x1.9245b613248b7p-2, 0x1.e8794333d0f28p-1, +0x1.8cfed10319fdap-4, 0x1.d695550bad2abp-2, 0x1.5acb3866b5967p-1, 0x1.fcf086f3f9e11p-3, +0x1.5d02a692ba055p-2, 0x1.0d7aea021af5dp-2, 0x1.ec01fc83d804p-5, 0x1.a71870d34e30ep-1, +0x1.e06c71c3c0d8ep-4, 0x1.0a438b4214871p-1, 0x1.8d998a631b331p-3, 0x1.9cac9cdf39594p-1, +0x1.13107dc22621p-2, 0x1.d34b68bba696dp-2, 0x1.eb1a715fd634ep-1, 0x1.d1df81cba3bfp-2, +0x1.a3ef718347deep-6, 0x1.507f1892a0fe3p-2, 0x1.9c3239af38647p-1, 0x1.a96db7bb52db7p-2, +0x1.c3de935387bd2p-1, 0x1.1d43be9a3a878p-2, 0x1.a2ebee7f45d7ep-1, 0x1.515a430ea2b48p-1, +0x1.cf2522ab9e4a4p-2, 0x1.dd761773baec3p-1, 0x1.cf5b6eab9eb6ep-2, 0x1.ec8e60e3d91ccp-1, +0x1.c551f2438aa3ep-5, 0x1.b0d0925f61a12p-1, 0x1.d507a413aa0f5p-1, 0x1.37d3e5126fa7dp-3, +0x1.383679ca706cfp-2, 0x1.2fd2dc765fa5cp-1, 0x1.9a62360334c47p-2, 0x1.4a9c902e95392p-1, +0x1.b69051776d20ap-1, 0x1.d7e27593afc4fp-2, 0x1.e36a01fbc6d4p-2, 0x1.f29ddfafe53bcp-1, +0x1.f634c60bec699p-1, 0x1.551b6396aa36cp-1, 0x1.8f4a7c8f1e95p-1, 0x1.fef413b3fde82p-3, +0x1.f608bf83ec118p-4, 0x1.7a64edeaf4c9ep-1, 0x1.68acc5d2d1599p-1, 0x1.2f824df25f04ap-3, +0x1.1523d1a22a47ap-4, 0x1.04deff7e09bep-1, 0x1.20976f5e412eep-1, 0x1.e6830d87cd062p-1, +0x1.9380decf2701cp-1, 0x1.8706bbb30e0d7p-2, 0x1.37dd50926fbaap-1, 0x1.ec4dc083d89b8p-3, +0x1.41f2ea9a83e5dp-2, 0x1.f8b07e43f161p-5, 0x1.9e8744033d0e9p-3, 0x1.7a9d28e2f53a5p-2, +0x1.d05b9a47a0b73p-1, 0x1.e54ba883ca975p-4, 0x1.0b438db616872p-1, 0x1.b1db5ca363b6cp-3, +0x1.6c7c5186d8f8ap-1, 0x1.d874a8bbb0e95p-1, 0x1.b71367576e26dp-1, 0x1.230ca2fe46194p-1, +0x1.88cbc70311979p-2, 0x1.5190d0a2a321ap-2, 0x1.15aa82aa2b55p-1, 0x1.7535531aea6aap-2, +0x1.fde3cbe7fbc79p-1, 0x1.49e9fe6a93d4p-2, 0x1.3a57ae7a74af6p-1, 0x1.e5271ec3ca4e4p-4, +0x1.f59ed203eb3dap-5, 0x1.4608e8928c11dp-2, 0x1.110aeeaa2215ep-2, 0x1.07f99d520ff34p-3, +0x1.a7e373c74fc6ep-1, 0x1.a91ce6b35239dp-1, 0x1.440ba6c288175p-4, 0x1.3b64529276c8ap-1, +0x1.b281123365022p-3, 0x1.605ec56ec0bd9p-1, 0x1.b677c2b36cef8p-1, 0x1.0d99b9da1b337p-1, +0x1.7fe9cd52ffd3ap-1, 0x1.e1993b03c3327p-5, 0x1.cae84e4b95d0ap-1, 0x1.50456796a08adp-1, +0x1.6b0c2302d6184p-3, 0x1.ac57b7fb58af7p-2, 0x1.bcbc3ebf79788p-1, 0x1.c73f5a4b8e7ebp-1, +0x1.5d41096aba821p-2, 0x1.73cfa612e79f5p-1, 0x1.d497fa8ba92ffp-2, 0x1.7306683ae60cdp-1, +0x1.c980e6039301dp-5, 0x1.fff67fefffedp-1, 0x1.6d088e22da112p-4, 0x1.a7bda4834f7b5p-5, +0x1.49d6fe4a93aep-2, 0x1.67f8c03ecff18p-1, 0x1.5c82f882b905fp-3, 0x1.888ad88b1115bp-2, +0x1.5fa69082bf4d2p-6, 0x1.bf4c6aeb7e98dp-2, 0x1.0643d39a0c87ap-1, 0x1.b2e0a84b65c15p-1, +0x1.11863852230c7p-2, 0x1.2ec548725d8a9p-1, 0x1.dc89f5bbb913fp-2, 0x1.eac6c16bd58d8p-2, +0x1.1e481bba3c903p-2, 0x1.49797b1a92f2fp-2, 0x1.7e8d4602fd1a9p-8, 0x1.e1bb6603c376dp-6, +0x1.85aca2830b594p-2, 0x1.cde568d79bcadp-1, 0x1.5f5342c6bea68p-1, 0x1.1d995a023b32bp-1, +0x1.482289a290451p-2, 0x1.1c0f8186381fp-1, 0x1.c9b168939362dp-2, 0x1.52b1c98aa5639p-1, +0x1.1fbe4f2a3f7cap-2, 0x1.cf24b18f9e496p-1, 0x1.8b70638316e0cp-2, 0x1.58ee6bf2b1dcdp-2, +0x1.cf1b317f9e366p-1, 0x1.e6b2870bcd651p-2, 0x1.8de620831bcc4p-2, 0x1.d01ac283a0358p-3, +0x1.6d480f02da902p-3, 0x1.1e13ce623c27ap-1, 0x1.384c1ce670984p-1, 0x1.993ce1133279cp-3, +0x1.fdba03d7fb74p-1, 0x1.f47f83e3e8ffp-4, 0x1.92fe08c325fc1p-5, 0x1.0cfa3ffa19f48p-2, +0x1.6d5538eedaaa7p-1, 0x1.0774db6a0ee9bp-1, 0x1.7be080b2f7c1p-1, 0x1.fc7946cff8f29p-1, +0x1.ac3198fb58633p-1, 0x1.7edd9b3efdbb3p-1, 0x1.70e43f82e1c88p-6, 0x1.bc1fa8e3783f5p-3, +0x1.4cc3041299861p-1, 0x1.6ada64c2d5b4dp-1, 0x1.8ca1443b19429p-1, 0x1.f0d448e7e1a89p-1, +0x1.0dd3cc8a1ba7ap-2, 0x1.c5e7e2138bcfcp-3, 0x1.4386126e870c2p-1, 0x1.16c90dde2d922p-1, +0x1.027aa84204f55p-3, 0x1.27c885824f911p-6, 0x1.c34043d786808p-1, 0x1.f73b7183ee76ep-6, +0x1.f92f0f63f25e2p-2, 0x1.1466a82a28cd5p-2, 0x1.0781185a0f023p-2, 0x1.57e98b72afd31p-1, +0x1.a8472277508e4p-1, 0x1.bc0ca91378195p-1, 0x1.be38c3b77c718p-1, 0x1.a601264b4c025p-1, +0x1.fa9c998ff5393p-1, 0x1.d768a443aed15p-1, 0x1.63f23242c7e46p-4, 0x1.67f1d27ecfe3ap-1, +0x1.bdbaff5b7b76p-2, 0x1.a85ec6fb50bd9p-1, 0x1.646b194ac8d63p-1, 0x1.161e314a2c3c6p-2, +0x1.273c623a4e78cp-1, 0x1.6ff23b46dfe47p-1, 0x1.f42e05bbe85c1p-2, 0x1.cffd99239ffb3p-3, +0x1.b599400b6b328p-2, 0x1.0d708e2a1ae12p-2, 0x1.934ebcb3269d8p-3, 0x1.61b6864ec36d1p-1, +0x1.f0647f33e0c9p-2, 0x1.a859c19b50b38p-1, 0x1.e1fe50a3c3fcap-3, 0x1.38d0e9ae71a1dp-1, +0x1.b19805c763301p-1, 0x1.ddfebfe3bbfd8p-4, 0x1.488ac53a91159p-1, 0x1.5c5f1aeab8be3p-2, +0x1.8be6582317ccbp-2, 0x1.cc4b516b9896ap-1, 0x1.864639030c8c7p-7, 0x1.b8e93a1371d27p-3, +0x1.8857fa7b10affp-1, 0x1.c451dc9b88a3cp-1, 0x1.43b74cc2876eap-5, 0x1.82f4940b05e93p-1, +0x1.9bba80df3775p-1, 0x1.02e6ec5205cdep-3, 0x1.d5cccd0bab99ap-2, 0x1.ea600223d4cp-3, +0x1.e9188213d231p-1, 0x1.3d45ff327a8cp-3, 0x1.05a7192e0b4e3p-1, 0x1.1054e44a20a9dp-1, +0x1.bf43bb137e877p-1, 0x1.ffbe1c0bff7c4p-1, 0x1.84544a9308a89p-1, 0x1.3420b62a68417p-2, +0x1.0cecc63a19d99p-2, 0x1.e927f9c3d24ffp-1, 0x1.fbc6e163f78dcp-1, 0x1.7ea8a2bafd514p-1, +0x1.9181bb5b23037p-1, 0x1.d119d623a233bp-3, 0x1.6ef318cadde63p-2, 0x1.4319c12286338p-1, +0x1.600c9b0ac0193p-2, 0x1.1467000228cep-15, 0x1.f1494e97e292ap-1, 0x1.75f97996ebf2fp-1, +0x1.cc4fa307989f4p-1, 0x1.f762677feec4dp-1, 0x1.e433c81bc8679p-1, 0x1.54a79d82a94f4p-1, +0x1.bbb4441777689p-1, 0x1.f86f3cebf0de8p-1, 0x1.af3863135e70cp-2, 0x1.576ec4f2aedd9p-1, +0x1.c947bfe3928f8p-4, 0x1.c282980f85053p-1, 0x1.d206c57ba40d9p-1, 0x1.120bd0622417ap-4, +0x1.1d417d823a83p-5, 0x1.af5bbd4b5eb78p-2, 0x1.32965e56652ccp-1, 0x1.d117d2eba22fap-1, +0x1.aed7f55b5daffp-2, 0x1.6dd551d2dbaaap-2, 0x1.aca0b7f359417p-3, 0x1.5de25dcebbc4cp-1, +0x1.40254552804a9p-2, 0x1.9bbc3d8337788p-3, 0x1.b916010b722cp-2, 0x1.8ca2f0031945ep-4, +0x1.b66b09d36cd61p-2, 0x1.94048ceb28092p-1, 0x1.74ae1f22e95c4p-1, 0x1.8b3bd2731677ap-1, +0x1.9408de872811cp-1, 0x1.65f76dbacbeeep-1, 0x1.01354c06026aap-1, 0x1.6058818ec0b1p-1, +0x1.5d59d536bab3bp-1, 0x1.cad2284395a45p-2, 0x1.6a003e1ad4008p-2, 0x1.190e194a321c3p-1, +0x1.bbb0a21377614p-2, 0x1.8c9c50971938ap-1, 0x1.c1f378f383e6fp-3, 0x1.170149062e029p-1, +0x1.4f1ee8a29e3ddp-1, 0x1.0a0e8ed2141d2p-3, 0x1.3942c31672858p-1, 0x1.60f3007ac1e6p-1, +0x1.1a31825e3463p-1, 0x1.af6485a35ec91p-3, 0x1.320ad3626415ap-1, 0x1.f19d7d0be33bp-1, +0x1.22c3ca5245879p-1, 0x1.9d33015f3a66p-1, 0x1.4f7fdad69effbp-1, 0x1.c2d66cfb85acep-1, +0x1.08842f0211086p-7, 0x1.6056dac2c0adbp-4, 0x1.f46acaffe8d59p-1, 0x1.beaf2b537d5e5p-2, +0x1.c00f6843801edp-1, 0x1.6918ea1ed231dp-1, 0x1.aa4da063549b4p-3, 0x1.541846caa8309p-1, +0x1.9e20afab3c416p-2, 0x1.6bc8b41ed7917p-1, 0x1.68e190aad1c32p-2, 0x1.63516842c6a2dp-4, +0x1.44c720f2898e4p-3, 0x1.6970e762d2e1dp-1, 0x1.457846568af09p-1, 0x1.2f0a19465e143p-1, +0x1.ec1a6febd834ep-2, 0x1.b5f524936bea5p-1, 0x1.182d8932305b1p-3, 0x1.14b082522961p-3, +0x1.f878c847f0f19p-1, 0x1.7f4e2562fe9c5p-1, 0x1.a61f210f4c3e4p-1, 0x1.12aa4aa225549p-1, +0x1.eb2746cbd64e9p-1, 0x1.b053e8db60a7dp-2, 0x1.0447c7ae088f9p-1, 0x1.0deb111e1bd62p-1, +0x1.d573d723aae7bp-3, 0x1.4f1e8a029e3d1p-3, 0x1.a182fc2b4306p-2, 0x1.e5fc1a23cbf83p-3, +0x1.ff49f773fe93fp-3, 0x1.8a58922314b12p-2, 0x1.58d69c32b1ad4p-1, 0x1.ff0f30e3fe1e6p-4, +0x1.72299982e4533p-4, 0x1.c36a044b86d41p-1, 0x1.93fa2ce727f46p-1, 0x1.faab160bf5563p-2, +0x1.2f32b8665e657p-1, 0x1.21abd4e24357bp-3, 0x1.29bfb812537f7p-1, 0x1.806480a700c9p-1, +0x1.b1dbdc9b63b7cp-1, 0x1.bcdff99379bffp-3, 0x1.5edd33d2bdba6p-2, 0x1.4fd2291a9fa45p-2, +0x1.296917a252d23p-4, 0x1.eaf3f86bd5e7fp-2, 0x1.da2a6a43b454dp-2, 0x1.da5eb383b4bd6p-5, +0x1.d3208653a6411p-3, 0x1.2668ac5a4cd16p-2, 0x1.305035de60a07p-1, 0x1.7fbda182ff7b4p-3, +0x1.6b5e4a9ad6bc9p-1, 0x1.a4bfec43497fep-4, 0x1.6dda797edbb4fp-1, 0x1.e0bb4067c1768p-1, +0x1.10bf4012217e8p-2, 0x1.f4dfbc83e9bf8p-4, 0x1.68e91bb2d1d23p-3, 0x1.08321de610644p-1, +0x1.03c840a607908p-1, 0x1.b310e31f6621cp-1, 0x1.4814040690281p-1, 0x1.320d73d6641aep-1, +0x1.767ae766ecf5dp-1, 0x1.b81c61d37038cp-2, 0x1.7b17f6c2f62ffp-4, 0x1.4b5b3f9296b68p-2, +0x1.2479262648f25p-1, 0x1.5922b6eab2457p-1, 0x1.309103626122p-4, 0x1.acaa057b59541p-2, +0x1.c85ab54f90b57p-1, 0x1.ab0174b35602fp-2, 0x1.7e3e174efc7c3p-1, 0x1.ed87d843db0fbp-1, +0x1.cafab68f95f57p-1, 0x1.ad4d31b35a9a6p-3, 0x1.65b86f82cb70ep-6, 0x1.fe16c123fc2d8p-4, +0x1.fd0f453bfa1e9p-2, 0x1.3b7df95a76fbfp-1, 0x1.3f64810a7ec9p-2, 0x1.a797b4d34f2f7p-3, +0x1.7015f6e2e02bfp-1, 0x1.b1974003632e8p-6, 0x1.2a84b66255097p-3, 0x1.f87596ebf0eb3p-1, +0x1.30a2c64261459p-3, 0x1.49b6e90a936ddp-2, 0x1.00a7b4d2014f7p-1, 0x1.4ff0f2369fe1ep-1, +0x1.5fb15e82bf62cp-3, 0x1.22eee35245ddcp-3, 0x1.03fccc1207f9ap-2, 0x1.ce673f079cce8p-1, +0x1.24c9e9be4993dp-1, 0x1.62c2c9cac5859p-2, 0x1.d0537b43a0a6fp-3, 0x1.250c3f824a188p-3, +0x1.50837982a106fp-6, 0x1.344dfe7a689cp-2, 0x1.1f9812a23f302p-1, 0x1.d2ded11fa5bdap-1, +0x1.6fa7b996df4f7p-1, 0x1.3bac53da7758ap-2, 0x1.c066a95f80cd5p-1, 0x1.3aa270267544ep-1, +0x1.0929765a1252fp-1, 0x1.cb946cdb9728ep-1, 0x1.7a65484af4ca9p-1, 0x1.ec463d03d88c8p-7, +0x1.071266320e24dp-1, 0x1.a1788cc342f12p-5, 0x1.c65c18b38cb83p-3, 0x1.dca17443b942fp-3, +0x1.3d2216627a443p-4, 0x1.7870678af0e0dp-2, 0x1.be77cff37cefap-3, 0x1.cf33d1739e67ap-3, +0x1.6113a84ec2275p-1, 0x1.7045a8cee08b5p-1, 0x1.c3bde697877bdp-1, 0x1.b8ffffef72p-1, +0x1.b90161a37202cp-1, 0x1.16f132722de26p-3, 0x1.87673ef70ece8p-1, 0x1.bb9696bb772d3p-2, +0x1.ee3b6303dc76cp-2, 0x1.fb7c1dc7f6f84p-1, 0x1.270e5b424e1cbp-1, 0x1.01a1cd520343ap-1, +0x1.2b463a02568c7p-2, 0x1.1a99b78235337p-3, 0x1.a9013cdb52028p-2, 0x1.52b5a602a56b5p-7, +0x1.c8f92f9b91f26p-2, 0x1.29ce8f92539d2p-2, 0x1.3fed46be7fda9p-1, 0x1.eda60e27db4c2p-1, +0x1.81eed29303ddap-3, 0x1.74a51e0ae94a4p-2, 0x1.f557271feaae5p-1, 0x1.678e1ad6cf1c3p-1, +0x1.a8d42fa351a86p-2, 0x1.9bb8b52337717p-3, 0x1.deb677ebbd6cfp-1, 0x1.f81cb53bf0397p-2, +0x1.2326610e464ccp-1, 0x1.3951af9272a36p-3, 0x1.6fdb4efadfb6ap-1, 0x1.087412b210e82p-2, +0x1.be9a14b37d343p-1, 0x1.3399358e67327p-1, 0x1.e9d04a43d3a09p-4, 0x1.779b7652ef36fp-1, +0x1.7955822ef2abp-1, 0x1.c4a1483f89429p-1, 0x1.559b06b2ab361p-3, 0x1.c1ccceb38399ap-3, +0x1.c01d6603803adp-1, 0x1.7c751ceef8ea4p-1, 0x1.721500fee42ap-1, 0x1.57020c02ae042p-3, +0x1.c31b8acf86371p-1, 0x1.1a567da234adp-3, 0x1.6c2d6662d85adp-3, 0x1.4f3045329e609p-2, +0x1.b6f9ce6b6df3ap-2, 0x1.9af8a05735f14p-1, 0x1.2a7c618254f8cp-2, 0x1.3bf89bda77f13p-1, +0x1.552cbd62aa598p-3, 0x1.152aafba2a556p-2, 0x1.470d6d5a8e1aep-2, 0x1.29b5472a536a9p-1, +0x1.e3070a4bc60e1p-2, 0x1.047a5d2a08f4cp-2, 0x1.2e1d0e225c3a2p-4, 0x1.4a9e6302953ccp-5, +0x1.a12334f342467p-2, 0x1.959ef0c32b3dep-1, 0x1.31c7df1a638fcp-2, 0x1.1e575e523caecp-2, +0x1.92704c9b24e0ap-2, 0x1.ac3bf1ab5877ep-2, 0x1.b1c95e036392cp-7, 0x1.0a36a1e2146d4p-3, +0x1.357e82226afdp-2, 0x1.70b79ca2e16f4p-3, 0x1.6601b852cc037p-2, 0x1.6b729c42d6e54p-3, +0x1.d8a30417b1461p-1, 0x1.28aee922515ddp-4, 0x1.613a5422c274bp-2, 0x1.9bbe8ee7377d2p-1, +0x1.aeadf2435d5bep-3, 0x1.0ba883ae1751p-1, 0x1.0d5ac5f21ab59p-3, 0x1.472863c68e50cp-1, +0x1.4d4248029a849p-2, 0x1.b129c47b62539p-2, 0x1.0641ff3a0c84p-2, 0x1.f7d8a6bbefb15p-2, +0x1.632a3a1ac6547p-1, 0x1.26a7b64a4d4f7p-1, 0x1.2d0cd4225a19bp-4, 0x1.52b6fcf2a56ep-3, +0x1.a8e4e4e351c9dp-1, 0x1.2d94f1325b29ep-3, 0x1.a55e95c34abd3p-3, 0x1.e5d9fd63cbb4p-3, +0x1.e1042d0fc2086p-1, 0x1.023b94fe04773p-1, 0x1.08a22e8611446p-1, 0x1.5478a6b2a8f15p-2, +0x1.d8598dd3b0b32p-1, 0x1.0f6953fe1ed2ap-1, 0x1.d993f7abb327fp-2, 0x1.cc633b8398c67p-3, +0x1.6b973b26d72e7p-1, 0x1.9fcad7ff3f95bp-1, 0x1.9beaebe337d5dp-2, 0x1.443a3f3e88748p-1, +0x1.c4e0b52389c17p-1, 0x1.7e92a002fd254p-1, 0x1.bff19c437fe34p-2, 0x1.84618d8308c32p-4, +0x1.1476475a28ec9p-2, 0x1.234f7f9e469fp-1, 0x1.77b49576ef693p-1, 0x1.30dc47b261b89p-1, +0x1.fbe461dff7c8cp-1, 0x1.fad59513f5ab3p-1, 0x1.6644d862cc89bp-4, 0x1.5f0e9bf6be1d3p-1, +0x1.217d4b5e42fa9p-1, 0x1.49a8d6429351bp-3, 0x1.b3bc5b376778bp-1, 0x1.94c4607b2988cp-2, +0x1.3b9ee3ba773dcp-2, 0x1.d1400a43a2801p-5, 0x1.43d8af9687b16p-1, 0x1.fb4e7ba3f69cfp-3, +0x1.1f4f95a23e9f3p-1, 0x1.31eb786263d6fp-3, 0x1.290ff246521fep-1, 0x1.ef5246e3dea49p-2, +0x1.5be4321ab7c86p-1, 0x1.5d9ee182bb3dcp-5, 0x1.6ac1f252d583ep-1, 0x1.8ef6da7b1dedbp-2, +0x1.b5a4c6176b499p-1, 0x1.c5bb42038b768p-4, 0x1.76b58f02ed6b2p-6, 0x1.7a857b36f50afp-1, +0x1.b74a08436e941p-1, 0x1.d75cf533aeb9fp-2, 0x1.ab11aceb56236p-1, 0x1.0614afc20c296p-3, +0x1.dfbf4703bf7e9p-6, 0x1.22c6425e458c8p-1, 0x1.726173a2e4c2ep-1, 0x1.5c4b8282b897p-6, +0x1.1d9bd7723b37bp-1, 0x1.9f2a0eaf3e542p-1, 0x1.69f0f80ad3e1fp-1, 0x1.f8c91663f1923p-4, +0x1.f194443fe3289p-1, 0x1.1dad533e3b5aap-1, 0x1.097b530a12f6ap-1, 0x1.1ec76c3a3d8eep-2, +0x1.3ac153e27582ap-1, 0x1.35500a726aa01p-3, 0x1.0e3755061c6ebp-1, 0x1.6843a602d0875p-3, +0x1.339dc172673b8p-2, 0x1.ba3a3a4374747p-4, 0x1.51ba0cf2a3742p-1, 0x1.f5b312d3eb662p-1, +0x1.3484d5826909bp-3, 0x1.78f7fe82f1fp-2, 0x1.7a5d001af4bap-2, 0x1.62fdba02c5fb7p-8, +0x1.ea66cf03d4cdap-2, 0x1.91c859132390bp-2, 0x1.7d4b76aefa96fp-1, 0x1.58fadf8ab1f5cp-2, +0x1.b492a72369255p-1, 0x1.285d239650ba4p-1, 0x1.dc05376bb80a7p-2, 0x1.c390a15b87214p-1, +0x1.2c8d97c2591b3p-3, 0x1.81903d5303208p-3, 0x1.ce72fd6f9ce6p-1, 0x1.68bf3d62d17e8p-1, +0x1.ff8e1e03ff1c4p-1, 0x1.3863f57a70c7fp-1, 0x1.a7d8602f4fb0cp-1, 0x1.f122623fe244cp-1, +0x1.584522d2b08a4p-3, 0x1.62a7666ac54edp-2, 0x1.010c30b202186p-2, 0x1.90d29c9b21a54p-1, +0x1.fd4f6babfa9edp-2, 0x1.8ebd6d631d7aep-1, 0x1.eae3861bd5c71p-1, 0x1.9876968f30ed3p-1, +0x1.c604b4ab8c097p-1, 0x1.3c9d930e793b2p-1, 0x1.8e29a95f1c535p-1, 0x1.325ea0c264bd4p-5, +0x1.f919924ff2332p-1, 0x1.2d60a5a25ac15p-3, 0x1.5ebe5802bd7cbp-5, 0x1.dc99f3a3b933ep-2, +0x1.143c55f22878bp-1, 0x1.93375c2f266ecp-1, 0x1.9aca69973594dp-1, 0x1.919dfa2b233bfp-2, +0x1.7728ff82ee52p-2, 0x1.119a0a9223341p-2, 0x1.18bf3cda317e8p-2, 0x1.06b7e5b60d6fdp-1, +0x1.d262293ba4c45p-2, 0x1.6b4a6f72d694ep-3, 0x1.bddc8c537bb92p-3, 0x1.d17e653ba2fcdp-2, +0x1.93369157266d2p-1, 0x1.74f83442e9f07p-5, 0x1.b3c329b367865p-2, 0x1.e947da0bd28fbp-1, +0x1.91466cf3228cep-2, 0x1.5a67ad36b4cf6p-1, 0x1.7a1a76a2f434fp-1, 0x1.c74aec4f8e95ep-1, +0x1.d24a352ba4947p-2, 0x1.64fdfcbec9fcp-1, 0x1.5fc182dabf83p-1, 0x1.5e539e7abca74p-2, +0x1.43371f92866e4p-2, 0x1.dbd6586bb7acbp-2, 0x1.849f7293093eep-2, 0x1.356a442a6ad49p-2, +0x1.394355a27286bp-1, 0x1.b0773d9b60ee8p-2, 0x1.89021be712043p-1, 0x1.35feae426bfd6p-3, +0x1.adcbebe35b97dp-3, 0x1.23cc857a47991p-1, 0x1.164ea8a62c9d5p-1, 0x1.27077abe4e0efp-1, +0x1.ac998ac359331p-1, 0x1.a2ae4717455c9p-1, 0x1.6dfb0382dbf6p-4, 0x1.2b953eba572a8p-2, +0x1.fd80e2f3fb01cp-1, 0x1.3a6d070a74da1p-2, 0x1.7e89d1fafd13ap-1, 0x1.90b77447216efp-1, +0x1.690c0d92d2182p-2, 0x1.61ad9b52c35b3p-3, 0x1.79ff4e4ef3feap-1, 0x1.7d293d46fa528p-1, +0x1.b2d3140b65a63p-1, 0x1.e83389e3d0671p-2, 0x1.4474299288e85p-1, 0x1.37f05d3a6fe0cp-2, +0x1.645f06b2c8be1p-3, 0x1.486b58da90d6bp-2, 0x1.4b21fdda9644p-1, 0x1.f566a2ebeacd4p-2, +0x1.9220d8a32441bp-1, 0x1.ae36e4835c6ddp-6, 0x1.9568738b2ad0ep-1, 0x1.96c85c832d90cp-2, +0x1.cb5aabe396b55p-2, 0x1.1e6a8f723cd52p-1, 0x1.18e3d9d631c7bp-1, 0x1.512050eaa240ap-1, +0x1.08dc53a211b8ap-3, 0x1.799413c2f3282p-4, 0x1.e09f2e93c13e6p-3, 0x1.eed09fafdda14p-1, +0x1.d1e0c98fa3c19p-1, 0x1.4bce582a979cbp-2, 0x1.09367e12126dp-2, 0x1.cf61ac7f9ec36p-1, +0x1.431daf9e863b6p-1, 0x1.928882032511p-8, 0x1.601920c2c0324p-1, 0x1.f7a3b667ef477p-1, +0x1.6e41df62dc83cp-3, 0x1.b430de236861cp-2, 0x1.74ccf3aae999ep-1, 0x1.cc717c0398e3p-6, +0x1.ce3234039c647p-1, 0x1.72823a7ae5047p-2, 0x1.54b774faa96efp-2, 0x1.3a4fad62749f6p-4, +0x1.5d76c9aabaed9p-1, 0x1.f57db857eafb7p-1, 0x1.21fd472243fa9p-1, 0x1.df2f4493be5e9p-2, +0x1.77b7bc02ef6f8p-8, 0x1.6ecb7552dd96fp-2, 0x1.bafbd08f75f7ap-1, 0x1.d1398ad3a2731p-2, +0x1.d5d04a1baba09p-1, 0x1.a7bf54c34f7ebp-2, 0x1.cde8b2a39bd16p-4, 0x1.8075f04300ebep-5, +0x1.03122cda06246p-1, 0x1.63c9c3f2c7938p-2, 0x1.b5ffac036bff6p-7, 0x1.a9e5ecd353cbep-2, +0x1.57cc0e12af982p-1, 0x1.16e67b722dccfp-2, 0x1.48a945ca91529p-2, 0x1.35d37b5a6ba6fp-2, +0x1.1d309d7a3a614p-2, 0x1.1b70ea0236e1dp-7, 0x1.251ae8224a35dp-2, 0x1.d4518d2ba8a32p-2, +0x1.bd0c65737a18dp-2, 0x1.d699ef03ad33ep-7, 0x1.f118a4ebe2315p-2, 0x1.5970cd72b2e1ap-2, +0x1.813709f3026e1p-2, 0x1.a2e80cf345d02p-1, 0x1.a804b8cb50097p-2, 0x1.e124ea03c249dp-5, +0x1.9865c54b30cb9p-1, 0x1.f5ffa387ebff4p-1, 0x1.0da9f0ea1b53ep-1, 0x1.9b5534c336aa7p-1, +0x1.5acabc5ab5958p-2, 0x1.914b82eb2297p-2, 0x1.07e3f45a0fc7fp-2, 0x1.066b50920cd6ap-2, +0x1.9c856bd7390adp-1, 0x1.7b5e2102f6bc4p-2, 0x1.367a0e9a6cf42p-2, 0x1.3f2f31627e5e6p-2, +0x1.6f93f27adf27ep-1, 0x1.442a0bfa88541p-2, 0x1.748a8f1ae9152p-1, 0x1.8ec001131d8p-2, +0x1.2d8843b65b108p-1, 0x1.8df31fc31be64p-5, 0x1.6249be36c4938p-1, 0x1.bc20927778412p-1, +0x1.d4cf5a43a99ebp-5, 0x1.f4d7324be9ae6p-1, 0x1.4c92b21299256p-2, 0x1.f7a650bbef4cap-2, +0x1.fc319a07f8633p-1, 0x1.9ed5ab833dab5p-1, 0x1.a88b8f1751172p-1, 0x1.799a3dfaf3348p-2, +0x1.41bdb872837b7p-1, 0x1.f237ade3e46f6p-3, 0x1.b5bedb3b6b7dbp-2, 0x1.b446fb73688dfp-2, +0x1.ca363bf3946c7p-3, 0x1.e8895e87d112cp-1, 0x1.d5e2c9f3abc59p-3, 0x1.1ff2ed2e3fe5ep-1, +0x1.625e3ffac4bc8p-2, 0x1.f2d55953e5aabp-2, 0x1.a328957746513p-1, 0x1.36d22f426da46p-3, +0x1.b719bd2b6e338p-1, 0x1.f32ce603e659dp-4, 0x1.da984903b5309p-2, 0x1.26adafa24d5b6p-1, +0x1.c0f5457b81ea9p-2, 0x1.875ace630eb5ap-3, 0x1.ee0db02fdc1b6p-1, 0x1.c05cce0380b9ap-6, +0x1.ead79663d5af3p-3, 0x1.50576e62a0aeep-1, 0x1.ca2378e79446fp-1, 0x1.3005b67a600b7p-2, +0x1.452ea0aa8a5d4p-1, 0x1.c1b347c383669p-3, 0x1.93d6039f27acp-1, 0x1.41603aae82c07p-1, +0x1.e84fae03d09f6p-6, 0x1.3c6192b278c32p-1, 0x1.fe2d59abfc5abp-1, 0x1.510035e2a2007p-1, +0x1.b8ef7e2f71dfp-1, 0x1.b2198e8b64332p-2, 0x1.591d9ce2b23b4p-4, 0x1.5be86942b7d0dp-4, +0x1.832c4b9b06589p-2, 0x1.4138cc328271ap-2, 0x1.4b6ffa5696dffp-1, 0x1.72c545cae58a9p-1, +0x1.9a0712c3340e2p-1, 0x1.dd311f93ba624p-2, 0x1.c079d19b80f3ap-1, 0x1.5120cfeaa241ap-1, +0x1.2cfe2c8a59fc6p-1, 0x1.5b8bec3ab717ep-2, 0x1.df39fe23be74p-3, 0x1.af19e8835e33dp-6, +0x1.0f9ca9b61f395p-1, 0x1.9770bed32ee18p-3, 0x1.b7bb5b836f76bp-5, 0x1.8a528f4f14a52p-1, +0x1.b6339e1b6c674p-1, 0x1.e59f2e9fcb3e6p-1, 0x1.12ab54622556bp-4, 0x1.f6c47d83ed89p-2, +0x1.58300232b06p-3, 0x1.b62b6e2b6c56ep-1, 0x1.e613cb83cc279p-4, 0x1.9539f7f32a73fp-3, +0x1.e51a01b3ca34p-2, 0x1.d77e98c3aefd3p-4, 0x1.b64eb3e36c9d6p-1, 0x1.56f8fe0aadf2p-2, +0x1.13fc9a6227f93p-1, 0x1.e172677fc2e4dp-1, 0x1.adf318635be63p-2, 0x1.d592c02fab258p-1, +0x1.041d9b2a083b3p-2, 0x1.134c342226987p-4, 0x1.485805f690b01p-1, 0x1.c15e054382bc1p-5, +0x1.1102165222043p-1, 0x1.08d1d78e11a3bp-1, 0x1.6d36b03eda6d6p-1, 0x1.f00216c3e0043p-4, +0x1.b697cdab6d2fap-1, 0x1.e5052fc7ca0a6p-1, 0x1.2de448825bc89p-3, 0x1.8c68eec318d1ep-2, +0x1.2b857df2570bp-3, 0x1.9bd31f6337a64p-3, 0x1.421c1ab284383p-3, 0x1.14fd940229fb3p-9, +0x1.324fd9d2649fbp-3, 0x1.cb71c4e396e39p-3, 0x1.f8ee78abf1dcfp-2, 0x1.453fee0a8a7fep-2, +0x1.483efb02907dfp-4, 0x1.3939b5c672737p-1, 0x1.07ee75020fdcfp-1, 0x1.1b94e03e3729cp-1, +0x1.742988e2e8531p-1, 0x1.7c7a51c2f8f4ap-2, 0x1.c7115f438e22cp-1, 0x1.104c468220989p-2, +0x1.3f5f20ba7ebe4p-2, 0x1.3c15d6e2782bbp-2, 0x1.76e38db2edc72p-3, 0x1.21be5df2437ccp-1, +0x1.80e8e3f301d1cp-2, 0x1.a610e9634c21dp-1, 0x1.3dd43e467ba88p-1, 0x1.d176884ba2ed1p-1, +0x1.5dc581dabb8bp-2, 0x1.5615dd02ac2bcp-2, 0x1.eed96403ddb2dp-6, 0x1.95ea3a632bd47p-3, +0x1.20203c9240408p-2, 0x1.6bbf7502d77efp-3, 0x1.2baf05fa575e1p-1, 0x1.b5e2fb8b6bc5fp-2, +0x1.83c94a3307929p-2, 0x1.7c360ca6f86c2p-1, 0x1.b80cf6b37019fp-2, 0x1.0e789b921cf13p-1, +0x1.ef127de3de25p-1, 0x1.d87db7afb0fb7p-1, 0x1.b118929762312p-1, 0x1.81a5d403034bbp-5, +0x1.11b76d76236eep-1, 0x1.720e0f2ae41c2p-2, 0x1.33af3d7e675e8p-1, 0x1.0bc1ecaa1783ep-2, +0x1.7744307aee886p-1, 0x1.f5813983eb027p-2, 0x1.0e0719961c0e3p-1, 0x1.6f3c0d42de782p-5, +0x1.98cb883331971p-1, 0x1.6bbffd02d78p-1, 0x1.38b21eca71644p-1, 0x1.64ffe8a2c9ffdp-3, +0x1.11d0e66223a1dp-1, 0x1.da197433b432fp-3, 0x1.55b41382ab682p-4, 0x1.c0b3a74f81675p-1, +0x1.21914b9243229p-1, 0x1.d16a6ca3a2d4ep-4, 0x1.3171af2262e36p-4, 0x1.b1a169db6342dp-1, +0x1.2a3a55aa5474bp-2, 0x1.51dd3bdea3ba7p-1, 0x1.1925cf3a324bap-2, 0x1.5701cff2ae03ap-1, +0x1.9c26910b384d2p-2, 0x1.689962f6d132cp-1, 0x1.95e9ae032bd36p-3, 0x1.7a4b8ccaf4972p-2, +0x1.41171aa2822e3p-1, 0x1.692fe142d25fcp-5, 0x1.aa80474b55009p-2, 0x1.4b3a205296744p-3, +0x1.9f340b533e681p-2, 0x1.1dec24823bd85p-6, 0x1.b15efcd362bep-2, 0x1.1b78d88236f1bp-3, +0x1.03affde6076p-1, 0x1.e6b697ffcd6d3p-1, 0x1.7747dbe2ee8fbp-3, 0x1.38f70c2a71ee2p-2, +0x1.527694fea4ed3p-1, 0x1.968415c32d083p-1, 0x1.eb770083d6eep-2, 0x1.911ded73223bep-3, +0x1.a14e5983429cbp-6, 0x1.207202b240e4p-1, 0x1.27d915624fb23p-4, 0x1.2e9bbe5e5d378p-1, +0x1.5a9f5046b53eap-1, 0x1.2ca56242594acp-3, 0x1.c07a506b80f4ap-2, 0x1.efbc7b1fdf78fp-1, +0x1.9d0694733a0d3p-1, 0x1.6cd00fd2d9a02p-1, 0x1.46be4b0e8d7c9p-1, 0x1.ac6773d358ceep-3, +0x1.aad2e58b55a5dp-2, 0x1.ac38b68f58717p-1, 0x1.283fa35a507f4p-1, 0x1.6808d682d011bp-5, +0x1.c2cbb4a385977p-1, 0x1.fd7fc6fffaff9p-1, 0x1.a53c55f34a78bp-3, 0x1.24cb74924996fp-2, +0x1.9bca080337941p-7, 0x1.41fe93ea83fd2p-1, 0x1.b287e0db650fcp-2, 0x1.0a1f2606143e5p-1, +0x1.28b52be6516a5p-1, 0x1.3715e7666e2bdp-1, 0x1.a69aac1f4d356p-1, 0x1.ecaf0393d95ep-3, +0x1.9b33fa4b3667fp-2, 0x1.38ac58ba7158bp-2, 0x1.bee678837dccfp-2, 0x1.b548dfe36a91cp-2, +0x1.bcc82f0f79906p-1, 0x1.046e5eee08dccp-1, 0x1.2805ca02500b9p-6, 0x1.17677f562ecfp-1, +0x1.4f97b7829f2f7p-1, 0x1.d2faad0ba5f56p-2, 0x1.0723fa720e47fp-1, 0x1.d93c97e3b2793p-2, +0x1.59359962b26b3p-3, 0x1.378915f26f123p-3, 0x1.57b828e6af705p-1, 0x1.2bb6d91e576dbp-1, +0x1.fa1afc0bf436p-1, 0x1.ffdf30f3ffbe6p-3, 0x1.42376686846edp-1, 0x1.bce6b0ab79cd6p-1, +0x1.f5de4ce3ebbcap-3, 0x1.ab867c07570dp-1, 0x1.3d31abc27a635p-3, 0x1.07cd76ba0f9afp-2, +0x1.db0a1fdbb6144p-2, 0x1.28905b5e5120bp-1, 0x1.8e05e1631c0bcp-1, 0x1.63a3bd02c7478p-5, +0x1.7e990b02fd321p-3, 0x1.34a08d7e69412p-1, 0x1.22cbf96a4597fp-2, 0x1.2d403fe65a808p-1, +0x1.d0f6b9dba1ed7p-1, 0x1.70d938fae1b27p-1, 0x1.f92bf603f257fp-7, 0x1.8dbee8eb1b7ddp-1, +0x1.d51e5f93aa3ccp-3, 0x1.124de282249bcp-5, 0x1.4a4cd07a9499ap-2, 0x1.c4df4f6789beap-1, +0x1.f544695bea88dp-2, 0x1.ac4a62af5894cp-1, 0x1.62fb36aac5f67p-2, 0x1.50ef9b06a1df3p-1, +0x1.fa2ca82bf4595p-1, 0x1.26b887024d711p-6, 0x1.f299d093e533ap-3, 0x1.f447a433e88f5p-1, +0x1.125b20ea24b64p-2, 0x1.bedddaab7dbbbp-1, 0x1.b12e54db625cbp-1, 0x1.06a523b20d4a4p-1, +0x1.6a6456aed4c8bp-1, 0x1.eaff2003d5fe4p-11, 0x1.8a8bdf0f1517cp-1, 0x1.5fa59a62bf4b3p-3, +0x1.290b1b2a52163p-1, 0x1.1891c06e31238p-1, 0x1.b88e89b3711d1p-3, 0x1.88b15deb1162cp-1, +0x1.34c937b269927p-3, 0x1.ff133e43fe268p-2, 0x1.6be33ba2d7c67p-2, 0x1.e2907c43c521p-5, +0x1.c18b60638316cp-3, 0x1.7bac9b52f7593p-2, 0x1.abe7f0af57cfep-1, 0x1.cb54e00396a9cp-2, +0x1.9df657a33becbp-2, 0x1.443963a28872cp-3, 0x1.55137ecaaa27p-2, 0x1.c99d607f933acp-1, +0x1.fd58bb97fab17p-1, 0x1.5c075abeb80ebp-1, 0x1.1a8cfb863519fp-1, 0x1.f78563bfef0acp-1, +0x1.653d1ef6ca7a4p-1, 0x1.97336fab2e66ep-1, 0x1.ebcd07efd79a1p-1, 0x1.ee6aaf6fdcd56p-1, +0x1.56114a52ac229p-1, 0x1.9cfb5cc739f6cp-1, 0x1.ea1fa63bd43f5p-2, 0x1.80eb420301d68p-2, +0x1.9d761c933aec4p-1, 0x1.fe6ec8a3fcdd9p-3, 0x1.185f079a30be1p-1, 0x1.8d026f731a04ep-2, +0x1.982d7297305aep-1, 0x1.8682aa070d055p-1, 0x1.3cca56827994bp-3, 0x1.e55fc083cabf8p-1, +0x1.0c18925218312p-2, 0x1.052433720a486p-1, 0x1.c464240388c85p-8, 0x1.ecde4283d9bc8p-2, +0x1.c2fa811b85f5p-1, 0x1.af70b8f75ee17p-1, 0x1.dc199143b8332p-1, 0x1.23eb59d247d6bp-2, +0x1.fc478003f88fp-11, 0x1.0d46a1521a8d4p-2, 0x1.6e4c35a2dc987p-3, 0x1.fdd7cd77fbafap-1, +0x1.e2aaab67c5555p-1, 0x1.762008eeec401p-1, 0x1.f55d3137eaba6p-1, 0x1.47e7ca5a8fcf9p-1, +0x1.0d5378961aa6fp-1, 0x1.e12a3923c2547p-1, 0x1.365279c66ca4fp-1, 0x1.8d930b931b261p-3, +0x1.7e2595eafc4b3p-1, 0x1.5b126702b624dp-4, 0x1.23da63e647b4cp-1, 0x1.1b9bb27a37376p-1, +0x1.55fbfe12abf8p-2, 0x1.e1cb5c03c396cp-4, 0x1.e21cea33c439dp-1, 0x1.0cadc682195b9p-3, +0x1.c2bc158785783p-1, 0x1.8a7bfe8314f8p-4, 0x1.4459910288b32p-4, 0x1.23217ab24642fp-3, +0x1.3673b3466ce76p-1, 0x1.609fd342c13fap-4, 0x1.3f377ff27e6fp-1, 0x1.f2dc68bbe5b8dp-2, +0x1.db84b363b7096p-1, 0x1.1b51113236a22p-1, 0x1.8b63e14b16c7cp-1, 0x1.dc03c543b8079p-1, +0x1.a1f461db43e8cp-1, 0x1.e6f6eeb3cdedep-1, 0x1.d9db92b7b3b72p-1, 0x1.849f0d3f093e2p-1, +0x1.5d16f79eba2dfp-1, 0x1.cf38c3eb9e718p-1, 0x1.990daf33321b6p-2, 0x1.a9a9c0c353538p-3, +0x1.b062fd0f60c6p-1, 0x1.6ca8ae02d9516p-8, 0x1.9b9e662b373cdp-2, 0x1.2e8892f65d112p-1, +0x1.71dcf202e3b9ep-4, 0x1.f1a996ffe3533p-1, 0x1.289115b251223p-3, 0x1.b2733a9364e67p-2, +0x1.6f1813e2de302p-4, 0x1.62097ce2c413p-4, 0x1.1c650eea38ca2p-1, 0x1.f09f1803e13e3p-1, +0x1.7642bdb2ec858p-3, 0x1.44f0410e89e08p-1, 0x1.cb3bb58396777p-4, 0x1.940462b32808cp-1, +0x1.71043b76e2087p-1, 0x1.789ef6a2f13dfp-1, 0x1.1ae52e2235ca6p-2, 0x1.4c88eed69911ep-1, +0x1.27e00fa24fc02p-2, 0x1.8d6785831acf1p-5, 0x1.288cb41651197p-1, 0x1.af234d635e46ap-4, +0x1.ffcd670bff9adp-1, 0x1.026846ce04d09p-1, 0x1.ba8376eb7506fp-1, 0x1.5ce45ea6b9c8cp-1, +0x1.a342156b46843p-2, 0x1.0e149d021c294p-2, 0x1.c74eced78e9dap-1, 0x1.04080f8208102p-2, +0x1.13c73fc2278e8p-2, 0x1.2a3c03d25478p-2, 0x1.b08c9ab761193p-1, 0x1.703e7c42e07dp-2, +0x1.0d8f31ca1b1e6p-2, 0x1.fab0e023f561cp-1, 0x1.9158db6b22b1bp-1, 0x1.695536c2d2aa7p-2, +0x1.37907de26f21p-4, 0x1.5b7bd4aab6f7bp-2, 0x1.4a9366ca9526dp-2, 0x1.09057e5a120bp-2, +0x1.f2ae2b63e55c5p-1, 0x1.bd62542b7ac4bp-2, 0x1.88721dc310e44p-5, 0x1.63b266d6c764dp-1, +0x1.5d4082d2ba81p-3, 0x1.4bf371da97e6ep-2, 0x1.6076ab5ac0ed5p-2, 0x1.d680510bad00ap-2, +0x1.7da0628afb40cp-2, 0x1.d8c809c3b1901p-1, 0x1.2124923242492p-1, 0x1.7d3b309afa766p-2, +0x1.b660a11b6cc14p-2, 0x1.b750123b6ea02p-2, 0x1.b81f6f03703eep-5, 0x1.acd15b4759a2bp-1, +0x1.62b2579ec564bp-1, 0x1.e2d0c5c7c5a19p-1, 0x1.76ab1822ed563p-4, 0x1.ec95f77fd92bfp-1, +0x1.dfbb1ec3bf764p-3, 0x1.df61fdbfbec4p-1, 0x1.496a6b3a92d4dp-2, 0x1.fd6cc12bfad98p-2, +0x1.da12dddfb425cp-1, 0x1.b070884360e11p-4, 0x1.b360fbfb66c1fp-1, 0x1.04ed9c0209db4p-9, +0x1.c797f6bb8f2ffp-2, 0x1.62aabd72c5558p-3, 0x1.0b0f5992161ebp-2, 0x1.acf44d7b59e8ap-2, +0x1.375bd9726eb7bp-1, 0x1.3c1d9d4a783b4p-2, 0x1.d1646c83a2c8ep-4, 0x1.8eabfa271d57fp-1, +0x1.4408879688111p-1, 0x1.d4cfc67ba99f9p-2, 0x1.e7b08aa3cf611p-3, 0x1.6c5c6c02d8b8ep-8, +0x1.865fda030cbfbp-2, 0x1.9b10b4df36217p-1, 0x1.82eca25305d94p-2, 0x1.9e603d8f3cc08p-1, +0x1.dae2f7e3b5c5fp-3, 0x1.b9f0903373e12p-2, 0x1.4b3198d296633p-1, 0x1.d96b1597b2d63p-1, +0x1.7f921bc2ff243p-2, 0x1.7a06fbdaf40dfp-1, 0x1.c6010d178c022p-1, 0x1.37b7d5926f6fbp-1, +0x1.5968f996b2d1fp-1, 0x1.aad90ac355b21p-3, 0x1.b371b12366e36p-4, 0x1.337bd77266f7bp-1, +0x1.4188a77283115p-2, 0x1.e9cf321fd39e6p-1, 0x1.3480c50e69019p-1, 0x1.84904f170920ap-1, +0x1.09e785e213cf1p-3, 0x1.ba0871d77410ep-1, 0x1.6c29d742d853bp-3, 0x1.79d5baeaf3ab7p-1, +0x1.605d01f2c0bap-3, 0x1.2a6e06ca54dc1p-2, 0x1.0881b50e11037p-1, 0x1.9c1fc813383f9p-1, +0x1.7f9ee6a2ff3ddp-1, 0x1.826dd7bb04dbbp-1, 0x1.9ef880eb3df1p-1, 0x1.0b3b4e821676ap-3, +0x1.1d7e8c963afd2p-1, 0x1.81bb484303769p-3, 0x1.e12f1133c25e2p-1, 0x1.94374a8f286e9p-1, +0x1.3d671a2e7ace3p-1, 0x1.2c60aa0258c15p-1, 0x1.6da26022db44cp-1, 0x1.fd30280ffa605p-1, +0x1.4ccf4bb2999e9p-2, 0x1.33a36d366746ep-1, 0x1.34e7fd9e69dp-1, 0x1.ffd09f6fffa14p-1, +0x1.9e59afeb3cb36p-1, 0x1.6b5633c2d6ac6p-1, 0x1.334c76e26698fp-1, 0x1.f8f01d03f1e04p-4, +0x1.552565e2aa4adp-1, 0x1.9f34efb33e69ep-3, 0x1.c3ae52bb875cap-1, 0x1.979f475b2f3e9p-1, +0x1.0ead6e221d5aep-4, 0x1.eb8c8883d7191p-5, 0x1.1175024622eap-1, 0x1.e7b3b903cf677p-3, +0x1.67df97dacfbf3p-2, 0x1.9f6b75033ed6fp-5, 0x1.60cb6502c196dp-5, 0x1.9c75948338eb3p-4, +0x1.9c648f0b38c92p-1, 0x1.b505373b6a0a7p-1, 0x1.d97618c3b2ec3p-3, 0x1.73c6373ae78c7p-2, +0x1.574094c2ae813p-5, 0x1.5e325d82bc64cp-3, 0x1.386998a270d33p-3, 0x1.52db237aa5b64p-1, +0x1.83ed416707da8p-1, 0x1.bbbcc64f77799p-1, 0x1.500b4b86a0169p-1, 0x1.52a739e2a54e7p-4, +0x1.dec06703bd80dp-2, 0x1.09e6924213cd2p-2, 0x1.512c3562a2587p-4, 0x1.1b73c6d236e79p-2, +0x1.f0497ce3e093p-1, 0x1.5d71fd8ebae4p-1, 0x1.99afce1b335fap-2, 0x1.456ee2c28addcp-1, +0x1.c53f397b8a7e7p-1, 0x1.210c738a4218ep-2, 0x1.ba1c543b7438bp-2, 0x1.e714e73fce29dp-1, +0x1.5e7e049abcfc1p-2, 0x1.ee832c63dd066p-1, 0x1.840755f3080ebp-3, 0x1.632ece3ec65dap-1, +0x1.0f3c76021e78fp-6, 0x1.dc3a2f33b8746p-3, 0x1.96bd80cf2d7bp-1, 0x1.a4de72bf49bcep-1, +0x1.609e1842c13c3p-4, 0x1.a360df8346c1cp-6, 0x1.7b063962f60c7p-3, 0x1.061f31520c3e6p-3, +0x1.929e7983253cfp-3, 0x1.59b7e90ab36fdp-2, 0x1.9462efcf28c5ep-1, 0x1.e894dfc7d129cp-1, +0x1.a262eb4344c5dp-3, 0x1.c8dc76a391b8fp-2, 0x1.2e9c70025d38ep-5, 0x1.57f8ee52aff1ep-1, +0x1.69618472d2c31p-1, 0x1.e87a6d63d0f4ep-4, 0x1.e5b2d1bfcb65ap-1, 0x1.59ab0152b356p-1, +0x1.9a814b3b35029p-1, 0x1.65157192ca2aep-2, 0x1.3e33c82a7c679p-2, 0x1.5fc084b6bf811p-1, +0x1.4310f28e8621ep-1, 0x1.7c280e32f8502p-1, 0x1.46d56bf28daadp-1, 0x1.f24ff4dbe49ffp-1, +0x1.6aab3a92d5567p-1, 0x1.a7d741734fae8p-1, 0x1.557ec316aafd8p-1, 0x1.73251e42e64a4p-1, +0x1.ee5cd3c3dcb9ap-5, 0x1.d87887c3b0f11p-2, 0x1.180390fe30072p-1, 0x1.2be6411257cc8p-3, +0x1.f2ae95c3e55d3p-2, 0x1.76c51f5aed8a4p-1, 0x1.1902b93232057p-2, 0x1.5dfee942bbfddp-1, +0x1.1d089ee23a114p-4, 0x1.072263220e44cp-4, 0x1.4693c9068d279p-1, 0x1.18739d5a30e74p-2, +0x1.055287b60aa51p-1, 0x1.597d9006b2fb2p-1, 0x1.e432bcffc8658p-1, 0x1.bad0309375a06p-3, +0x1.968cddb72d19cp-1, 0x1.c9e58ebb93cb2p-1, 0x1.c85f0d7b90be2p-1, 0x1.310e28ee621c5p-1, +0x1.f1c11e03e3824p-3, 0x1.9de3c6333bc79p-3, 0x1.219d5b42433abp-2, 0x1.bf813a0f7f027p-1, +0x1.e3a0ffbfc742p-1, 0x1.d7a41997af483p-1, 0x1.b1d12eeb63a26p-1, 0x1.4e4c3a4e9c987p-1, +0x1.7f7b5b06fef6bp-1, 0x1.074ff1fe0e9fep-1, 0x1.82e2b11b05c56p-2, 0x1.9e6128433cc25p-1, +0x1.f38c35e3e7187p-1, 0x1.d974e98fb2e9dp-1, 0x1.e95ab88bd2b57p-1, 0x1.d9c70183b38ep-2, +0x1.503a08e6a0741p-1, 0x1.d7705483aee0bp-3, 0x1.2b89a80257135p-3, 0x1.73db1cc2e7b64p-1, +0x1.2d80c3125b018p-2, 0x1.9176330722ec6p-1, 0x1.4eb6c0029d6d8p-13, 0x1.9c12e93f3825dp-1, +0x1.d5e78613abcf1p-2, 0x1.e447a86bc88f5p-1, 0x1.58deac82b1bd6p-6, 0x1.0301417a06028p-2, +0x1.ae2d37275c5a7p-1, 0x1.d32602dfa64cp-1, 0x1.b28ec9af651d9p-1, 0x1.54ebf522a9d7fp-4, +0x1.d4f7a343a9ef4p-4, 0x1.0d75dd321aebcp-3, 0x1.ea1eb8b7d43d7p-1, 0x1.e3ff4243c7fe8p-5, +0x1.b0190e0360322p-5, 0x1.9befe79f37dfdp-1, 0x1.6c8c2e72d9186p-1, 0x1.9a7cebe734f9dp-1, +0x1.467fb3328cff6p-2, 0x1.6fec37e2dfd87p-4, 0x1.38de142a71bc3p-1, 0x1.2d981ef25b304p-2, +0x1.dc9c2203b9384p-7, 0x1.2238ccb24471ap-1, 0x1.83af903b075f2p-1, 0x1.57ac796eaf58fp-1, +0x1.9814e1d33029cp-1, 0x1.ce91fa3b9d23fp-1, 0x1.970f2c5b2e1e6p-2, 0x1.76aa1ac2ed543p-4, +0x1.60082d3ec0106p-1, 0x1.973903332e72p-2, 0x1.cae82c9b95d06p-1, 0x1.2befc12257df8p-3, +0x1.5fc8540abf90bp-2, 0x1.d5af21ffab5e4p-1, 0x1.98f9220b31f24p-2, 0x1.784584a2f08b1p-3, +0x1.a8d524db51aa5p-1, 0x1.fc2d6ac3f85adp-3, 0x1.115dbf9a22bb8p-2, 0x1.e3741943c6e83p-1, +0x1.84d1a40309a35p-2, 0x1.cb366203966ccp-3, 0x1.b40d6403681adp-9, 0x1.bad4c5c375a99p-2, +0x1.d7b00383af6p-6, 0x1.6e403bd6dc807p-1, 0x1.df9d3b23bf3a7p-3, 0x1.63fab372c7f56p-2, +0x1.9c3dc2d3387b8p-1, 0x1.b0c562f3618acp-1, 0x1.48c969329192dp-1, 0x1.a3b0335f47606p-1, +0x1.a5fc5f434bf8cp-2, 0x1.98f1f2db31e3ep-2, 0x1.f6b95993ed72bp-2, 0x1.ac4c45c358989p-3, +0x1.3615e74a6c2bdp-2, 0x1.c6e442fb8dc88p-1, 0x1.33d0a99a67a15p-2, 0x1.fb1320e7f6264p-1, +0x1.250189224a031p-2, 0x1.9342059326841p-3, 0x1.183c44b230789p-3, 0x1.4264ee9684c9ep-1, +0x1.d3fd1b03a7fa3p-4, 0x1.128ba23225174p-1, 0x1.a0764fbf40ecap-1, 0x1.e354c83bc6a99p-1, +0x1.9196fce7232ep-1, 0x1.49297c629253p-4, 0x1.c6c8e17b8d91cp-1, 0x1.4fff3b929ffe7p-3, +0x1.37e5901a6fcb2p-2, 0x1.c87ceedf90f9ep-1, 0x1.316a31c662d46p-1, 0x1.5560905aaac12p-2, +0x1.36bd2ab26d7a5p-1, 0x1.a951808f52a3p-1, 0x1.5cada1e6b95b4p-1, 0x1.a5f5db034bebbp-2, +0x1.5a16e37eb42dcp-1, 0x1.4aee162a95dc3p-2, 0x1.daac8373b559p-3, 0x1.68a898e2d1513p-4, +0x1.71f00482e3e01p-1, 0x1.7207cdaae40fap-1, 0x1.3050492260a09p-2, 0x1.9f5f05033ebe1p-6, +0x1.38ec10a271d82p-1, 0x1.3210795e6420fp-1, 0x1.01c3218203864p-6, 0x1.cb6cd53396d9bp-1, +0x1.96e0fac32dc1fp-1, 0x1.3874a8e270e95p-3, 0x1.0dd1c3ca1ba38p-1, 0x1.d1609e23a2c14p-1, +0x1.60a8cc6ac151ap-1, 0x1.5c90270ab9205p-2, 0x1.b4b5665b696adp-1, 0x1.e47f929bc8ff2p-2, +0x1.aeda86235db51p-2, 0x1.7b7e47d2f6fc9p-1, 0x1.463f98328c7f3p-1, 0x1.73600b22e6c01p-1, +0x1.43fb36ae87f67p-1, 0x1.dea727e3bd4e5p-3, 0x1.e10534c3c20a7p-5, 0x1.eae18573d5c31p-3, +0x1.07da54220fb4bp-4, 0x1.7abdf532f57bfp-1, 0x1.4db34ede9b66ap-1, 0x1.7b122e06f6246p-1, +0x1.01a80222035p-4, 0x1.c45e6fbf88bcep-1, 0x1.a8274123504e8p-1, 0x1.922504cb244a1p-1, +0x1.36663d666ccc8p-1, 0x1.013d96c2027b3p-3, 0x1.9f1ffcf33e4p-1, 0x1.bd4938137a927p-3, +0x1.725fdf0ee4bfcp-1, 0x1.a72e15ff4e5c3p-1, 0x1.d5f919a3abf23p-4, 0x1.0940d9ce1281bp-1, +0x1.f54b4037ea968p-1, 0x1.4890e6fe9121dp-1, 0x1.b542efdb6a85ep-2, 0x1.55f40c9eabe82p-1, +0x1.f6d8fa87edb1fp-1, 0x1.1eadbc8a3d5b8p-2, 0x1.20cf57b2419ebp-3, 0x1.9c8c7b2b3918fp-2, +0x1.5aa4c282b5498p-6, 0x1.8e736e1f1ce6ep-1, 0x1.069922d20d324p-3, 0x1.4ed05cc29da0cp-1, +0x1.874e05030e9c1p-7, 0x1.7eda7002fdb4ep-3, 0x1.c988be1f93118p-1, 0x1.38c414e271883p-4, +0x1.da749133b4e92p-1, 0x1.173c0cfe2e782p-1, 0x1.a22ab0a344556p-1, 0x1.faa9917bf5532p-1, +0x1.b734f9736e69fp-2, 0x1.4a51f1c294a3ep-1, 0x1.8cce9643199d3p-1, 0x1.200ba1c240174p-5, +0x1.8aa157771542bp-1, 0x1.2bee933257dd2p-1, 0x1.02a61042054c2p-2, 0x1.fa026d03f404ep-2, +0x1.a639525b4c72ap-2, 0x1.782456aaf048bp-2, 0x1.9084140321083p-7, 0x1.90cfd2c3219fap-2, +0x1.28c4950251893p-7, 0x1.c1c7107b838e2p-2, 0x1.e5bf5fc3cb7ecp-5, 0x1.fb7c0cdbf6f82p-1, +0x1.703a6686e074dp-1, 0x1.9a3f2fa3347e6p-3, 0x1.938494db27093p-2, 0x1.7b0f8c9af61f2p-1, +0x1.f5033a0bea067p-1, 0x1.0b68932616d12p-1, 0x1.93bfd2bb277fap-2, 0x1.fb20721ff640ep-1, +0x1.6b1f2f26d63e6p-1, 0x1.26d14ef24da2ap-2, 0x1.11c7a5c2238f5p-4, 0x1.4593c05a8b278p-1, +0x1.aaa4b47755497p-1, 0x1.c463a55b88c75p-1, 0x1.403d51d2807aap-1, 0x1.0c7e625a18fccp-2, +0x1.0eb5971e1d6b3p-1, 0x1.9a17d023342fap-2, 0x1.307fd69260ffbp-2, 0x1.32addd22655bcp-2, +0x1.f8fa7b43f1f4fp-1, 0x1.1992f36a3325ep-1, 0x1.965825132cb05p-1, 0x1.982e48db305c9p-2, +0x1.d5a51ec3ab4a4p-1, 0x1.9c9a356339347p-1, 0x1.947f0dcf28fe2p-1, 0x1.da483117b4906p-1, +0x1.f5f6f683ebedfp-3, 0x1.b2db03cb65b6p-1, 0x1.d5c43defab888p-1, 0x1.edb82427db705p-1, +0x1.96acfb432d59fp-5, 0x1.3f0d10b27e1a2p-2, 0x1.68c7b0bed18f6p-1, 0x1.cdc137839b827p-6, +0x1.aaef1b7f55de3p-1, 0x1.953cd0c32a79ap-4, 0x1.31cf7b02639efp-6, 0x1.160e4aa62c1c9p-1, +0x1.8c20832b1841p-2, 0x1.5e3b84a2bc771p-4, 0x1.6e882bf2dd105p-3, 0x1.c2d3d82385a7bp-3, +0x1.f02b15efe0563p-1, 0x1.9bdf5ccf37becp-1, 0x1.ede84e73dbd0ap-2, 0x1.fdc15a13fb82bp-2, +0x1.a3ad1373475a2p-3, 0x1.8f3412831e682p-1, 0x1.98379b9b306f3p-1, 0x1.879700730f2ep-3, +0x1.518e0bdaa31c1p-2, 0x1.2e8fc0ae5d1f8p-1, 0x1.2dfce48a5bf9dp-1, 0x1.f9b092b3f3612p-3, +0x1.9653ec1b2ca7ep-2, 0x1.84f7e4ab09efdp-2, 0x1.62d15702c5a2bp-3, 0x1.48a7b3ae914f6p-1, +0x1.d55bd873aab7bp-3, 0x1.73c49d62e7894p-4, 0x1.365fd7d26cbfbp-1, 0x1.1d838ba23b071p-2, +0x1.9bfe380b37fc7p-2, 0x1.3e4f11227c9e2p-2, 0x1.3a5f9f1a74bf4p-2, 0x1.e3b8de13c771cp-3, +0x1.a39e4553473c9p-2, 0x1.4d7c96d29af93p-2, 0x1.8efc822b1df9p-1, 0x1.97df643f2fbedp-1, +0x1.a50b77fb4a16fp-2, 0x1.ea9e8d27d53d2p-1, 0x1.128b490225169p-6, 0x1.8561a3d30ac34p-2, +0x1.867de9f30cfbdp-1, 0x1.ff110303fe22p-2, 0x1.c1917ef78323p-1, 0x1.ef692ecfded26p-1, +0x1.1d7928023af25p-2, 0x1.59c91a8eb3923p-1, 0x1.453bbba28a777p-3, 0x1.378399ee6f073p-1, +0x1.10b1b67221637p-2, 0x1.7f4bd372fe97ap-1, 0x1.b5efbe9b6bdf8p-1, 0x1.5382d14aa705ap-1, +0x1.071f17120e3e3p-3, 0x1.d4828b03a9051p-6, 0x1.385509ea70aa1p-2, 0x1.6e3d77c2dc7afp-2, +0x1.e8e54023d1ca8p-4, 0x1.d28a5ccba514cp-1, 0x1.45e081b68bc1p-1, 0x1.0b1bc40e16379p-1, +0x1.c6c795638d8f3p-3, 0x1.e3105143c620ap-1, 0x1.8409fb930813fp-1, 0x1.4381080287021p-1, +0x1.139d3952273a7p-2, 0x1.13067dba260dp-1, 0x1.b6c0d8836d81bp-2, 0x1.5c5458a6b8a8bp-1, +0x1.fb4a15bbf6943p-2, 0x1.c7e98d138fd32p-2, 0x1.f052a903e0a55p-5, 0x1.0845e99a108bdp-2, +0x1.e37d480bc6fa9p-1, 0x1.e096a987c12d5p-1, 0x1.ce308e639c612p-3, 0x1.c8e7702391ceep-3, +0x1.3a5fc41274bf9p-1, 0x1.89b62503136c5p-2, 0x1.a9bd75fb537afp-1, 0x1.c2b89f4f85714p-1, +0x1.109b97c221373p-3, 0x1.5fad3492bf5a7p-1, 0x1.163b70962c76ep-1, 0x1.0bdd576a17babp-2, +0x1.6e5148eedca29p-1, 0x1.b265f58b64cbfp-1, 0x1.3d0d67967a1adp-1, 0x1.ab6df0f356dbep-1, +0x1.84f0525309e0ap-1, 0x1.05dbd2920bb7ap-2, 0x1.6d1369fada26dp-2, 0x1.f6a237abed447p-1, +0x1.97f8ea332ff1dp-3, 0x1.d49d8463a93b1p-4, 0x1.3a233fae74468p-1, 0x1.df99ae6bbf336p-2, +0x1.4d9a2e469b346p-1, 0x1.583abec2b0758p-5, 0x1.3084bf7261098p-3, 0x1.2cfce48259f9dp-3, +0x1.f2f0e4ebe5e1dp-2, 0x1.ac9969b35932dp-3, 0x1.9ec45bdb3d88bp-2, 0x1.b9eb74fb73d6fp-2, +0x1.2ef40fc25de82p-3, 0x1.42ee518685dcap-1, 0x1.4f2f96869e5f3p-1, 0x1.861cc8030c399p-1, +0x1.f2590103e4b2p-7, 0x1.f1da18fbe3b43p-2, 0x1.48d5674e91aadp-1, 0x1.2fc127d25f825p-3, +0x1.62690442c4d21p-3, 0x1.7c435f82f886cp-3, 0x1.a3bdeb53477bdp-2, 0x1.c6eb89ff8dd71p-1, +0x1.176cd6c22ed9bp-5, 0x1.dd8ba803bb175p-6, 0x1.72597aeee4b2fp-1, 0x1.96671fbf2cce4p-1, +0x1.23b48d1247692p-2, 0x1.47197f628e33p-4, 0x1.8d09576b1a12bp-1, 0x1.efb1022bdf62p-2, +0x1.8ddb81e31bb7p-3, 0x1.8e592e2b1cb26p-2, 0x1.e7a5584fcf4abp-1, 0x1.b1110ec362222p-1, +0x1.b960860372c11p-2, 0x1.9e3441433c688p-4, 0x1.fc5047e3f8a09p-1, 0x1.d628b577ac517p-1, +0x1.3dd9c52a7bb39p-2, 0x1.9764eba32ec9dp-2, 0x1.663cdfe2cc79cp-2, 0x1.d553cd0baaa7ap-2, +0x1.d418ea83a831dp-6, 0x1.27033a024e067p-8, 0x1.c31aba1386357p-3, 0x1.66a2b5c2cd457p-5, +0x1.f67625ebecec5p-2, 0x1.b99c15d773383p-1, 0x1.8969d54312d3bp-3, 0x1.53d55406a7aabp-1, +0x1.8acedb43159dbp-5, 0x1.34396afe6872dp-1, 0x1.1ac0de023581cp-1, 0x1.511dd902a23bbp-4, +0x1.4325c83e864b9p-1, 0x1.1a34b1da34696p-2, 0x1.c08adae38115bp-1, 0x1.d5000ec7aa002p-1, +0x1.6bfb11b2d7f62p-2, 0x1.4d94324a9b286p-1, 0x1.99b11fbb33624p-2, 0x1.1974695632e8dp-1, +0x1.4c0c95c298193p-5, 0x1.68fbd052d1f7ap-2, 0x1.950af02b2a15ep-2, 0x1.e2e218bbc5c43p-2, +0x1.d088e0a3a111cp-2, 0x1.8dab7feb1b57p-2, 0x1.8f3383a31e67p-2, 0x1.873152e70e62ap-1, +0x1.928835c725107p-1, 0x1.7ab831c2f5706p-1, 0x1.c76ce5a38ed9dp-3, 0x1.a128fd1f4252p-1, +0x1.7d063836fa0c7p-1, 0x1.c543cfdb8a87ap-2, 0x1.b793287b6f265p-1, 0x1.e1052ca3c20a6p-3, +0x1.387bfb8270f7fp-2, 0x1.9ed9dc833db3cp-5, 0x1.cc169f2f982d4p-1, 0x1.69d5d6f2d3abbp-2, +0x1.4e2708c69c4e1p-1, 0x1.cdaefa5b9b5dfp-2, 0x1.be1d4d337c3aap-2, 0x1.2299a20245334p-2, +0x1.73f1d61ee7e3bp-1, 0x1.3f3302f27e66p-2, 0x1.99337f233267p-3, 0x1.4f7af7a29ef5fp-4, +0x1.ed2db3c3da5b6p-1, 0x1.33256fa6664aep-1, 0x1.4363c84a86c79p-1, 0x1.ee7d1c03dcfa4p-9, +0x1.e7a357cfcf46bp-1, 0x1.bd280b837a501p-6, 0x1.e6bf12f3cd7e2p-2, 0x1.9fcf903b3f9f2p-2, +0x1.a97e00ab52fcp-2, 0x1.baf94b4b75f29p-1, 0x1.5c646c02b8c8ep-3, 0x1.9d1cd8633a39bp-3, +0x1.35b17d0a6b63p-1, 0x1.91e8a8d323d15p-2, 0x1.0e0666821c0cdp-6, 0x1.656f6a82cadedp-2, +0x1.ab963c57572c8p-1, 0x1.c0035baf8006bp-1, 0x1.2af9006a55f2p-1, 0x1.1f50e8623ea1dp-3, +0x1.d9f0f97bb3e1fp-1, 0x1.ee1f3f33dc3e8p-2, 0x1.f97e4b23f2fc9p-2, 0x1.2818023e503p-1, +0x1.dde71cc7bbce4p-1, 0x1.dbcdcc2bb79bap-1, 0x1.b964d34372c9ap-1, 0x1.51d8f2e2a3b1ep-1, +0x1.ed9d3693db3a7p-3, 0x1.fb1b3083f6366p-5, 0x1.7bc851daf790ap-1, 0x1.a254059344a81p-3, +0x1.52d722aea5ae4p-1, 0x1.7e583442fcb07p-2, 0x1.aa0dfa13541bfp-3, 0x1.3a7a7a7a74f4fp-1, +0x1.9a2ab50334557p-2, 0x1.5de307febbc61p-1, 0x1.4c4852829890ap-6, 0x1.a1d45ad743a8bp-1, +0x1.18dc534a31b8ap-1, 0x1.85ed76530bdafp-3, 0x1.23721d8246e44p-6, 0x1.3a374142746e8p-3, +0x1.2a6fb1fe54df6p-1, 0x1.18bc424231788p-5, 0x1.01458592028b1p-1, 0x1.ac0bdca35817cp-2, +0x1.d18f1fd3a31e4p-1, 0x1.61f42fe2c3e86p-4, 0x1.1dda286a3bb45p-1, 0x1.ab80194b57003p-1, +0x1.234e2596469c5p-1, 0x1.a994df835329cp-5, 0x1.a73037134e607p-2, 0x1.0135425a026a8p-1, +0x1.f6671a27ecce3p-1, 0x1.19f9dd9233f3cp-2, 0x1.4c38d4f29871bp-3, 0x1.c7399f238e734p-3, +0x1.595d43a2b2ba8p-2, 0x1.ced687179dad1p-1, 0x1.b4c6d25b698dap-2, 0x1.ff85c47fff0b9p-1, +0x1.1c05426a380a8p-2, 0x1.44e6e7b289cddp-1, 0x1.3a003ef674008p-1, 0x1.5b17fbb6b62ffp-1, +0x1.4593df628b27cp-2, 0x1.4462818a88c5p-1, 0x1.f9d8ad13f3b16p-2, 0x1.bba642fb774c8p-1, +0x1.a5dddf1f4bbbcp-1, 0x1.0607e77a0c0fdp-1, 0x1.468269028d04dp-6, 0x1.a09b223341364p-2, +0x1.1793ab9e2f275p-1, 0x1.0b7998de16f33p-1, 0x1.a6537f6b4ca7p-1, 0x1.d24596dba48b3p-2, +0x1.37b81eda6f704p-1, 0x1.885b4fab10b6ap-2, 0x1.2945c972528b9p-2, 0x1.6c1911b2d8322p-3, +0x1.bd8deb9b7b1bdp-2, 0x1.683b0042d076p-1, 0x1.5c3b86c6b8771p-1, 0x1.aa5c1fe354b84p-2, +0x1.f537ef0bea6fep-1, 0x1.af49bc035e938p-1, 0x1.46fc77ba8df8fp-1, 0x1.43cd21b2879a4p-2, +0x1.7e204316fc408p-1, 0x1.0aff074215fe1p-4, 0x1.42d8aaaa85b15p-2, 0x1.845c898308b91p-6, +0x1.6646c89acc8d9p-1, 0x1.db6c944bb6d93p-1, 0x1.673ae002ce75cp-1, 0x1.22170902442e1p-6, +0x1.1fcf15d23f9e3p-1, 0x1.909cda332139bp-3, 0x1.c4b6fb43896dfp-1, 0x1.8b59e9db16b3dp-2, +0x1.6a2f1e06d45e4p-1, 0x1.ceeb0e8f9dd62p-1, 0x1.95fa86072bf51p-1, 0x1.03859342070b2p-2, +0x1.b4c94ed36992ap-2, 0x1.3c4e056e789c1p-1, 0x1.6ae5950ed5cb3p-1, 0x1.21cc64024398dp-5, +0x1.eeb50003dd6ap-11, 0x1.ff8879c7ff10fp-1, 0x1.b48c2ab369185p-3, 0x1.be8546237d0a9p-2, +0x1.67c37a06cf86fp-1, 0x1.c95e917392bd2p-1, 0x1.b470b30368e16p-1, 0x1.5cfb690eb9f6dp-1, +0x1.78a84d76f150ap-1, 0x1.f6da557bedb4bp-2, 0x1.fee1f9e7fdc3fp-1, 0x1.ed912113db224p-2, +0x1.1ccd0ba6399a1p-1, 0x1.409c9e7281394p-2, 0x1.02eb74d605d6fp-1, 0x1.0627a87a0c4f5p-2, +0x1.eeeb8e03ddd72p-3, 0x1.a89953635132ap-3, 0x1.1849191230923p-2, 0x1.9b89f9533713fp-1, +0x1.9c9b16cb39363p-2, 0x1.436e1f2286dc4p-3, 0x1.84dbb8f309b77p-3, 0x1.c3e54b4387ca9p-4, +0x1.fc696543f8d2dp-5, 0x1.f7317443ee62fp-1, 0x1.747ee612e8fddp-2, 0x1.f4567b7be8acfp-2, +0x1.337f79b266fefp-1, 0x1.292840a252508p-4, 0x1.0c4803fe189p-1, 0x1.33fb26f267f65p-1, +0x1.256c0ee24ad82p-4, 0x1.796b0eaaf2d62p-1, 0x1.33dca00267b94p-5, 0x1.8c70fbe318e1fp-1, +0x1.42c9a01e85934p-1, 0x1.c7ae7d078f5dp-1, 0x1.d2d8c9e3a5b19p-2, 0x1.76e3db22edc7bp-2, +0x1.86374f830c6eap-2, 0x1.d09cbdaba1398p-2, 0x1.b23a7e1b6475p-1, 0x1.dfe8b367bfd16p-1, +0x1.889cae1311396p-1, 0x1.6a4be5e2d497dp-2, 0x1.8bf21e8317e44p-3, 0x1.15e464022bc8dp-7, +0x1.1f4c47ca3e989p-1, 0x1.de422853bc845p-2, 0x1.9fe18ae73fc31p-1, 0x1.ed99d32fdb33ap-1, +0x1.3ffc9bf67ff93p-1, 0x1.1879200230f24p-9, 0x1.30b3e4a26167dp-4, 0x1.5fc3324abf866p-1, +0x1.f849ed67f093ep-1, 0x1.c0abdf3b8157cp-2, 0x1.67b9c022cf738p-3, 0x1.2bc967165792dp-1, +0x1.057af7b20af5fp-1, 0x1.66367406cc6cfp-1, 0x1.7f123812fe247p-3, 0x1.2a28798e5450fp-1, +0x1.bf4305637e861p-2, 0x1.cc0960239812cp-3, 0x1.6d32eae2da65dp-2, 0x1.1359166226b23p-4, +0x1.d586a863ab0d5p-4, 0x1.a005da63400bbp-1, 0x1.bbba20bb77744p-2, 0x1.fb98f99bf731fp-2, +0x1.10a8726a2150ep-2, 0x1.202f1cea405e4p-2, 0x1.bb6a606376d4cp-2, 0x1.0f0e74421e1cfp-5, +0x1.453d81668a7bp-1, 0x1.40b1b7d281637p-1, 0x1.54878d82a90f2p-5, 0x1.922724b3244e5p-3, +0x1.7e965fe2fd2ccp-4, 0x1.b52a03bf6a54p-1, 0x1.488e7162911cep-3, 0x1.6fcf67f2df9edp-1, +0x1.b6427cdf6c85p-1, 0x1.e0e863b3c1d0cp-3, 0x1.9f2534733e4a7p-2, 0x1.ae8c6a435d18dp-1, +0x1.5890088ab1201p-1, 0x1.29810a4253021p-1, 0x1.b4aba2ab69574p-2, 0x1.782c00f2f058p-3, +0x1.1f6efc923edep-2, 0x1.3a1a5f5e7434cp-1, 0x1.883379cb1066fp-1, 0x1.6f5900fadeb2p-1, +0x1.ad1cb7675a397p-1, 0x1.f66779c3eccefp-4, 0x1.91c423c723884p-1, 0x1.e7cd8c73cf9b2p-1, +0x1.ded2c99bbda59p-1, 0x1.be84d0837d09ap-3, 0x1.cb34127b96682p-2, 0x1.9c9c0b4339381p-3, +0x1.ff71852bfee31p-2, 0x1.c34f396f869e7p-1, 0x1.e05fa853c0bf5p-3, 0x1.13d90ff227b22p-3, +0x1.0400f13e0801ep-1, 0x1.1ac0c5da35819p-2, 0x1.53001a52a6003p-2, 0x1.33d3bd3a67a78p-1, +0x1.0a299aa214533p-3, 0x1.f747530bee8eap-2, 0x1.47464a528e8c9p-2, 0x1.f8cce38bf199cp-1, +0x1.73ddc272e7bb8p-1, 0x1.7335bf66e66b8p-1, 0x1.a7594dcb4eb2ap-1, 0x1.98db95fb31b73p-2, +0x1.396d934a72db2p-2, 0x1.035e3e4206bc8p-2, 0x1.2a78cb3a54f19p-1, 0x1.2c6e47ee58dc9p-1, +0x1.bbc97e7f7793p-1, 0x1.65588a02cab11p-2, 0x1.378e91ca6f1d2p-2, 0x1.68e635e2d1cc7p-1, +0x1.e2f2687bc5e4dp-2, 0x1.6c5b6542d8b6dp-4, 0x1.50b3c252a1678p-1, 0x1.a097fbab412ffp-2, +0x1.3a59419274b28p-2, 0x1.b26e5c6364dccp-4, 0x1.377300a66ee6p-1, 0x1.9ce5636339cacp-1, +0x1.f99d04fbf33a1p-1, 0x1.af8aeabf5f15dp-1, 0x1.e1dba75fc3b75p-1, 0x1.fb3bec6bf677ep-2, +0x1.e75a6d43ceb4ep-4, 0x1.16b7690a2d6edp-2, 0x1.8b8d9b83171b3p-4, 0x1.fdd6d153fbadap-3, +0x1.86ff5e0b0dfecp-1, 0x1.aa29b13354536p-2, 0x1.e10a5f73c214cp-3, 0x1.f5ba40fbeb748p-2, +0x1.212a5ff24254cp-3, 0x1.f9be5a43f37cbp-5, 0x1.c74aeb7b8e95dp-1, 0x1.ca02c34b94058p-2, +0x1.4296098a852c1p-2, 0x1.e3876d63c70eep-2, 0x1.16fa99022df53p-5, 0x1.74520d02e8a42p-3, +0x1.a46ffbb348dffp-1, 0x1.5a6de4f2b4dbdp-2, 0x1.c5fab9238bf57p-1, 0x1.2bd25fda57a4cp-2, +0x1.b584be436b098p-2, 0x1.16ae7b722d5cfp-1, 0x1.66352dc6cc6a6p-1, 0x1.77eeffeeefdep-1, +0x1.4cfc46fe99f89p-1, 0x1.3b505cd276a0cp-2, 0x1.14d4634e29a8cp-1, 0x1.46994bf68d329p-1, +0x1.34cc64926998dp-3, 0x1.ed601553dac03p-2, 0x1.10dd08b221ba1p-3, 0x1.143ccda22879ap-2, +0x1.820bbf2f04178p-1, 0x1.d6a3d673ad47bp-3, 0x1.09941b2613283p-1, 0x1.090b1d3a12164p-1, +0x1.4abdce36957bap-1, 0x1.81d6b30303ad6p-1, 0x1.f41eda03e83dbp-8, 0x1.930866372610dp-1, +0x1.a17298a742e53p-1, 0x1.cb33292f96665p-1, 0x1.e0271f63c04e4p-3, 0x1.0af675b215ecfp-3, +0x1.79edbfbaf3db8p-2, 0x1.12f2e2d225e5cp-2, 0x1.3fa4415a7f488p-2, 0x1.859b6e330b36ep-3, +0x1.36b063e26d60cp-1, 0x1.973367432e66dp-3, 0x1.eea016fbdd403p-2, 0x1.172c30422e586p-5, +0x1.7c7b5542f8f6bp-1, 0x1.7614e502ec29dp-3, 0x1.8961c2f312c38p-1, 0x1.92ef388325de7p-2, +0x1.f65acf53ecb5ap-2, 0x1.3c6c4c7a78d8ap-2, 0x1.010e8342021dp-5, 0x1.486080d290c1p-1, +0x1.94e630e729cc6p-1, 0x1.5120a982a2415p-3, 0x1.d27ee7a3a4fddp-1, 0x1.16f1f0122de3ep-1, +0x1.93e23ffb27c48p-2, 0x1.b826058b704c1p-2, 0x1.ffd0d483ffa1bp-5, 0x1.4aeee34295ddcp-5, +0x1.77a6d712ef4dbp-3, 0x1.1f2a57e23e54bp-4, 0x1.a7b7546b4f6ebp-1, 0x1.ff5c4e6bfeb8ap-1, +0x1.ef18742bde30fp-1, 0x1.fc11c403f8239p-5, 0x1.0867af5210cf6p-3, 0x1.581ea80ab03d5p-2, +0x1.52751b52a4ea3p-2, 0x1.c3d8190b87b03p-2, 0x1.0d762f961aec6p-1, 0x1.dfeaf18fbfd5ep-1, +0x1.47b8e6568f71dp-1, 0x1.318ec402631d9p-7, 0x1.f15db493e2bb7p-1, 0x1.8868772b10d0fp-2, +0x1.892dd143125bap-3, 0x1.7abf7782f57efp-1, 0x1.8dabd7d71b57bp-1, 0x1.5d78dbfabaf1bp-1, +0x1.8f59dbc31eb3bp-5, 0x1.9dbcc00f3b798p-1, 0x1.4bb2b99297657p-2, 0x1.addbcea35bb7ap-1, +0x1.f204ea6fe409dp-1, 0x1.e16111a3c2c22p-3, 0x1.899b7d631337p-2, 0x1.77ec14daefd83p-2, +0x1.546b472ea8d69p-1, 0x1.c99597fb932b3p-2, 0x1.a149f1434293ep-2, 0x1.b254fcf364aap-1, +0x1.08b016fa11603p-1, 0x1.e1713423c2e27p-3, 0x1.b1b14b5f63629p-1, 0x1.ef91164bdf223p-2, +0x1.303ad2926075ap-2, 0x1.f3cb3733e7967p-1, 0x1.a3d7df2b47afcp-1, 0x1.4157f6f282affp-1, +0x1.ab6e876b56dd1p-2, 0x1.629c1d7ac5384p-2, 0x1.2142e87e4285dp-1, 0x1.d702a083ae054p-5, +0x1.6c28939ad8512p-2, 0x1.12a09d0e25414p-1, 0x1.c348cb4386919p-2, 0x1.185fbe1e30bf8p-1, +0x1.1ac0291a35805p-2, 0x1.bd40f5d37a81fp-3, 0x1.d7626863aec4dp-3, 0x1.4cab64929956dp-2, +0x1.a19fb003433f6p-6, 0x1.1bb1f6e23763fp-1, 0x1.50c603a2a18cp-3, 0x1.ff11e7f3fe23dp-1, +0x1.940a3b4f28147p-1, 0x1.18ff3f9e31fe8p-1, 0x1.760fe4baec1fdp-2, 0x1.d0eb04f3a1d61p-2, +0x1.fdca0b9bfb941p-1, 0x1.8baceaff1759dp-1, 0x1.3594feda6b2ap-2, 0x1.067a22920cf44p-1, +0x1.024e0102049cp-7, 0x1.31ef2b2263de5p-3, 0x1.fe42adb7fc856p-1, 0x1.384d429a709a8p-2, +0x1.011c07e202381p-3, 0x1.a21a8ce344352p-1, 0x1.dd7e983fbafd3p-1, 0x1.15fe45b22bfc9p-1, +0x1.4da26e729b44ep-3, 0x1.fd83017bfb06p-2, 0x1.336e6fba66dcep-1, 0x1.097ce56e12f9dp-1, +0x1.1621dc822c43cp-5, 0x1.512d5582a25abp-5, 0x1.0ee51c421dca4p-4, 0x1.3d8464b27b08dp-2, +0x1.08c625a2118c5p-2, 0x1.2f6a7b425ed4fp-2, 0x1.4517e4a28a2fdp-1, 0x1.22e020a245c04p-2, +0x1.b367348766ce7p-1, 0x1.9949658f3292dp-1, 0x1.2103f0824207ep-2, 0x1.47716fd28ee2ep-1, +0x1.64914a52c9229p-2, 0x1.4b89ea9e9713dp-1, 0x1.7f379242fe6f2p-4, 0x1.60256182c04acp-2, +0x1.ae6dab335cdb5p-2, 0x1.9562e36b2ac5cp-2, 0x1.b68cd3536d19ap-1, 0x1.b6801b3b6d003p-2, +0x1.172d3c7e2e5a8p-1, 0x1.b4cf810b699fp-1, 0x1.7766aeeaeecd6p-1, 0x1.57743e7aaee88p-1, +0x1.56ea0deaadd42p-1, 0x1.54e5472aa9ca9p-1, 0x1.b5ca10a36b942p-3, 0x1.aa52a98754a55p-1, +0x1.4e9b1f929d364p-3, 0x1.a0e0f3e341c1ep-1, 0x1.679f1de2cf3e4p-2, 0x1.942396b328473p-3, +0x1.b5f3c93f6be79p-1, 0x1.ab5864fb56b0dp-2, 0x1.03cb180607963p-1, 0x1.d2b6e063a56dcp-4, +0x1.6d61701edac2ep-1, 0x1.238bf2a24717ep-3, 0x1.978dd8bb2f1bbp-2, 0x1.20c8a4a241915p-1, +0x1.e22c6237c458cp-1, 0x1.5c48e4a2b891dp-1, 0x1.a0e851c341d0ap-3, 0x1.28ea0eba51d42p-2, +0x1.4fa59e7a9f4b4p-2, 0x1.30420d7a60842p-2, 0x1.4487b81e890f7p-1, 0x1.7f09a4dafe135p-1, +0x1.62d27872c5a4fp-1, 0x1.f62916dbec523p-2, 0x1.6926c9d2d24d9p-3, 0x1.e7fed3c3cffdap-3, +0x1.5fc818eabf903p-2, 0x1.d1b06163a360cp-1, 0x1.d173f36ba2e7ep-1, 0x1.b3869703670d3p-7, +0x1.2695a88a4d2b5p-1, 0x1.f733bc83ee678p-4, 0x1.b120c3e762418p-1, 0x1.7a3c706ef478ep-1, +0x1.dfc76b73bf8edp-1, 0x1.93c14b5327829p-3, 0x1.df45561bbe8abp-1, 0x1.95bb34af2b767p-1, +0x1.3a9c855275391p-1, 0x1.c620dc438c41cp-2, 0x1.d01210bba0242p-1, 0x1.4ffbeae29ff7dp-2, +0x1.2bf36aca57e6dp-1, 0x1.37b1fa326f63fp-2, 0x1.c8c69a13918d3p-1, 0x1.0e1fccfe1c3fap-1, +0x1.f821e1bbf043cp-1, 0x1.88057423100afp-4, 0x1.a294d45b4529bp-1, 0x1.3fe961ea7fd2cp-2, +0x1.92436a832486dp-2, 0x1.ce3918eb9c723p-2, 0x1.efe55cc3dfcacp-5, 0x1.5fa16d82bf42ep-4, +0x1.e23117e3c4623p-1, 0x1.e5202113ca404p-3, 0x1.4be7c54297cf9p-2, 0x1.242a48b248549p-2, +0x1.2be1a69257c35p-3, 0x1.dd9f5823bb3ebp-3, 0x1.31c67d6a638dp-2, 0x1.718e122ee31c2p-1, +0x1.6c9c9b32d9393p-2, 0x1.28100a6250201p-3, 0x1.d7950533af2a1p-2, 0x1.2c2b721a5856ep-2, +0x1.5de8aae2bbd15p-2, 0x1.961fb1632c3f6p-2, 0x1.5e876dc2bd0eep-4, 0x1.e990dac3d321bp-1, +0x1.ae2046d35c409p-1, 0x1.fbe2fe77f7c6p-1, 0x1.231da062463b4p-2, 0x1.b4276333684ecp-2, +0x1.2f77f71a5eeffp-2, 0x1.6955a912d2ab5p-3, 0x1.e8337e97d067p-1, 0x1.1fbbba8a3f777p-2, +0x1.16ac31922d586p-2, 0x1.8ac852ef1590ap-1, 0x1.2fd28e3a5fa52p-1, 0x1.5477ce0aa8efap-1, +0x1.c7937d838f27p-3, 0x1.4ed0e40a9da1dp-1, 0x1.806bfbbb00d7fp-1, 0x1.5057dd12a0afcp-3, +0x1.c818ec4f9031ep-1, 0x1.32fef2e265fdep-4, 0x1.cc56373b98ac7p-2, 0x1.31155f02622acp-5, +0x1.3b8f68ca771edp-2, 0x1.7f0e5a52fe1cbp-1, 0x1.849f681f093edp-1, 0x1.54160202a82cp-1, +0x1.c9125cef9224cp-1, 0x1.c1a7aad3834f5p-3, 0x1.ea2bbb0fd4577p-1, 0x1.e01ac973c0359p-3, +0x1.3b79c36676f38p-1, 0x1.5fca8c42bf952p-5, 0x1.865e34730cbc7p-3, 0x1.d3341473a6683p-2, +0x1.1dfa73823bf4ep-5, 0x1.e64cbaa3cc997p-2, 0x1.c3adbbd3875b7p-1, 0x1.5337458aa66e9p-2, +0x1.4d7bc7969af79p-1, 0x1.abe13a6b57c27p-1, 0x1.3979800a72f3p-1, 0x1.d8d1e05fb1a3cp-1, +0x1.36a98d566d532p-1, 0x1.a53039134a607p-3, 0x1.2d49ae665a936p-1, 0x1.a88e6cbb511cep-1, +0x1.b81cf24f7039ep-1, 0x1.5b6b543ab6d6bp-2, 0x1.fca463fff948cp-1, 0x1.8035de9b006bcp-1, +0x1.a82b10f350562p-2, 0x1.c59eff338b3ep-2, 0x1.9347348b268e7p-1, 0x1.71dd3ce2e3ba8p-1, +0x1.877767a30eeedp-3, 0x1.17e69ca62fcd4p-1, 0x1.8be67dc317cdp-2, 0x1.5781b6a2af037p-4, +0x1.8850875b10a11p-1, 0x1.603df3dac07bep-2, 0x1.45edd2628bdbap-2, 0x1.8794957b0f293p-2, +0x1.8c374563186e9p-2, 0x1.048e7652091cfp-1, 0x1.ad6454f75ac8bp-1, 0x1.aff693db5fed2p-2, +0x1.f7b4d3a3ef69ap-1, 0x1.711210cae2242p-1, 0x1.8196ecb3032dep-1, 0x1.45309b368a613p-1, +0x1.1cf34b3239e69p-1, 0x1.7620d97aec41bp-2, 0x1.1e027b923c04fp-1, 0x1.4e7362129ce6cp-3, +0x1.245c7b0248b8fp-1, 0x1.2d30a7d25a615p-3, 0x1.fc2b453ff8569p-1, 0x1.b8f2da9b71e5bp-2, +0x1.f203a823e4075p-2, 0x1.f8cfa93bf19f5p-1, 0x1.72bd2f92e57a6p-3, 0x1.cd175c8f9a2ecp-1, +0x1.b73e51a36e7cap-2, 0x1.eff6806fdfedp-1, 0x1.3ef4996e7de93p-1, 0x1.3d7d02be7afap-1, +0x1.07dd1d120fba4p-1, 0x1.39f6130273ec2p-7, 0x1.686d3992d0da7p-1, 0x1.205b48d240b69p-2, +0x1.6a0da472d41b5p-2, 0x1.6c845882d908bp-6, 0x1.53f7ef26a7efep-1, 0x1.7b2274eaf644fp-1, +0x1.0ff299161fe53p-1, 0x1.015c441e02b89p-1, 0x1.4c76fb5298edfp-3, 0x1.07a76cb60f4eep-1, +0x1.c9b953939372ap-3, 0x1.d4b4ab8ba9695p-1, 0x1.33601fa266c04p-3, 0x1.8f61a0171ec34p-1, +0x1.1f8a308a3f146p-2, 0x1.6ada837ad5b5p-1, 0x1.e2fe789bc5fcfp-1, 0x1.b421934768432p-1, +0x1.b626ad6f6c4d6p-1, 0x1.df29bddbbe538p-1, 0x1.21360122426cp-2, 0x1.5e5102fabca2p-2, +0x1.d7f96713aff2dp-1, 0x1.da9498ebb5293p-2, 0x1.f0ff7823e1fefp-3, 0x1.67311fcace624p-2, +0x1.ba8199c375033p-2, 0x1.bb3477777668fp-1, 0x1.f11592a3e22b2p-1, 0x1.e51de9f3ca3bdp-1, +0x1.c01c4fc38038ap-1, 0x1.5982cc32b305ap-1, 0x1.d52e3963aa5c7p-3, 0x1.d48c87e3a9191p-3, +0x1.64e6eef6c9cdep-1, 0x1.c9437d7f9287p-1, 0x1.f04596e7e08b3p-1, 0x1.d3662023a6cc4p-3, +0x1.953f83332a7fp-2, 0x1.0d8d56e21b1abp-3, 0x1.7c80f4bef901fp-1, 0x1.3d0e167e7a1c3p-1, +0x1.8180140303003p-5, 0x1.c958fca792b2p-1, 0x1.98df6d2331beep-2, 0x1.4fba330a9f746p-2, +0x1.3433801e6867p-1, 0x1.5edc5e5abdb8cp-2, 0x1.6ffab322dff56p-3, 0x1.d4b45b13a968bp-2, +0x1.1d2fda0a3a5fbp-2, 0x1.d9335ab3b266bp-2, 0x1.9982af0b33056p-1, 0x1.9a455053348aap-3, +0x1.d9e3f9cfb3c7fp-1, 0x1.5c28d102b851ap-5, 0x1.1a29e3fa3453cp-1, 0x1.6e498d5adc932p-2, +0x1.d0f7048ba1ee1p-1, 0x1.0b3f769a167efp-1, 0x1.3885613a710acp-2, 0x1.9113544b2226bp-1, +0x1.93090b3326121p-3, 0x1.118e3ef6231c8p-1, 0x1.8d9d91031b3b2p-7, 0x1.c9a931c393526p-1, +0x1.b5a378eb6b46fp-2, 0x1.f67c0d2becf82p-1, 0x1.f415ce63e82bap-4, 0x1.a5717e0f4ae3p-1, +0x1.cefb17039df63p-4, 0x1.bb03ae8b76076p-1, 0x1.c4ff291b89fe5p-2, 0x1.47dd90928fbb2p-3, +0x1.845cab3308b95p-1, 0x1.aeef4b1f5dde9p-1, 0x1.f3a8fb53e751fp-2, 0x1.7120569ae240bp-2, +0x1.7975e922f2ebdp-3, 0x1.55d32a76aba65p-1, 0x1.a2ea58db45d4bp-1, 0x1.d9eace9bb3d5ap-2, +0x1.09b35f321366cp-3, 0x1.3c6d07e278da1p-1, 0x1.5386bb66a70d7p-1, 0x1.c50d19c38a1a3p-5, +0x1.522f94f2a45f3p-1, 0x1.b6c27d736d85p-3, 0x1.a6eb30934dd66p-2, 0x1.2326997a464d3p-1, +0x1.78f015faf1e03p-1, 0x1.6fb848eadf709p-1, 0x1.6873db8ad0e7bp-2, 0x1.ddb258c7bb64bp-1, +0x1.028d0fba051a2p-2, 0x1.74e0c812e9c19p-2, 0x1.a75b8a874eb71p-1, 0x1.5c184452b8309p-1, +0x1.61d8e262c3b1cp-2, 0x1.e5de4453cbbc9p-1, 0x1.0189c26203138p-1, 0x1.d597a823ab2f5p-2, +0x1.a0e1f2df41c3ep-1, 0x1.e40956efc812bp-1, 0x1.3cc3383679867p-1, 0x1.253e9e0e4a7d4p-1, +0x1.92f8a20b25f14p-1, 0x1.b4bdaf03697b6p-4, 0x1.ddcec95bbb9d9p-1, 0x1.f1561c57e2ac4p-1, +0x1.8c6ae05718d5cp-1, 0x1.80b9223301724p-1, 0x1.bc970743792e1p-2, 0x1.ced7b8239daf7p-1, +0x1.7a4c5422f498bp-2, 0x1.8e91f8231d23fp-4, 0x1.eb2889bfd6511p-1, 0x1.eab7e083d56fcp-6, +0x1.3f05bcca7e0b8p-2, 0x1.7d3c4412fa789p-2, 0x1.327c587e64f8bp-1, 0x1.872f45c30e5e9p-5, +0x1.72b35782e566bp-4, 0x1.e6b64643cd6c9p-1, 0x1.f6254d23ec4aap-1, 0x1.5f39e59abe73dp-2, +0x1.424d5492849abp-2, 0x1.9d80d7a73b01bp-1, 0x1.76a6e402ed4ddp-6, 0x1.52131b7aa4263p-1, +0x1.835f1bfb06be3p-1, 0x1.0d3ef9821a7dfp-1, 0x1.e6f77c63cdefp-4, 0x1.24410ed648822p-1, +0x1.e290a0dbc5214p-2, 0x1.79a227c2f3445p-1, 0x1.25feb3824bfd6p-3, 0x1.0881e4ea1103dp-2, +0x1.b039dda36073cp-1, 0x1.3a73b1c274e76p-4, 0x1.d65c3b23acb87p-3, 0x1.3ca4bdf679498p-1, +0x1.a807986f500f3p-1, 0x1.53e2926ea7c52p-1, 0x1.0b7c761a16f8fp-1, 0x1.94b709f3296e1p-3, +0x1.85b4d1730b69ap-1, 0x1.ed49ffabda94p-2, 0x1.d20e0603a41c1p-3, 0x1.29bd7ea2537bp-4, +0x1.b54321df6a864p-1, 0x1.a6ffda034dffbp-1, 0x1.ed552183daaa4p-4, 0x1.e3998ccfc7332p-1, +0x1.8db620431b6c4p-1, 0x1.9e7f8a833cff1p-4, 0x1.266cff3a4cdap-2, 0x1.76e65462edccbp-4, +0x1.d150c8fba2a19p-1, 0x1.3dd76d7a7baeep-2, 0x1.80efe60701dfdp-1, 0x1.54afe4f2a95fdp-1, +0x1.ac2ab03f58556p-1, 0x1.bdced5937b9dbp-1, 0x1.e3c3cf13c787ap-3, 0x1.3ae6015275ccp-2, +0x1.3770fd566ee2p-1, 0x1.84e1414b09c28p-2, 0x1.21b3f31e4367ep-1, 0x1.cf55b5eb9eab7p-2, +0x1.d37e2dbba6fc6p-2, 0x1.974b01eb2e96p-1, 0x1.227cc76244f99p-4, 0x1.238d5e92471acp-2, +0x1.d65b28abacb65p-2, 0x1.2fcc0f065f982p-1, 0x1.ede8e393dbd1cp-2, 0x1.c389971387133p-3, +0x1.338876c26710fp-4, 0x1.6b77f34ad6efep-1, 0x1.2c342b3a58685p-2, 0x1.dbb430bbb7686p-1, +0x1.1277cd4a24efap-1, 0x1.a789739b4f12ep-2, 0x1.bf4dbd877e9b8p-1, 0x1.405bdb1a80b7bp-2, +0x1.0794ab220f295p-1, 0x1.4a10f4829421fp-3, 0x1.9e1570333c2aep-2, 0x1.b1cae8336395dp-2, +0x1.e2dfe7bbc5bfdp-2, 0x1.3fea78727fd4fp-3, 0x1.6caac842d9559p-4, 0x1.3b354832766a9p-2, +0x1.b92e7603725cfp-6, 0x1.4d0c999a9a193p-2, 0x1.3b0da4c2761b5p-1, 0x1.453a71068a74ep-1, +0x1.68f6ed72d1edep-1, 0x1.73065f82e60ccp-3, 0x1.672a5fc2ce54cp-4, 0x1.4ad8113295b02p-3, +0x1.f40c99cbe8193p-1, 0x1.44d3939289a72p-3, 0x1.c8f9673391f2dp-2, 0x1.be745c3b7ce8cp-2, +0x1.8100f3eb0201ep-1, 0x1.db712563b6e25p-1, 0x1.501c93e2a0392p-1, 0x1.a77202c74ee4p-1, +0x1.46e918aa8dd23p-1, 0x1.e636a97fcc6d5p-1, 0x1.8326337f064c6p-1, 0x1.658397d2cb073p-3, +0x1.73f6c69ae7ed9p-2, 0x1.4273f10284e7ep-1, 0x1.f31da703e63b5p-2, 0x1.c1900e6f83202p-1, +0x1.94f82e2729f06p-1, 0x1.c8998b9b91331p-1, 0x1.34eb050a69d61p-2, 0x1.0cd0440219a09p-2, +0x1.89429b4312853p-5, 0x1.9015b71b202b7p-2, 0x1.2402c61e48059p-1, 0x1.32eceb2265d9dp-4, +0x1.6e91285add225p-1, 0x1.7c41ab72f8835p-3, 0x1.6b980e6ad7302p-1, 0x1.af102b935e205p-2, +0x1.77a4057aef481p-2, 0x1.987d5a6730fabp-1, 0x1.2a3e1a16547c3p-1, 0x1.5fbd390abf7a7p-2, +0x1.e9b23f4bd3648p-1, 0x1.d759b583aeb37p-6, 0x1.8f18caa31e319p-1, 0x1.6ab33336d5666p-1, +0x1.ea2bf30fd457ep-1, 0x1.be6abd0b7cd58p-2, 0x1.122535fa244a7p-1, 0x1.31150bba622a1p-1, +0x1.8ad8100315b02p-2, 0x1.2a96d2ea552dap-2, 0x1.8a75f1af14ebep-1, 0x1.7f676b4efecedp-1, +0x1.d7bf5a77af7ebp-1, 0x1.08098a5a10131p-2, 0x1.40f779ba81eefp-1, 0x1.6cb7889ad96f1p-1, +0x1.3279431264f28p-3, 0x1.db6cfc3fb6dap-1, 0x1.f31faa9fe63f5p-1, 0x1.94c9e9e32993dp-3, +0x1.46efaf928ddf6p-2, 0x1.172270ba2e44ep-1, 0x1.17202fc22e406p-2, 0x1.20900202412p-5, +0x1.7632db96ec65bp-1, 0x1.f728264bee505p-1, 0x1.d3222bd3a6445p-2, 0x1.9026f2a3204dep-4, +0x1.8fa580af1f4bp-1, 0x1.3cf3000279e6p-5, 0x1.c3c6f5b3878dfp-2, 0x1.7957bffaf2af8p-1, +0x1.144fed62289fep-4, 0x1.c3f115f387e23p-3, 0x1.c815e65b902bdp-2, 0x1.96be17832d7c3p-6, +0x1.5031a402a0635p-1, 0x1.f6302927ec605p-1, 0x1.3dcafc767b96p-1, 0x1.59dac002b3b58p-5, +0x1.16f725322dee5p-2, 0x1.9081dc432103cp-2, 0x1.950517532a0a3p-1, 0x1.8cebb43319d77p-3, +0x1.4c45b34e988b6p-1, 0x1.abf9221357f24p-2, 0x1.cff275ab9fe4fp-1, 0x1.98e4041331c81p-1, +0x1.62d31a92c5a63p-2, 0x1.c312204786244p-1, 0x1.fe167e8bfc2dp-1, 0x1.54e16512a9c2dp-1, +0x1.b46921fb68d24p-2, 0x1.134d2cd2269a6p-2, 0x1.66ea6536cdd4dp-1, 0x1.419db242833b6p-3, +0x1.019d796a033afp-2, 0x1.41edec7283dbep-3, 0x1.04d895ca09b13p-2, 0x1.0743d6020e87bp-5, +0x1.912aac7322556p-3, 0x1.644fc5c2c89f9p-1, 0x1.89cbfd5b1398p-1, 0x1.0da9519a1b52ap-2, +0x1.d54c0b3faa981p-1, 0x1.b75bc2136eb78p-3, 0x1.271533124e2a6p-2, 0x1.257daf3e4afb6p-1, +0x1.901c66a32038dp-3, 0x1.d15595ffa2ab3p-1, 0x1.3b1b5b3e7636bp-1, 0x1.df055883be0abp-2, +0x1.332d083a665a1p-2, 0x1.a040e51b4081dp-2, 0x1.52bd9952a57b3p-1, 0x1.e5dc376bcbb87p-1, +0x1.a61d039b4c3ap-1, 0x1.22b00efa45602p-1, 0x1.7ec03b7afd807p-1, 0x1.5e1a4382bc348p-3, +0x1.cb845e7b9708cp-2, 0x1.7cd6ba02f9ad7p-1, 0x1.ac67f5f358cffp-1, 0x1.bff6c03b7fed8p-1, +0x1.9f541b033ea83p-7, 0x1.13525b2626a4bp-1, 0x1.05e2cc820bc5ap-5, 0x1.0e981a421d303p-2, +0x1.63cdd646c79bbp-1, 0x1.2594ef624b29ep-2, 0x1.2f8095025f013p-2, 0x1.c81881639031p-1, +0x1.f71a3d73ee348p-1, 0x1.0c623ee218c48p-4, 0x1.3bb4a8b277695p-3, 0x1.cc6648af98cc9p-1, +0x1.1ec670c23d8cep-2, 0x1.c4ef876b89df1p-2, 0x1.e3c7efd3c78fep-2, 0x1.e6d4a41bcda95p-2, +0x1.679ab362cf356p-2, 0x1.67fa9922cff53p-4, 0x1.e2ecfe4fc5dap-1, 0x1.4d63ddce9ac7cp-1, +0x1.fa3f8b6bf47f1p-2, 0x1.35aa979e6b553p-1, 0x1.3340153666803p-1, 0x1.4679929a8cf32p-2, +0x1.616a9a52c2d53p-3, 0x1.6400a15ac8014p-2, 0x1.f586b45beb0d7p-2, 0x1.3e1cd5d27c39bp-1, +0x1.76b85582ed70bp-4, 0x1.4e56a03a9cad4p-2, 0x1.fc272c13f84e6p-2, 0x1.aaa2d8e35545bp-4, +0x1.ba7dab4774fb5p-1, 0x1.0e71c2d61ce38p-1, 0x1.7940d07af281ap-2, 0x1.1e4b818a3c97p-1, +0x1.a13c3a8742787p-1, 0x1.5460b2bea8c16p-1, 0x1.ccc805d399901p-2, 0x1.985677f730acfp-1, +0x1.75ecfa9aebd9fp-1, 0x1.35512d1a6aa26p-1, 0x1.64bcc0a2c9798p-1, 0x1.540cbf02a8198p-7, +0x1.7c8f0cc2f91e2p-5, 0x1.5a82e222b505cp-3, 0x1.f1750a13e2ea1p-2, 0x1.972c95032e593p-2, +0x1.0740175a0e803p-2, 0x1.b74f06ab6e9e1p-2, 0x1.8fa284c31f451p-5, 0x1.80bfd163017fap-1, +0x1.1521af422a436p-5, 0x1.4c3a3d8698748p-1, 0x1.1fe4d5623fc9bp-4, 0x1.a6b306234d661p-3, +0x1.fe3a8e33fc752p-1, 0x1.1ebff4da3d7ffp-1, 0x1.a7c9975f4f933p-1, 0x1.688cc702d1199p-4, +0x1.c5eb44fb8bd69p-1, 0x1.4bba5aca9774bp-2, 0x1.8997cff3132fap-3, 0x1.8068f03f00d1ep-1, +0x1.b44ef03b689dep-1, 0x1.1f065c3a3e0ccp-1, 0x1.3d68e38a7ad1cp-2, 0x1.558b2abeab165p-1, +0x1.cd9c3be39b387p-3, 0x1.851874af0a30fp-1, 0x1.dbc34563b7869p-2, 0x1.e9540993d2a81p-1, +0x1.74d3438ae9a68p-2, 0x1.4a798d4294f32p-3, 0x1.eea43c8fdd488p-1, 0x1.a465252b48ca5p-2, +0x1.527e37b2a4fc7p-2, 0x1.cebd832b9d7bp-2, 0x1.9dc8dd173b91cp-1, 0x1.2cdf278a59be5p-1, +0x1.c30644ef860c9p-1, 0x1.b6c305636d861p-1, 0x1.5b3df1d2b67bep-2, 0x1.d4585fe3a8b0cp-1, +0x1.02fd42e605fa8p-1, 0x1.a3372733466e5p-2, 0x1.f0290b43e0521p-4, 0x1.0137d11a026fap-1, +0x1.f05b8873e0b71p-1, 0x1.e5ceb8c7cb9d7p-1, 0x1.2e4969fa5c92dp-1, 0x1.b646cd6b6c8dap-1, +0x1.1757cc5a2eafap-2, 0x1.90af5dfb215ecp-1, 0x1.36afbda66d5f8p-1, 0x1.ffd6b323ffad6p-4, +0x1.5f6b7462bed6fp-2, 0x1.d5642f6baac86p-1, 0x1.958601272b0cp-1, 0x1.231cc92a46399p-1, +0x1.5a7ca41ab4f95p-1, 0x1.06cf47aa0d9e9p-2, 0x1.0c70d2be18e1ap-1, 0x1.4e645dc29cc8cp-5, +0x1.ac0c0e5358182p-2, 0x1.f62a1e93ec544p-2, 0x1.ce31b0e39c636p-2, 0x1.7f452302fe8a4p-1, +0x1.e273d0e3c4e7ap-1, 0x1.09c36b0a1386dp-2, 0x1.58489512b0913p-2, 0x1.a57a15cf4af43p-1, +0x1.dd25d743ba4bbp-4, 0x1.59c34376b3868p-1, 0x1.79d275aef3a4fp-1, 0x1.3ea1fdce7d44p-1, +0x1.5af6b862b5ed7p-4, 0x1.b7d797176faf3p-1, 0x1.fece7723fd9cfp-4, 0x1.bba5f7c3774bfp-5, +0x1.9da64fdf3b4cap-1, 0x1.6e2338e2dc467p-1, 0x1.d2012ceba4026p-1, 0x1.4a91b04295236p-4, +0x1.fda52db3fb4a6p-2, 0x1.08b0ea8e1161dp-1, 0x1.a53431b34a686p-3, 0x1.ae88510b5d10ap-1, +0x1.bc2a33f378546p-2, 0x1.fed30d93fda62p-1, 0x1.a34a346b46947p-2, 0x1.c48df083891bep-4, +0x1.047562d208eacp-2, 0x1.de15ecf3bc2bep-1, 0x1.35e00fb26bc02p-3, 0x1.5840b892b0817p-1, +0x1.b255f87364abfp-2, 0x1.3490dc626921cp-1, 0x1.af0bb7235e177p-2, 0x1.773d9a32ee7b3p-2, +0x1.b97291e772e52p-1, 0x1.83aa261f07545p-1, 0x1.84638b9308c71p-3, 0x1.f5174ccfea2eap-1, +0x1.badad32375b5ap-2, 0x1.daeb5893b5d6bp-1, 0x1.33b94a9e67729p-1, 0x1.08cc409e11988p-1, +0x1.92c2efab2585ep-1, 0x1.73931982e7263p-1, 0x1.2486a01a490d4p-1, 0x1.30693f8660d28p-1, +0x1.c36ca4c386d95p-2, 0x1.ed0f9a03da1f3p-2, 0x1.59bb758eb376fp-1, 0x1.e088e93bc111dp-1, +0x1.ff38b793fe717p-1, 0x1.c30881fb8611p-1, 0x1.8f113a471e227p-1, 0x1.ba9ba31375374p-2, +0x1.c1db8f8f83b72p-1, 0x1.82d951e305b2ap-3, 0x1.15df8f9a2bbf2p-1, 0x1.105903d220b2p-3, +0x1.f6620b43ecc41p-4, 0x1.63579386c6af2p-1, 0x1.9c56f98738adfp-1, 0x1.17f73da22fee8p-1, +0x1.2fd0dfca5fa1cp-2, 0x1.cf7354539ee6bp-3, 0x1.d3960abfa72c1p-1, 0x1.456c07328ad81p-3, +0x1.f786fb33ef0dfp-1, 0x1.a5776d034aeeep-4, 0x1.19c93a6233927p-3, 0x1.a9e8c98353d19p-2, +0x1.f348c683e6919p-6, 0x1.7a2b9936f4573p-1, 0x1.ddc0a55fbb815p-1, 0x1.a25d35df44ba7p-1, +0x1.db7d6573b6fadp-2, 0x1.0247457a048e9p-1, 0x1.a58ceac34b19dp-2, 0x1.cf75051b9eea1p-1, +0x1.f8cf127bf19e2p-1, 0x1.640f5762c81ebp-4, 0x1.affdee575ffbep-1, 0x1.f807ca0bf00f9p-1, +0x1.ef8a6ce7df14ep-1, 0x1.3f0f289a7e1e5p-1, 0x1.aaab372355567p-2, 0x1.b165fc7362ccp-1, +0x1.9fc57d133f8bp-1, 0x1.eb352b2bd66a5p-1, 0x1.f57c3d67eaf88p-1, 0x1.de91be7bbd238p-1, +0x1.4e8cbeb29d198p-1, 0x1.91d336eb23a67p-1, 0x1.ed11f833da23fp-2, 0x1.e6752e97ccea6p-1, +0x1.6c030002d806p-7, 0x1.943e0dab287c2p-2, 0x1.be8183037d03p-4, 0x1.fd370733fa6e1p-1, +0x1.fd9be8f3fb37dp-2, 0x1.f909fbf3f213fp-3, 0x1.a456d7eb48adbp-2, 0x1.0e683aae1cd07p-1, +0x1.f86e1833f0dc3p-1, 0x1.5fd822a2bfb04p-2, 0x1.618ae112c315cp-2, 0x1.cc5995d398b33p-2, +0x1.b23356cb6466bp-1, 0x1.838be5eb0717dp-1, 0x1.6b43a00ad6874p-2, 0x1.ab0269475604dp-1, +0x1.b00dd0d7601bap-1, 0x1.967ef9632cfdfp-3, 0x1.a30a334f46146p-1, 0x1.9f983dbb3f308p-1, +0x1.a4aee6f3495ddp-1, 0x1.e17f3b83c2fe7p-3, 0x1.50fe3a2ea1fc7p-1, 0x1.4474640288e8dp-1, +0x1.8e53e8231ca7dp-3, 0x1.467a77928cf4fp-1, 0x1.2306227a460c4p-1, 0x1.b221b8bb64437p-1, +0x1.b09b5cfb6136cp-2, 0x1.98f1e90331e3dp-5, 0x1.9896e753312ddp-1, 0x1.bbfb74fb77f6fp-2, +0x1.c75c4ad38eb89p-2, 0x1.d06717b3a0ce3p-1, 0x1.b669835b6cd3p-2, 0x1.e27c19e3c4f83p-1, +0x1.3aa65ab2754cbp-3, 0x1.ad602da35ac06p-1, 0x1.e1c8a91bc3915p-2, 0x1.1c5ebb8238bd7p-3, +0x1.7530fbd2ea61fp-3, 0x1.a1a9c51743539p-1, 0x1.2d4479ca5a88fp-1, 0x1.eff2b783dfe57p-6, +0x1.2535aafe4a6b5p-1, 0x1.e2e649cfc5cc9p-1, 0x1.ba81ff037504p-1, 0x1.aa86f7a3550dfp-2, +0x1.2218209244304p-3, 0x1.5d8c3252bb186p-1, 0x1.d36ee623a6dddp-3, 0x1.ed34ef17da69ep-1, +0x1.d5ec0133abd8p-1, 0x1.c5d9f3b78bb3ep-1, 0x1.31a953166352ap-1, 0x1.cc07d9c3980fbp-4, +0x1.0c546b4a18a8dp-1, 0x1.52bdd632a57bbp-3, 0x1.eba2b3f7d7456p-1, 0x1.e4a219c7c9443p-1, +0x1.b8fa508371f4ap-3, 0x1.84399b4708733p-1, 0x1.853fa8830a7f5p-2, 0x1.51ecb98aa3d97p-1, +0x1.54a0b2f6a9416p-1, 0x1.9dd495ef3ba93p-1, 0x1.3468d36a68d1ap-1, 0x1.a34a49a746949p-1, +0x1.4b34c39296698p-1, 0x1.2a693fa254d28p-4, 0x1.ea61f887d4c3fp-1, 0x1.a88102875102p-1, +0x1.c6f6ed0b8dedep-1, 0x1.17a6724e2f4cep-1, 0x1.b800984370013p-1, 0x1.d859300bb0b26p-2, +0x1.f519783bea32fp-2, 0x1.72829746e5053p-1, 0x1.c17013d782e02p-1, 0x1.4312c44286259p-1, +0x1.a01d932b403b2p-2, 0x1.b25e6ae364bcdp-4, 0x1.3047b35a608f6p-1, 0x1.4bf5958a97eb3p-2, +0x1.fc25c117f84b8p-1, 0x1.87c419b30f883p-3, 0x1.bef78bfb7def1p-2, 0x1.087a2c5e10f46p-1, +0x1.6d40f7fada81fp-2, 0x1.963cf3e32c79ep-2, 0x1.da388c43b4712p-2, 0x1.24df101e49be2p-1, +0x1.3d6054d27ac0bp-3, 0x1.afbc1a635f783p-1, 0x1.db2f2693b65e5p-3, 0x1.a3f8c82f47f19p-1, +0x1.4d90b04e9b216p-1, 0x1.ab349d0f56694p-1, 0x1.474311d28e862p-1, 0x1.318ae7ba6315dp-2, +0x1.d081c503a1039p-1, 0x1.31a50a56634a1p-1, 0x1.0519d9820a33bp-3, 0x1.9778b20b2ef16p-1, +0x1.252df2824a5bep-3, 0x1.f9470ea7f28e2p-1, 0x1.074a941a0e953p-2, 0x1.43d838be87b07p-1, +0x1.6bc9a5ead7935p-1, 0x1.1455778228aafp-3, 0x1.0dd5fa021babfp-2, 0x1.dec37be3bd86fp-4, +0x1.ed84acf3db096p-3, 0x1.b732b05b6e656p-1, 0x1.c3a67483874cfp-2, 0x1.de1bb143bc376p-3, +0x1.923b6c432476ep-5, 0x1.c14f003f829ep-1, 0x1.800118af00023p-1, 0x1.9f8865833f10dp-2, +0x1.18daf46231b5fp-2, 0x1.b4757b3368eafp-3, 0x1.f4a342dfe9468p-1, 0x1.b78b1ecb6f164p-2, +0x1.cd9792c39b2f2p-5, 0x1.adbc32035b786p-3, 0x1.fef95e43fdf2cp-3, 0x1.6a6a297ed4d45p-1, +0x1.6a3a98c2d4753p-5, 0x1.c70169638e02dp-1, 0x1.97ceac032f9d6p-8, 0x1.e7256e8fce4aep-1, +0x1.f14ce76be299dp-2, 0x1.11d84ef223b0ap-3, 0x1.7e9e2096fd3c4p-1, 0x1.41f1f05a83e3ep-1, +0x1.ede91303dbd22p-4, 0x1.21b55002436aap-8, 0x1.0b94522a1728ap-2, 0x1.a986c84b530d9p-1, +0x1.1d6322023ac64p-3, 0x1.0cb52616196a5p-1, 0x1.e55f37c7cabe7p-1, 0x1.8573e7830ae7dp-2, +0x1.87cfacdb0f9f6p-2, 0x1.8e64e40b1cc9dp-2, 0x1.3a40e0127481cp-1, 0x1.ba171a6b742e3p-2, +0x1.1102e4822205dp-2, 0x1.7483f182e907ep-2, 0x1.accfbff7599f8p-1, 0x1.14eeec7229ddep-1, +0x1.275f578e4ebebp-1, 0x1.a17302d742e6p-1, 0x1.f0b47bdbe168fp-1, 0x1.4438d0be8871ap-1, +0x1.9c41ea833883dp-6, 0x1.c1cb4da38396ap-3, 0x1.5d45f472ba8bfp-2, 0x1.1c2dc722385b9p-4, +0x1.bba1e6637743dp-4, 0x1.63a52f22c74a6p-2, 0x1.5564ee02aac9ep-6, 0x1.301ab08260356p-1, +0x1.ec91569bd922bp-2, 0x1.8949480b12929p-1, 0x1.c83283639065p-3, 0x1.3405cdae680bap-1, +0x1.8b8cb2ab17196p-1, 0x1.efad93e3df5b2p-2, 0x1.bb192beb76325p-2, 0x1.d2e57b2fa5cafp-1, +0x1.22fc010245f8p-7, 0x1.85d79b730baf3p-2, 0x1.2b3eddda567dcp-2, 0x1.90e78ceb21cf2p-2, +0x1.8a1e3fbf143c8p-1, 0x1.cfe04eff9fc0ap-1, 0x1.a57f53ab4afeap-1, 0x1.29fb200253f64p-5, +0x1.14448f7a28892p-2, 0x1.524f139ea49e2p-1, 0x1.278e9e724f1d4p-1, 0x1.b1819f4f63034p-1, +0x1.e7842ce3cf086p-2, 0x1.18431a4a30863p-1, 0x1.eb74e013d6e9cp-2, 0x1.00a425ca01485p-1, +0x1.88b5edb7116bep-1, 0x1.a45d6a4348badp-1, 0x1.2429deae4853cp-1, 0x1.c02a2a8380545p-1, +0x1.58c00742b1801p-3, 0x1.2ed5061e5daa1p-1, 0x1.e089b603c1137p-2, 0x1.4c78ad2298f16p-1, +0x1.703c9c4ae0794p-2, 0x1.62517bdec4a2fp-1, 0x1.00fcf59a01f9fp-2, 0x1.0eac03421d58p-3, +0x1.68a11732d1423p-3, 0x1.5e0b10c6bc162p-1, 0x1.6907bfc2d20f8p-5, 0x1.7ad0d742f5a1bp-3, +0x1.07b6f3e20f6dep-4, 0x1.585fd5d2b0bfbp-2, 0x1.2727fc464e5p-1, 0x1.ab151e3f562a4p-1, +0x1.f040e793e081dp-3, 0x1.994e9fdb329d4p-2, 0x1.bdb4d03f7b69ap-1, 0x1.063281a60c65p-1, +0x1.ef6638c3decc7p-5, 0x1.ca86dd5b950dcp-2, 0x1.6f6841e2ded08p-2, 0x1.12b879fe2570fp-1, +0x1.fd8688fbfb0d1p-1, 0x1.ad6e90fb5add2p-1, 0x1.35c9fc426b94p-5, 0x1.863c76af0c78fp-1, +0x1.51cbfb3aa397fp-1, 0x1.37867e726f0dp-1, 0x1.4666a12e8ccd4p-1, 0x1.a7fbfd0b4ff8p-1, +0x1.996e124332dc2p-3, 0x1.b55be1636ab7cp-4, 0x1.e8e95453d1d2bp-2, 0x1.1e79d2b63cf3ap-1, +0x1.98fcf80b31f9fp-1, 0x1.74f324fae9e65p-1, 0x1.6224d386c449ap-1, 0x1.f3253dd7e64a8p-1, +0x1.a5fc6b7b4bf8dp-2, 0x1.78b54f82f16aap-1, 0x1.4765cea28ecbap-3, 0x1.e7ea2873cfd45p-2, +0x1.2729d3424e53ap-4, 0x1.79016feef202ep-1, 0x1.3e1464ea7c28dp-2, 0x1.41eae8a283d5dp-2, +0x1.16a2ff722d46p-3, 0x1.72fc0ac2e5f81p-3, 0x1.a727f5f74e4ffp-1, 0x1.927c8da324f92p-3, +0x1.420271628404ep-1, 0x1.7b705b92f6e0bp-3, 0x1.77579d66eeaf4p-1, 0x1.3f88fa5a7f11fp-1, +0x1.8954fb8312a9fp-6, 0x1.8ab43d2f15688p-1, 0x1.8b8ae20b1715cp-2, 0x1.5e16a316bc2d4p-1, +0x1.8475773b08eafp-2, 0x1.858246030b049p-6, 0x1.0612a01e0c254p-1, 0x1.2896402e512c8p-1, +0x1.0b5e397216bc7p-3, 0x1.fa874a4bf50e9p-1, 0x1.1c404b9238809p-3, 0x1.dbd4866bb7a91p-1, +0x1.6f7a6f42def4ep-1, 0x1.a934e66b5269dp-1, 0x1.cef9c43f9df39p-1, 0x1.09e293f213c52p-3, +0x1.21ea35ee43d47p-1, 0x1.0699bf220d338p-4, 0x1.366db9366cdb7p-1, 0x1.46cf70568d9eep-1, +0x1.99d4a7d733a95p-1, 0x1.d577ebafaaefdp-1, 0x1.e7c4e4a7cf89dp-1, 0x1.df7d67b3befadp-1, +0x1.91b772e3236eep-4, 0x1.8eecda9b1dd9bp-1, 0x1.10722c6220e46p-3, 0x1.74395fbee872cp-1, +0x1.edc8f17fdb91ep-1, 0x1.bb74287f76e85p-1, 0x1.6784b42acf097p-2, 0x1.fa13995bf4273p-1, +0x1.462865aa8c50dp-1, 0x1.7987cb1af30f9p-1, 0x1.582a3c6eb0548p-1, 0x1.0c64290218c85p-6, +0x1.85b3dd4b0b67cp-1, 0x1.78f37232f1e6ep-3, 0x1.30f9617661f2cp-1, 0x1.c88b6bab9116dp-1, +0x1.63109b52c6213p-3, 0x1.7809745af012fp-1, 0x1.a45ff21348bfep-1, 0x1.c83e9617907d3p-1, +0x1.213e5ac6427cbp-1, 0x1.7359b64ee6b37p-1, 0x1.56e76202adcecp-6, 0x1.0ca242c219448p-3, +0x1.942cee372859ep-1, 0x1.4124f4468249fp-1, 0x1.89f8010713fp-1, 0x1.2e01960a5c033p-1, +0x1.169cdff22d39cp-1, 0x1.71bce5aee379dp-1, 0x1.0d7efdba1afep-1, 0x1.48d3ce5291a7ap-1, +0x1.00a9c04601538p-1, 0x1.519b88d2a3371p-1, 0x1.7a1a5c1af434cp-2, 0x1.dce5638bb9cacp-2, +0x1.0d0fb14e1a1f6p-1, 0x1.70cf8826e19f1p-1, 0x1.d10c963ba2193p-2, 0x1.4ce05be299c0bp-3, +0x1.d4aea67ba95d5p-2, 0x1.02c21e3205844p-3, 0x1.6e6ce102dcd9cp-3, 0x1.c02cc22380598p-3, +0x1.3ddac8327bb59p-2, 0x1.8c9499b719293p-1, 0x1.c4b4e1838969cp-4, 0x1.ef6315dbdec63p-2, +0x1.049e0e12093c2p-1, 0x1.dcf68e43b9ed2p-1, 0x1.7fe04202ffc08p-2, 0x1.2ee346a25dc69p-4, +0x1.5050448ea0a09p-1, 0x1.954eb8232a9d7p-2, 0x1.a413e6134827dp-3, 0x1.c8fa658391f4dp-2, +0x1.798a0a82f3141p-6, 0x1.f2fcfa8be5f9fp-1, 0x1.27ec8c824fd92p-5, 0x1.2269304a44d26p-1, +0x1.64b9e036c973cp-1, 0x1.1ffdc6823ffb9p-1, 0x1.acf3fa6359e7fp-3, 0x1.958e81f32b1dp-3, +0x1.c6653d438cca8p-3, 0x1.284a2ca650946p-1, 0x1.53d65242a7acap-1, 0x1.7ea900a2fd52p-1, +0x1.323369926466dp-2, 0x1.e2e4eae3c5c9dp-4, 0x1.d1e1179ba3c23p-1, 0x1.8371080b06e21p-1, +0x1.f43493a3e8692p-3, 0x1.6be27ec2d7c5p-4, 0x1.f37c3893e6f87p-1, 0x1.1bfa890237f51p-1, +0x1.ba10e98f7421dp-1, 0x1.6096a602c12d5p-4, 0x1.3ac13ec275828p-5, 0x1.7d5def3afabbep-2, +0x1.212c60024258cp-6, 0x1.a73869db4e70dp-2, 0x1.c916c0e3922d8p-2, 0x1.5959a78eb2b35p-1, +0x1.9e4390ff3c872p-1, 0x1.4d9059f69b20bp-1, 0x1.eeb6d283dd6dap-4, 0x1.aa0fe157541fcp-1, +0x1.408d5482811abp-1, 0x1.41568c6282ad2p-3, 0x1.98f2233b31e44p-2, 0x1.4a8e696a951cdp-2, +0x1.7053699ee0a6dp-1, 0x1.37b610366f6c2p-1, 0x1.0aaad5321555bp-1, 0x1.e1ecb8efc3d97p-1, +0x1.8000f3630001ep-3, 0x1.7a049dc2f4094p-3, 0x1.6095b98ec12b7p-1, 0x1.f233e34be467cp-2, +0x1.35bb89a26b771p-2, 0x1.3276d12664edap-1, 0x1.f22be6b3e457dp-3, 0x1.17eae9ba2fd5dp-1, +0x1.5ff320febfe64p-1, 0x1.c01cc8f380399p-3, 0x1.9f2b95e33e573p-4, 0x1.1a040a8e34081p-1, +0x1.38340dfa70682p-2, 0x1.1e461aa23c8c3p-3, 0x1.d8b3022bb166p-1, 0x1.4a46d3fa948dap-2, +0x1.1b2dbb9a365b7p-1, 0x1.7a7cc53af4f99p-2, 0x1.fe7d118bfcfa2p-1, 0x1.72e2992ae5c53p-2, +0x1.59d79202b3af2p-6, 0x1.e29f5ec3c53ecp-4, 0x1.8e04b7a31c097p-3, 0x1.4b5c111296b82p-1, +0x1.19531dea32a64p-2, 0x1.2ffa3f865ff48p-1, 0x1.f0a345cbe1469p-1, 0x1.fcfcf893f9f9fp-1, +0x1.9ec13ee33d828p-3, 0x1.f69c35f3ed387p-2, 0x1.dee9b17fbdd36p-1, 0x1.8f61192b1ec23p-2, +0x1.59cf426eb39e8p-1, 0x1.3f7f6b0e7efedp-1, 0x1.c0ca7e3b8195p-1, 0x1.f4ad073fe95a1p-1, +0x1.c7d8f0c38fb1ep-3, 0x1.eaabbf23d5578p-4, 0x1.0c97f0f6192fep-1, 0x1.d1e95d33a3d2cp-1, +0x1.5ab95442b572bp-2, 0x1.407d63b280facp-1, 0x1.d7dacf7bafb5ap-2, 0x1.4976b11e92ed6p-1, +0x1.880eea5f101ddp-1, 0x1.8940d3cb1281ap-2, 0x1.ee9a1b1bdd343p-1, 0x1.46794bea8cf29p-2, +0x1.81decc8303bdap-1, 0x1.ed172ca3da2e6p-1, 0x1.5cadf28ab95bep-1, 0x1.8cad8917195b1p-1, +0x1.4b58c3e296b18p-4, 0x1.c02f2077805e4p-1, 0x1.b013344b60267p-2, 0x1.6c294ee2d852ap-2, +0x1.e052bff3c0a58p-2, 0x1.9159bfdb22b38p-2, 0x1.66234002cc468p-2, 0x1.57d9afb6afb36p-1, +0x1.c3fafaeb87f5fp-1, 0x1.23f6a2fa47ed4p-2, 0x1.f8a3c483f1479p-5, 0x1.1dca3d563b948p-1, +0x1.d17abc8ba2f58p-1, 0x1.e054ba83c0a97p-1, 0x1.1277449224ee9p-1, 0x1.0dc3e2f21b87cp-3, +0x1.daa32643b5465p-5, 0x1.f0f35843e1e6bp-5, 0x1.55a55ec2ab4acp-5, 0x1.960db90b2c1b7p-2, +0x1.5f8c993abf193p-1, 0x1.0147bdaa028f8p-1, 0x1.47d8da028fb1bp-5, 0x1.cf37072b9e6e1p-2, +0x1.c5e8278f8bd05p-1, 0x1.8bd45c0317a8cp-8, 0x1.8ad8298b15b05p-1, 0x1.47c6f4128f8dfp-1, +0x1.f02ed55be05dbp-1, 0x1.cf0c38239e187p-2, 0x1.a8e8fa4b51d1fp-2, 0x1.999edd43333dcp-5, +0x1.4f6a790a9ed4fp-2, 0x1.ac7e174b58fc3p-1, 0x1.9f5d2a8b3eba5p-2, 0x1.97de9c832fbd4p-1, +0x1.d4abdce3a957cp-3, 0x1.82c0354705807p-1, 0x1.df70986bbee13p-2, 0x1.c92f9103925f2p-4, +0x1.4bb86c429770ep-5, 0x1.0f42887e1e851p-1, 0x1.56f02f76ade06p-1, 0x1.e636434fcc6c8p-1, +0x1.df2e85fbbe5d1p-2, 0x1.a59dd0134b3bap-3, 0x1.4d39e0429a73cp-4, 0x1.0d4175621a82fp-1, +0x1.10ed531221daap-2, 0x1.f80c8fa3f0192p-4, 0x1.d84851e7b090ap-1, 0x1.e80342c3d0068p-1, +0x1.40494f9e8092ap-1, 0x1.ecc5df87d98bcp-1, 0x1.9f3d8cab3e7b2p-2, 0x1.0631772e0c62fp-1, +0x1.efdd883fdfbb1p-1, 0x1.69dbbf72d3b78p-3, 0x1.37e1acf26fc36p-3, 0x1.e00c5d97c018cp-1, +0x1.41fd0bf283fa1p-1, 0x1.226ce86244d9dp-1, 0x1.f9a64b6ff34c9p-1, 0x1.e9b24877d3649p-1, +0x1.9dd5ff533bacp-2, 0x1.92a9c16325538p-2, 0x1.8190e4f70321dp-1, 0x1.4415f6e2882bfp-1, +0x1.305457e260a8bp-3, 0x1.c524c4a38a499p-3, 0x1.7d3be902fa77dp-1, 0x1.834272f30684ep-3, +0x1.808bb9a701177p-1, 0x1.a85830eb50b06p-2, 0x1.1c1b80223837p-3, 0x1.c08bf2838117ep-3, +0x1.3d938c7a7b272p-1, 0x1.c2b870538570ep-3, 0x1.7d647202fac8ep-1, 0x1.c60a36078c147p-1, +0x1.5f5f5c12bebecp-2, 0x1.55acc3e6ab598p-1, 0x1.ae0d78c75c1afp-1, 0x1.eff8fdabdff2p-1, +0x1.4272a36a84e54p-1, 0x1.f6b0fc73ed62p-3, 0x1.ec54e9abd8a9dp-2, 0x1.32502ba664a05p-1, +0x1.b0465df3608ccp-2, 0x1.4422e0128845cp-1, 0x1.125c893e24b91p-1, 0x1.a203ae8344076p-5, +0x1.9a3f21c3347e4p-3, 0x1.0c02d4aa1805bp-1, 0x1.e941b003d2836p-8, 0x1.357ac81a6af59p-1, +0x1.d557b55baaaf7p-1, 0x1.856368570ac6dp-1, 0x1.e642fbf3cc85fp-3, 0x1.0b665a8216ccbp-4, +0x1.f6ac9983ed593p-1, 0x1.f6cca7ffed995p-1, 0x1.047ad01a08f5ap-2, 0x1.77385326ee70ap-1, +0x1.95f180eb2be3p-2, 0x1.9288903325112p-2, 0x1.e75b4fcbceb6ap-1, 0x1.11899d8223134p-6, +0x1.39f2642e73e4dp-1, 0x1.64bfc1cac97f8p-1, 0x1.ce9682f39d2dp-1, 0x1.e9a21237d3442p-1, +0x1.74d90b62e9b21p-2, 0x1.7ca3fbbaf947fp-1, 0x1.d99b0fdfb3362p-1, 0x1.fcdf291bf9be5p-1, +0x1.fa503ad7f4a07p-1, 0x1.9f8b09633f161p-2, 0x1.2f2f54c25e5ebp-1, 0x1.a4e6d39b49cdap-2, +0x1.3e864c027d0cap-5, 0x1.062f77f20c5efp-3, 0x1.d9274973b24e9p-2, 0x1.e9e0b4c3d3c17p-3, +0x1.4d8eb2a69b1d6p-1, 0x1.e0cc5033c198ap-2, 0x1.aff2f54f5fe5fp-1, 0x1.22e667fe45ccdp-1, +0x1.d72641b3ae4c8p-3, 0x1.4c1da242983b4p-4, 0x1.4453335288a66p-1, 0x1.b1d8a7b363b15p-3, +0x1.0282e2220505cp-4, 0x1.c6909b5f8d213p-1, 0x1.e3ae7d17c75dp-1, 0x1.d6923973ad247p-2, +0x1.1fa9c6ea3f539p-2, 0x1.cb09ccdf9613ap-1, 0x1.e7aad353cf55ap-2, 0x1.c9c747a3938e9p-1, +0x1.2fc98ea65f932p-1, 0x1.84d7d93309afbp-2, 0x1.b36959db66d2bp-1, 0x1.ea361457d46c3p-1, +0x1.f87f4283f0fe8p-4, 0x1.8d0469b71a08dp-1, 0x1.e7153d73ce2a8p-1, 0x1.cb01192396023p-4, +0x1.7327b9a2e64f7p-3, 0x1.164492322c892p-1, 0x1.0bd38cf617a72p-1, 0x1.c2c94ca38592ap-3, +0x1.57d0702eafa0ep-1, 0x1.f86731aff0ce6p-1, 0x1.d65500bbacaap-2, 0x1.4abe45a2957c9p-2, +0x1.d19ab38ba3356p-2, 0x1.363aeb526c75dp-2, 0x1.c8458acf908b1p-1, 0x1.5e96ea32bd2ddp-1, +0x1.894253e31284ap-2, 0x1.0c98be1e19318p-1, 0x1.cb0d1423961a3p-1, 0x1.c9e30c6b93c62p-2, +0x1.a652b2fb4ca56p-2, 0x1.aebb91375d772p-1, 0x1.d03aa2f3a0754p-1, 0x1.62fe3cf2c5fc8p-1, +0x1.79c55e12f38acp-1, 0x1.8820193310403p-2, 0x1.2cc58496598b1p-1, 0x1.531dd96aa63bbp-2, +0x1.867bf9330cf7fp-1, 0x1.c05dbcdb80bb8p-2, 0x1.278a021a4f14p-2, 0x1.c58be1878b17cp-1, +0x1.b4cd2083699a4p-3, 0x1.eb68f9f3d6d1fp-3, 0x1.feec04abfdd81p-1, 0x1.93fa6d1327f4ep-2, +0x1.911ed0af223dap-1, 0x1.0abf919e157f2p-1, 0x1.3aaf89b6755f1p-1, 0x1.d1de81b3a3bdp-2, +0x1.0326c34a064d8p-1, 0x1.2ed050825da0ap-4, 0x1.8e4e63ab1c9ccp-1, 0x1.ebf41d0fd7e84p-1, +0x1.81eeff7303dep-2, 0x1.5693ee76ad27ep-1, 0x1.4a8b074295161p-1, 0x1.8598a9ab0b315p-1, +0x1.8cb2b25319656p-3, 0x1.15981b622b303p-1, 0x1.aa28bf7354518p-3, 0x1.365606126cac1p-1, +0x1.88a7592b114ebp-2, 0x1.d6269663ac4d3p-4, 0x1.32a8860265511p-2, 0x1.f0c85523e190bp-4, +0x1.fda9becbfb538p-2, 0x1.c619c7978c339p-1, 0x1.cf4feeb39e9fep-2, 0x1.0aa1b13215436p-2, +0x1.4c914c029922ap-2, 0x1.7b6cf866f6d9fp-1, 0x1.2b72e87256e5dp-3, 0x1.137bee2626f7ep-1, +0x1.f64736e3ec8e7p-1, 0x1.2722fb124e45fp-3, 0x1.dd7924afbaf25p-1, 0x1.8766078f0ecc1p-1, +0x1.54885066a910ap-1, 0x1.1828ae6230516p-1, 0x1.c155219382aa4p-3, 0x1.5ebc4eb2bd78ap-3, +0x1.3e02b8727c057p-1, 0x1.fea3ac0ffd476p-1, 0x1.0e8cc2f21d198p-3, 0x1.fefa382bfdf47p-1, +0x1.55379a86aa6f3p-1, 0x1.8e2e37ff1c5c7p-1, 0x1.8492e1d30925cp-1, 0x1.b864471b70c89p-1, +0x1.478ca6ba8f195p-2, 0x1.ef1d11b3de3a2p-1, 0x1.dd749a53bae93p-2, 0x1.6819fff2d034p-1, +0x1.4f0f23e29e1e4p-4, 0x1.880e902b101d2p-1, 0x1.a6330a974c661p-1, 0x1.28b6c3e6516d8p-1, +0x1.4e2857c29c50bp-1, 0x1.1bb603da376cp-2, 0x1.ae079c7f5c0f4p-1, 0x1.f470fdc3e8e2p-1, +0x1.28ff4a8251fe9p-6, 0x1.f8e4569bf1c8bp-1, 0x1.07ecebe60fd9dp-1, 0x1.ff8f3137ff1e6p-1, +0x1.0ab455721568bp-3, 0x1.cacc212b95984p-2, 0x1.86f538c70dea7p-1, 0x1.973565c32e6adp-1, +0x1.fd8ebef7fb1d8p-1, 0x1.f74a812bee95p-1, 0x1.eee47973ddc8fp-1, 0x1.3b91776a7722fp-1, +0x1.f5ee2d3bebdc6p-1, 0x1.943d5163287aap-4, 0x1.3a8baf9275176p-1, 0x1.4b25c7be964b9p-1, +0x1.c0b5e22b816bcp-1, 0x1.7e3d22cafc7a4p-2, 0x1.038a0ed607142p-1, 0x1.91f0d61323e1bp-3, +0x1.5c77462ab8ee9p-2, 0x1.f2445bffe488bp-1, 0x1.cc963577992c7p-1, 0x1.b03b0f2360762p-2, +0x1.7a52ec26f4a5ep-1, 0x1.72c9400ae5928p-1, 0x1.a896e803512ddp-10, 0x1.90f687cb21ed1p-2, +0x1.4883e8029107dp-10, 0x1.aedbe7f35db7dp-1, 0x1.79d88352f3b1p-2, 0x1.3d8789027b0f1p-6, +0x1.a7c03e8b4f808p-1, 0x1.c4d92d8f89b26p-1, 0x1.2f6db0025edb6p-6, 0x1.ea6d53ebd4daap-1, +0x1.547e7c42a8fdp-2, 0x1.9070a64720e15p-1, 0x1.81a2b9ab03457p-1, 0x1.4f9bfa329f37fp-2, +0x1.87bb276f0f765p-1, 0x1.7087331ae10e6p-1, 0x1.e35f7483c6befp-1, 0x1.7da954a6fb52bp-1, +0x1.a30edd47461dcp-1, 0x1.1deb24123bd65p-1, 0x1.919e38c3233c7p-2, 0x1.63c4bf6ec7898p-1, +0x1.dd09b577ba137p-1, 0x1.cc592b3798b25p-1, 0x1.c840f4f39081fp-1, 0x1.168ab1122d156p-2, +0x1.be9d87337d3b1p-1, 0x1.94d72a6729ae5p-1, 0x1.6362e01ec6c5cp-1, 0x1.38f0735a71e0ep-1, +0x1.07a06a6e0f40dp-1, 0x1.64372b92c86e5p-1, 0x1.6bb73c02d76e8p-9, 0x1.0844ac6610896p-1, +0x1.1313138626262p-1, 0x1.7caff1caf95fep-2, 0x1.1230e8ae2461dp-1, 0x1.75a6a41aeb4d5p-2, +0x1.06624cea0cc4ap-2, 0x1.1bac562e3758bp-1, 0x1.4a814bea95029p-2, 0x1.2d7064965ae0dp-1, +0x1.5839f8e2b073fp-2, 0x1.371afd026e36p-4, 0x1.d53e61afaa7ccp-1, 0x1.9ec11f033d824p-4, +0x1.976a92bb2ed52p-1, 0x1.b89dd62f713bbp-1, 0x1.b18178876302fp-1, 0x1.3a79700274f2ep-1, +0x1.ad11f4835a23fp-2, 0x1.e94253a3d284ap-3, 0x1.3c7c5eda78f8cp-2, 0x1.67255f6ace4acp-2, +0x1.1aa70072354ep-3, 0x1.99fc918333f92p-3, 0x1.3ed808427db01p-1, 0x1.51d1d402a3a3bp-7, +0x1.fb564ec7f6acap-1, 0x1.4475d0ba88ebap-2, 0x1.3e37baaa7c6f7p-1, 0x1.02f6b93605ed7p-1, +0x1.9c84fb033909fp-7, 0x1.3fa371e67f46ep-1, 0x1.676cb302ced96p-6, 0x1.19852772330a5p-1, +0x1.fdfb6acffbf6dp-1, 0x1.1d6c4e463ad8ap-1, 0x1.d4587983a8b0fp-1, 0x1.0259228204b24p-2, +0x1.c8c523a3918a4p-4, 0x1.e6647dd3ccc9p-3, 0x1.ae9cf5d75d39fp-1, 0x1.ca6b41cb94d68p-2, +0x1.40f8fe2a81f2p-2, 0x1.83db578707b6bp-1, 0x1.190dc4c6321b9p-1, 0x1.bf388e837e712p-4, +0x1.3c792db278f26p-1, 0x1.951e7a9b2a3cfp-2, 0x1.726081d2e4c1p-1, 0x1.30227f026045p-5, +0x1.44dfd23689bfap-1, 0x1.09eb13c213d62p-5, 0x1.8d29af531a536p-2, 0x1.8b89925317132p-1, +0x1.dc775673b8eebp-3, 0x1.5b37fa02b66ffp-7, 0x1.90d0d9a321a1bp-1, 0x1.c9d0919393a12p-3, +0x1.4f4f908a9e9f2p-2, 0x1.9e1128933c225p-2, 0x1.756add9aead5cp-1, 0x1.5c33b862b8677p-2, +0x1.d580c603ab019p-6, 0x1.80a64333014c8p-1, 0x1.c79f03a78f3ep-1, 0x1.94ee1f8329dc4p-6, +0x1.3c2522ea784a4p-2, 0x1.9bf77d2737efp-1, 0x1.1ba8047a37501p-2, 0x1.ae566bd35cacdp-2, +0x1.5909c982b2139p-5, 0x1.e387c083c70f8p-4, 0x1.bc60d6d378c1bp-1, 0x1.6c1a3762d8347p-2, +0x1.c04c4f978098ap-1, 0x1.aadd372b55ba7p-2, 0x1.dbe85b03b7d0bp-2, 0x1.f98afa93f315fp-2, +0x1.9ffdd8e33ffbbp-1, 0x1.8152bd4302a58p-3, 0x1.0fc7a53a1f8f5p-1, 0x1.c9bb562b9376bp-2, +0x1.c3cd8233879bp-3, 0x1.d65c7ce3acb9p-1, 0x1.c19cf5a38339fp-3, 0x1.d0226c5ba044ep-2, +0x1.dbc95ccbb792cp-1, 0x1.38170802702e1p-9, 0x1.5a855a92b50abp-1, 0x1.06e24a1a0dc49p-2, +0x1.a08156ab4102bp-2, 0x1.9fe070533fc0ep-2, 0x1.318b01426316p-1, 0x1.bdd9630b7bb2cp-2, +0x1.4259ed6284b3ep-3, 0x1.f25409cbe4a81p-2, 0x1.d7284503ae509p-2, 0x1.dd52199bbaa43p-2, +0x1.2a43041254861p-2, 0x1.796824bef2d05p-1, 0x1.c5d442bb8ba88p-1, 0x1.55643d42aac88p-2, +0x1.b5d91ccf6bb24p-1, 0x1.8235198b046a3p-1, 0x1.60bf3a52c17e7p-1, 0x1.76256c66ec4aep-1, +0x1.5e8ed472bd1dbp-3, 0x1.3acd9f42759b4p-3, 0x1.cbaba6b397575p-3, 0x1.f7a18e03ef432p-1, +0x1.5e102e42bc206p-2, 0x1.82b28ee705652p-1, 0x1.b8fe722b71fcep-2, 0x1.1ffb77b23ff6fp-1, +0x1.590f0bcab21e1p-1, 0x1.4ce6767e99ccfp-1, 0x1.0195bb82032b7p-6, 0x1.34d8689269b0dp-1, +0x1.4e1e8d8a9c3d2p-1, 0x1.6292086ec5241p-1, 0x1.b8498da370932p-1, 0x1.e5f38dc3cbe72p-5, +0x1.941204a328241p-4, 0x1.d3a91dc3a7524p-2, 0x1.fa97d4c3f52fbp-2, 0x1.063177da0c62fp-2, +0x1.e2fe93c7c5fd2p-1, 0x1.e8e00ce3d1c02p-1, 0x1.71c1c8bae3839p-1, 0x1.e0805733c100bp-3, +0x1.6248319ec4906p-1, 0x1.37960b726f2c1p-1, 0x1.22d2346e45a47p-1, 0x1.18214e6a3042ap-1, +0x1.739649f2e72c9p-2, 0x1.0722dd820e45cp-2, 0x1.1c8d759a391afp-2, 0x1.116eda1a22ddbp-1, +0x1.a489ad2349136p-2, 0x1.0131a47a02635p-1, 0x1.0910681a1220dp-1, 0x1.814cedb70299ep-1, +0x1.07c866c20f90dp-2, 0x1.e58fa12fcb1f4p-1, 0x1.4290caca85219p-2, 0x1.dcf33f2bb9e68p-1, +0x1.327617ae64ec3p-1, 0x1.52aa2682a5545p-2, 0x1.11cba7ba23975p-1, 0x1.01294a6a02529p-2, +0x1.7ce37582f9c6fp-6, 0x1.942a6ab32854dp-2, 0x1.3de7bc227bcf8p-2, 0x1.f34ae203e695cp-4, +0x1.b3e9c43b67d39p-1, 0x1.9c3fc873387f9p-1, 0x1.8304305b06086p-2, 0x1.96e857ff2dd0bp-1, +0x1.851fd5530a3fbp-1, 0x1.9a1f0723343e1p-4, 0x1.e10db903c21b7p-6, 0x1.ced00ddb9da02p-2, +0x1.6ad9ec5ad5b3ep-1, 0x1.31daa23a63b54p-1, 0x1.ff895557ff12bp-1, 0x1.25288a824a511p-4, +0x1.b56c10fb6ad82p-1, 0x1.1ba0204a37404p-2, 0x1.3613eb6a6c27dp-1, 0x1.0f61cf121ec3ap-2, +0x1.8f01b49f1e037p-1, 0x1.f9229c03f2454p-4, 0x1.1fbaa7823f755p-6, 0x1.2e5e7fc25cbdp-5, +0x1.259fa5824b3f5p-4, 0x1.548c7542a918fp-2, 0x1.efd92727dfb25p-1, 0x1.572a0c5eae542p-1, +0x1.539b4de2a736ap-1, 0x1.01a4cee20349ap-1, 0x1.d7beb193af7d6p-1, 0x1.5f82698ebf04dp-1, +0x1.cbba043b97741p-1, 0x1.daca3e83b5948p-3, 0x1.9debc5cf3bd79p-1, 0x1.7fa3c876ff479p-1, +0x1.2f2581025e4bp-5, 0x1.7db777e2fb6efp-3, 0x1.168c20722d184p-1, 0x1.98122d6330246p-1, +0x1.25637dc24ac7p-2, 0x1.25948e3e4b292p-1, 0x1.fde8d133fbd1ap-3, 0x1.fd8bab3bfb175p-1, +0x1.5dbcc1d2bb798p-3, 0x1.fc0e2683f81c5p-3, 0x1.1185e442230bdp-4, 0x1.9b682d8336d06p-6, +0x1.0cd399c619a73p-1, 0x1.5844a7f6b0895p-1, 0x1.291851ea5230ap-2, 0x1.37aa9cca6f554p-2, +0x1.9768fb772ed1fp-1, 0x1.3b13fc6a7628p-2, 0x1.5d766cc2baecep-2, 0x1.bc1cf0277839ep-1, +0x1.47d038d68fa07p-1, 0x1.3d28bb127a517p-2, 0x1.1346fc82268ep-1, 0x1.36d70d726dae2p-2, +0x1.a0392c6b40726p-1, 0x1.d60b5c23ac16cp-2, 0x1.faedf047f5dbep-1, 0x1.6bf330a2d7e66p-1, +0x1.61b83db2c3708p-1, 0x1.98d9b61731b37p-1, 0x1.d72df22bae5bep-2, 0x1.74aa95c2e9553p-1, +0x1.f847940ff08f3p-1, 0x1.118cc40223199p-8, 0x1.0cbcc32219798p-1, 0x1.15f2a5da2be55p-2, +0x1.27b7a7c64f6f5p-1, 0x1.8c36f76f186dfp-1, 0x1.1109fc4a2214p-2, 0x1.7f26d83afe4dbp-1, +0x1.67502202cea04p-6, 0x1.556b7562aad6fp-2, 0x1.8c0219a718043p-1, 0x1.180e1ad6301c3p-1, +0x1.7d315202fa62ap-8, 0x1.047214c208e43p-4, 0x1.b3e3693b67c6dp-1, 0x1.9a635e1b34c6cp-1, +0x1.7c30819af861p-2, 0x1.8a7a7e7314f5p-3, 0x1.56804e42ad00ap-1, 0x1.7a1e6902f43cdp-7, +0x1.0132fd260266p-1, 0x1.a71d2b034e3a5p-3, 0x1.42a800ba855p-2, 0x1.42d8531a85b0ap-2, +0x1.54ccf8d6a999fp-1, 0x1.3883e1427107cp-2, 0x1.abeb458357d69p-6, 0x1.6d0a6d0ada14ep-2, +0x1.a8dd35a351ba7p-4, 0x1.f1eca68be3d95p-2, 0x1.597e6242b2fccp-4, 0x1.6b19d622d633bp-4, +0x1.f632d99bec65bp-2, 0x1.37ec8f6a6fd92p-1, 0x1.70b91b62e1723p-2, 0x1.1688a4822d115p-4, +0x1.88470db3108e2p-2, 0x1.40e18bda81c31p-1, 0x1.a1f7eccb43efep-1, 0x1.9ebc0fd33d782p-2, +0x1.eb97468bd72e9p-1, 0x1.2dfa066e5bf41p-1, 0x1.e76c22bfced84p-1, 0x1.ee91a92fdd235p-1, +0x1.4e8849069d109p-1, 0x1.9b4f8bfb369f1p-1, 0x1.88f5074711ea1p-1, 0x1.94113a8328227p-6, +0x1.fdee2b97fbdc5p-1, 0x1.beeaab0b7dd55p-2, 0x1.2890378251207p-5, 0x1.fe425173fc84ap-2, +0x1.493ca04a92794p-1, 0x1.67ba07aacf741p-2, 0x1.a08d5247411aap-1, 0x1.3c13323a78266p-2, +0x1.501ef476a03dfp-1, 0x1.adecac735bd96p-1, 0x1.548ecfa2a91dap-1, 0x1.853a9b2f0a753p-1, +0x1.4dc5ff6a9b8cp-2, 0x1.7fbe9beaff7d3p-1, 0x1.b29dd5f3653bbp-1, 0x1.a1fc6c8343f8ep-1, +0x1.6f5656aadeacbp-2, 0x1.abe98e8357d32p-3, 0x1.c4cd8113899bp-1, 0x1.7bceb22ef79d6p-1, +0x1.abdbef7b57b7ep-1, 0x1.66c56ddacd8aep-1, 0x1.2cb2e8525965dp-3, 0x1.977336032ee67p-1, +0x1.297ee88a52fddp-2, 0x1.94c6e683298ddp-4, 0x1.8604df2f0c09cp-1, 0x1.e347bd4fc68f8p-1, +0x1.cde868cb9bd0dp-1, 0x1.0ef9e6761df3dp-1, 0x1.efe84723dfd09p-1, 0x1.cbd6945f97ad3p-1, +0x1.ee6f3bfbdcde7p-1, 0x1.38a54c02714aap-8, 0x1.95ef7a2b2bdefp-2, 0x1.37abdc426f57cp-1, +0x1.6c9c9cdad9394p-2, 0x1.ae143d635c288p-3, 0x1.d5b5755fab6afp-1, 0x1.9b50b80336a17p-7, +0x1.971bbcc32e378p-5, 0x1.2a44450254889p-1, 0x1.8ba7de0f174fcp-1, 0x1.80a977030152fp-2, +0x1.5405c1d2a80b8p-2, 0x1.3e45b3fe7c8b6p-1, 0x1.8944a01312894p-3, 0x1.61ae0c3ec35c2p-1, +0x1.a94017a352803p-1, 0x1.38f548a271ea9p-4, 0x1.baf97cd375f3p-2, 0x1.551c071aaa381p-1, +0x1.8de416f31bc83p-1, 0x1.28a9787e5152fp-1, 0x1.d91e7a3bb23cfp-2, 0x1.151c59a22a38bp-4, +0x1.5b425552b684bp-1, 0x1.ca50712394a0ep-3, 0x1.7ad22002f5a44p-7, 0x1.292abe1a52558p-1, +0x1.818e02bf031cp-1, 0x1.f5d38fa3eba72p-1, 0x1.ea02a4f3d4055p-2, 0x1.6ffd3ebadffa8p-1, +0x1.f844da3bf089bp-1, 0x1.bff90f8f7ff22p-1, 0x1.4f5235f29ea47p-2, 0x1.5d26514aba4cap-2, +0x1.5bf0f742b7e1fp-4, 0x1.f57a4163eaf48p-3, 0x1.6a00d712d401bp-2, 0x1.13bf6ad2277edp-3, +0x1.a7a2d55b4f45bp-1, 0x1.02a1265205425p-3, 0x1.054496360a893p-1, 0x1.4696d9028d2dbp-3, +0x1.7eedfd96fddcp-1, 0x1.6795be3acf2b8p-1, 0x1.b353c28366a78p-1, 0x1.282e1536505c3p-1, +0x1.8eb467531d68dp-1, 0x1.21a101d24342p-2, 0x1.f5287133ea50ep-3, 0x1.1c987e423931p-1, +0x1.b979f96b72f3fp-1, 0x1.69d9596ad3b2bp-1, 0x1.3f3c09767e781p-1, 0x1.14bc4eba2978ap-1, +0x1.dc6d75b7b8dafp-1, 0x1.452751fa8a4eap-1, 0x1.ef386683de70dp-4, 0x1.5dfb7872bbf6fp-1, +0x1.3afae19a75f5cp-1, 0x1.32e85f4a65d0cp-1, 0x1.9bf16e5337e2ep-2, 0x1.333fbbd6667f7p-1, +0x1.e5c2ddb3cb85cp-2, 0x1.75a1d226eb43ap-1, 0x1.e1d2e47bc3a5dp-1, 0x1.1e5f8dc23cbf2p-1, +0x1.f300627fe600cp-1, 0x1.2da6a0025b4d4p-2, 0x1.634f6876c69edp-1, 0x1.9aa337d735467p-1, +0x1.aef733335dee6p-2, 0x1.a24ffaa3449ffp-3, 0x1.ec48ee17d891ep-1, 0x1.59a65cb2b34ccp-3, +0x1.d029bce7a0538p-1, 0x1.9f9cb0973f396p-1, 0x1.7e97ac62fd2f6p-1, 0x1.5ede2436bdbc5p-1, +0x1.83698c0306d32p-4, 0x1.fbe1c8aff7c39p-1, 0x1.edda89d3dbb51p-3, 0x1.e9e72aebd3ce5p-1, +0x1.65bb221acb764p-1, 0x1.bab2abeb75655p-1, 0x1.fd46f343fa8dep-2, 0x1.422897ce84513p-1, +0x1.ffb3fbc3ff67fp-2, 0x1.3c8a867279151p-1, 0x1.4048207a80904p-2, 0x1.d6a6fbe3ad4dfp-4, +0x1.bdcb96f37b973p-3, 0x1.6e1cc76adc399p-1, 0x1.6e149b52dc293p-1, 0x1.62545496c4a8bp-1, +0x1.c77d331b8efa6p-2, 0x1.4fe77fca9fcfp-1, 0x1.0167c4aa02cf9p-2, 0x1.ad7df8135afbfp-2, +0x1.e6bacfcfcd75ap-1, 0x1.e4034acbc8069p-1, 0x1.c588cf738b11ap-3, 0x1.7c6cd2caf8d9ap-2, +0x1.325d25c264ba5p-3, 0x1.76ac87c2ed591p-3, 0x1.14a00092294p-1, 0x1.cc1065439820dp-5, +0x1.fd47d28bfa8fap-1, 0x1.266f59e24cdebp-2, 0x1.7b9f2a8af73e5p-1, 0x1.6da82042db504p-4, +0x1.1e32eb3a3c65dp-2, 0x1.f715ccffee2bap-1, 0x1.79c2ef02f385ep-5, 0x1.f4d497b7e9a93p-1, +0x1.b1c878eb6390fp-1, 0x1.163fa8922c7f5p-1, 0x1.36fd2f826dfa6p-1, 0x1.6344ed92c689ep-2, +0x1.4b28bc0296518p-3, 0x1.d7213fc3ae428p-1, 0x1.d8eeac8bb1dd6p-2, 0x1.847a297b08f45p-2, +0x1.453e072a8a7c1p-1, 0x1.6a2fc652d45f9p-3, 0x1.248b4a8249169p-4, 0x1.47e505a28fca1p-4, +0x1.aa73716354e6ep-1, 0x1.4a8a974a95153p-2, 0x1.ff77397bfeee7p-2, 0x1.912e412f225c8p-1, +0x1.12912cda25226p-2, 0x1.711dd09ae23bap-1, 0x1.3d92aa427b255p-3, 0x1.abbfbfc3577f8p-2, +0x1.cec8f28b9d91ep-1, 0x1.6404ab22c8095p-1, 0x1.e541cc6bca83ap-2, 0x1.cc10c51398219p-1, +0x1.f73c5813ee78bp-1, 0x1.b900430372008p-3, 0x1.f9c5c91bf38b9p-1, 0x1.0cab9b5a19573p-2, +0x1.955776f32aaefp-3, 0x1.161f80822c3fp-5, 0x1.eca99593d9533p-3, 0x1.71e56a42e3cadp-5, +0x1.27a1a09a4f434p-1, 0x1.b22794e7644f3p-1, 0x1.91819ae323033p-2, 0x1.7a6bcf9ef4d7ap-1, +0x1.8948d4a71291bp-1, 0x1.b53823b76a704p-1, 0x1.e54722c3ca8e4p-4, 0x1.9d0db79b3a1b7p-2, +0x1.f882a983f1055p-6, 0x1.84e936b309d27p-3, 0x1.ef06f903de0dfp-2, 0x1.ba3786af746f1p-1, +0x1.067f99520cff3p-1, 0x1.f73f193fee7e3p-1, 0x1.4b65c7da96cb9p-1, 0x1.8fc82fc31f906p-1, +0x1.685ce9d6d0b9dp-1, 0x1.9aca726b3594ep-1, 0x1.96a03e832d408p-3, 0x1.3725dc626e4bcp-1, +0x1.fd9e3b13fb3c7p-2, 0x1.5848f5d6b091fp-1, 0x1.0336a172066d4p-1, 0x1.ec16eb33d82ddp-2, +0x1.c68906978d121p-1, 0x1.f9f8d51bf3f1bp-2, 0x1.7c614346f8c28p-1, 0x1.5ef722a2bdee4p-4, +0x1.0e5e62961cbccp-1, 0x1.f78ba8abef175p-1, 0x1.0bf4ebe217e9dp-3, 0x1.b000198360003p-4, +0x1.a9b33d9353668p-1, 0x1.0bbe086a177c1p-1, 0x1.b06bd2cf60d7ap-1, 0x1.32fc123665f82p-1, +0x1.81ec584303d8bp-2, 0x1.ed14b727da297p-1, 0x1.82ee040305dc1p-9, 0x1.a17482db42e9p-2, +0x1.393c134272782p-3, 0x1.f20cd50be419bp-2, 0x1.15e390322bc72p-2, 0x1.54ce9e26a99d4p-1, +0x1.e08b078bc1161p-2, 0x1.d6578ff3acaf2p-1, 0x1.c92d9bcb925b3p-2, 0x1.6289b662c5137p-3, +0x1.7122025ae244p-1, 0x1.4a3edd86947dcp-1, 0x1.8fc849fb1f909p-1, 0x1.bfc47f837f89p-3, +0x1.450fa6b28a1f5p-2, 0x1.25fdd6da4bfbbp-2, 0x1.65fc957acbf93p-1, 0x1.a44367c34886dp-3, +0x1.8ffb55fb1ff6bp-1, 0x1.c4bbb17b89776p-2, 0x1.29df7c8a53bfp-2, 0x1.3cb3711a7966ep-2, +0x1.b3d302d367a6p-2, 0x1.afd9f27b5fb3ep-2, 0x1.a8b3777b5166fp-2, 0x1.07397df20e73p-2, +0x1.e3ab01abc756p-1, 0x1.098b1d1213164p-2, 0x1.b698d12f6d31ap-1, 0x1.49425b929284bp-2, +0x1.c76916c38ed23p-3, 0x1.b81bbf3370378p-1, 0x1.755b6f36eab6ep-1, 0x1.8052950300a53p-2, +0x1.62445372c488ap-2, 0x1.34dd300269ba6p-11, 0x1.4f7e8a429efd1p-5, 0x1.a167ad7f42cf6p-1, +0x1.d6a4c73fad499p-1, 0x1.f31d6d13e63aep-2, 0x1.fa0a1b17f4143p-1, 0x1.47c6c9968f8d9p-1, +0x1.0f3650321e6cap-3, 0x1.89d2651313a4dp-1, 0x1.b7b7e9776f6fdp-1, 0x1.ccaaced39955ap-2, +0x1.cd1507c39a2a1p-5, 0x1.1db47eee3b69p-1, 0x1.4f66415a9ecc8p-1, 0x1.accca67759995p-1, +0x1.257a80024af5p-13, 0x1.e455ff9fc8acp-1, 0x1.2c997c025933p-3, 0x1.b3f7b22367ef6p-2, +0x1.7885f1b2f10bep-2, 0x1.1f801ac23f003p-1, 0x1.5d98980abb313p-1, 0x1.3fdbf5027fb7fp-2, +0x1.a445a94b488b5p-1, 0x1.1431693a2862dp-1, 0x1.448f284a891e5p-1, 0x1.61feef82c3fdep-5, +0x1.989a50d33134ap-2, 0x1.73d52efae7aa6p-2, 0x1.ac9272fb5924ep-2, 0x1.7d6f5222fadeap-1, +0x1.746f9d92e8df4p-2, 0x1.d6824443ad049p-2, 0x1.1ed6ff9e3daep-1, 0x1.21b92c0a43726p-2, +0x1.e4cfd8afc99fbp-1, 0x1.18e11ab631c23p-1, 0x1.d8a35f9bb146cp-1, 0x1.44eb65c289d6dp-4, +0x1.4566ff8a8acep-2, 0x1.905b490f20b69p-1, 0x1.0ef2d4221de5bp-1, 0x1.7f09a082fe134p-2, +0x1.5c1f8ff2b83f2p-2, 0x1.796455e2f2c8bp-3, 0x1.b145dad3628bbp-3, 0x1.5c443f4ab8888p-2, +0x1.0abc54521578bp-3, 0x1.6eefab6adddf5p-2, 0x1.881df8b7103bfp-1, 0x1.fde41be3fbc83p-2, +0x1.d6f7f077adefep-1, 0x1.cb6d218396da4p-2, 0x1.9ee008733dc01p-1, 0x1.7b3d99c2f67b3p-1, +0x1.f9e7f9fbf3cffp-1, 0x1.c6de617b8dbccp-2, 0x1.915d88bb22bb1p-1, 0x1.8c6a44c318d49p-2, +0x1.9d59c83b3ab39p-1, 0x1.9e9b08d33d361p-3, 0x1.0e91d2121d23ap-3, 0x1.5e465c12bc8ccp-3, +0x1.52e7e45aa5cfdp-1, 0x1.627b7422c4f6fp-1, 0x1.d0dc5a13a1b8bp-2, 0x1.37b7bd066f6f8p-1, +0x1.ed723b53dae47p-3, 0x1.8223194b04463p-2, 0x1.605529bec0aa5p-1, 0x1.1e100e9a3c202p-1, +0x1.45b356c28b66bp-3, 0x1.bd1ff7837a3ffp-3, 0x1.dd94dedbbb29cp-1, 0x1.fef93b5bfdf27p-2, +0x1.9b4226b336845p-2, 0x1.279956324f32bp-3, 0x1.ad9ebd535b3d8p-1, 0x1.1050287220a05p-1, +0x1.015e2b4602bc5p-1, 0x1.35bcb6066b797p-1, 0x1.e846cc03d08dap-6, 0x1.b0ac377361587p-2, +0x1.b7346c436e68ep-5, 0x1.ae223ed35c448p-1, 0x1.4e4ed5e29c9dbp-3, 0x1.55b40bc2ab681p-5, +0x1.2322df1a4645cp-2, 0x1.e4f13e37c9e28p-1, 0x1.b720c6436e419p-2, 0x1.7759be42eeb38p-4, +0x1.326001a264cp-3, 0x1.1f34d7a63e69bp-1, 0x1.0cf99d9a19f34p-2, 0x1.9f7fe4c33effdp-1, +0x1.0360978a06c13p-2, 0x1.6eeafbd6ddd5fp-1, 0x1.ae6f438b5cde8p-2, 0x1.fa19b53bf4337p-2, +0x1.7fe443c2ffc88p-4, 0x1.bc665c2378cccp-4, 0x1.b1ce9343639d2p-5, 0x1.02d2bc5a05a58p-2, +0x1.4da992ca9b532p-2, 0x1.f8b1c813f1639p-1, 0x1.80e5fbdb01cbfp-1, 0x1.7475dcbee8ebcp-1, +0x1.0a60767214c0fp-3, 0x1.2e84b92a5d097p-1, 0x1.098c0a5a13181p-2, 0x1.43f648e287ec9p-1, +0x1.9105bcb3220b8p-3, 0x1.2810771a5020fp-2, 0x1.c4c649c3898c9p-5, 0x1.fed2d7d3fda5bp-3, +0x1.08a9e9821153dp-3, 0x1.bf8068537f00dp-3, 0x1.2a1fed62543fep-2, 0x1.a777d3db4eefap-2, +0x1.53456122a68acp-3, 0x1.70a059d2e140bp-1, 0x1.02a721b6054e4p-1, 0x1.42d2b16a85a56p-2, +0x1.1faa62ea3f54cp-2, 0x1.8923f0831247ep-1, 0x1.03a4f5d20749fp-3, 0x1.11857d3e230bp-1, +0x1.f01dd8b3e03bbp-2, 0x1.1820df3e3041cp-1, 0x1.d24afb03a495fp-6, 0x1.280b74d25016fp-1, +0x1.4fadaac29f5b5p-1, 0x1.4d7a08629af41p-4, 0x1.a974d2ff52e9ap-1, 0x1.f6827427ed04fp-1, +0x1.130848e226109p-4, 0x1.2a5aced654b5ap-1, 0x1.6af850e2d5f0ap-1, 0x1.93e49af327c93p-3, +0x1.637e1ff2c6fc4p-3, 0x1.efbe5613df7cbp-1, 0x1.a8ef6f9f51deep-1, 0x1.7a41ee5af483ep-2, +0x1.078d233a0f1a4p-2, 0x1.c53bd43b8a77bp-1, 0x1.3cd5ad2279ab6p-1, 0x1.8be217fb17c43p-2, +0x1.a8df728351beep-4, 0x1.d1e5a3d3a3cb4p-1, 0x1.99acf5ef3359fp-1, 0x1.13da8d3227b52p-2, +0x1.4285fda6850cp-1, 0x1.38a82f4271506p-2, 0x1.2b569f4e56ad4p-1, 0x1.d25b2f1ba4b66p-1, +0x1.2bc0412257808p-4, 0x1.6c3fdcc6d87fcp-1, 0x1.c7c158ab8f82bp-2, 0x1.1d86f47e3b0dfp-1, +0x1.08c178021182fp-2, 0x1.e4e6085bc9cc1p-2, 0x1.1649a5322c935p-3, 0x1.d40e66c3a81cdp-1, +0x1.1c22453e38449p-1, 0x1.ef073c4fde0e8p-1, 0x1.ca90dae79521bp-1, 0x1.3e834e5a7d06ap-1, +0x1.19620b2232c41p-1, 0x1.35892bc66b125p-1, 0x1.a37c751746f8fp-1, 0x1.72419322e4832p-1, +0x1.254781d64a8fp-1, 0x1.4c6be4b698d7dp-1, 0x1.7b145262f628ap-4, 0x1.a90e1377521c2p-1, +0x1.11a7b8ee234f7p-1, 0x1.6c38376ed8707p-1, 0x1.bbfc7dc377f9p-3, 0x1.46c3a73e8d875p-1, +0x1.3e1ddb3e7c3bbp-1, 0x1.1582ab822b055p-6, 0x1.d0b0eddba161ep-1, 0x1.0147b1c2028f6p-2, +0x1.4a005a029400bp-2, 0x1.f80f1a4bf01e3p-2, 0x1.4bfc1ff297f84p-3, 0x1.94f06a4b29e0dp-2, +0x1.a11da7a3423b5p-3, 0x1.36dfb4526dbf7p-1, 0x1.e7ff29a3cffe5p-1, 0x1.d9504bd3b2a09p-2, +0x1.4a95c402952b9p-4, 0x1.6c8c9762d9193p-4, 0x1.816d195302da3p-2, 0x1.4574fdbe8aeap-1, +0x1.c98cf3839319ep-5, 0x1.168ecf1a2d1dap-2, 0x1.07f0982a0fe13p-2, 0x1.35fada5e6bf5bp-1, +0x1.c0d0935781a12p-1, 0x1.3ba60962774c1p-4, 0x1.5078dafaa0f1bp-2, 0x1.cc302a5398605p-2, +0x1.73e0a5e2e7c15p-1, 0x1.af3def935e7bep-2, 0x1.1e4c513a3c98ap-2, 0x1.0b10bd9a16218p-2, +0x1.0f5cbcd21eb98p-3, 0x1.fc4a9023f8952p-2, 0x1.cc4c060f98981p-1, 0x1.81f50a7303ea1p-1, +0x1.06d15d6e0da2cp-1, 0x1.9cfcf3e739f9ep-1, 0x1.4c71aa0298e35p-8, 0x1.abd18a6f57a31p-1, +0x1.320902126412p-2, 0x1.565fad42acbf6p-3, 0x1.d926fe43b24ep-3, 0x1.014beaf60297dp-1, +0x1.8c779fa318ef4p-1, 0x1.7923a4c2f2475p-3, 0x1.edf410dfdbe82p-1, 0x1.b5ca58236b94bp-1, +0x1.17b4f8422f69fp-2, 0x1.5d553b12baaa7p-2, 0x1.f67eabbbecfd5p-2, 0x1.50e696b2a1cd3p-2, +0x1.39f2051673e41p-1, 0x1.7f37a1f6fe6f4p-1, 0x1.de6e25b7bcdc5p-1, 0x1.f58530d3eb0a6p-2, +0x1.a6ac63234d58cp-1, 0x1.0d5526621aaa5p-2, 0x1.e0daad97c1b56p-1, 0x1.1a8d0902351a1p-1, +0x1.5e498afabc931p-1, 0x1.c00358c38006bp-3, 0x1.a01567cf402adp-1, 0x1.a220ba2f44417p-1, +0x1.6e261e42dc4c4p-1, 0x1.6c616ddad8c2ep-1, 0x1.2415c4a2482b9p-1, 0x1.d3ddeec3a7bbep-3, +0x1.095e61be12bccp-1, 0x1.26aea7f64d5d5p-1, 0x1.064830e20c906p-4, 0x1.a262e2cb44c5cp-1, +0x1.7c469346f88d2p-1, 0x1.2e258b625c4b1p-2, 0x1.475d9b7a8ebb3p-2, 0x1.08be32e6117c6p-1, +0x1.eab75dc3d56ecp-2, 0x1.2345bd32468b8p-2, 0x1.7d111612fa223p-2, 0x1.81362b03026c5p-1, +0x1.404d7c22809bp-1, 0x1.b9c7e0e7738fcp-1, 0x1.4d4bb2e29a976p-4, 0x1.e8fe04e3d1fc1p-3, +0x1.38ff82da71ffp-1, 0x1.02f3820205e7p-6, 0x1.750219a2ea043p-1, 0x1.bf57cbf37eaf9p-2, +0x1.1d845e8a3b08cp-2, 0x1.55dcc736abb99p-1, 0x1.fa38eefbf471ep-1, 0x1.ed0bba3fda177p-1, +0x1.c5dd9d6b8bbb4p-1, 0x1.9a4e56cb349cbp-1, 0x1.8f2c746f1e58fp-1, 0x1.3403bbaa68077p-1, +0x1.06afc4a20d5f9p-1, 0x1.6684721acd08ep-2, 0x1.a8fb375b51f67p-1, 0x1.00e2660201c4dp-5, +0x1.d9f0e103b3e1cp-1, 0x1.c9c43d7b93888p-1, 0x1.b271092b64e21p-1, 0x1.56377446ac6efp-1, +0x1.835c0ca306b82p-3, 0x1.587f5b92b0febp-3, 0x1.7bd69ca2f7ad4p-3, 0x1.5632b20aac656p-1, +0x1.cf856afb9f0adp-2, 0x1.1d7e32323afc6p-1, 0x1.aed1ba1b5da37p-2, 0x1.40818d0281032p-4, +0x1.ae8c26335d185p-2, 0x1.0112536a0224ap-1, 0x1.449f65b2893edp-2, 0x1.04595f0208b2cp-5, +0x1.0929ef7a1253ep-1, 0x1.751cc782ea399p-5, 0x1.dfe2f7dbbfc5fp-2, 0x1.97ec1ebf2fd84p-1, +0x1.6d2e93b2da5d2p-1, 0x1.d454d5cba8a9bp-2, 0x1.84f7d8ff09efbp-1, 0x1.330c311a66186p-1, +0x1.08f1835a11e3p-2, 0x1.14244d6a2848ap-1, 0x1.9c3fb303387f6p-3, 0x1.8b28865316511p-1, +0x1.c76686778ecd1p-1, 0x1.00b241c201648p-5, 0x1.9b36acb3366d6p-1, 0x1.a157677742aedp-1, +0x1.d9cf6197b39ecp-1, 0x1.4da7b5da9b4f7p-1, 0x1.ef1db773de3b7p-2, 0x1.d53325e3aa665p-4, +0x1.a3c78cbf478f2p-1, 0x1.568482e2ad09p-1, 0x1.90d916c721b23p-1, 0x1.171484722e291p-2, +0x1.d00ad453a015bp-3, 0x1.a107cf43420fap-3, 0x1.6734e7b2ce69dp-2, 0x1.4b48c82e96919p-1, +0x1.6954473ad2a89p-1, 0x1.55ea26b2abd45p-1, 0x1.5b8e5e1eb71ccp-1, 0x1.c9f8dad393f1bp-3, +0x1.6d3bf32eda77ep-1, 0x1.2dff68225bfedp-3, 0x1.4d4aae029a956p-6, 0x1.b4d50dbb69aa2p-2, +0x1.35aa44f26b549p-1, 0x1.8f622e6f1ec46p-1, 0x1.aed6fe835daep-6, 0x1.ba23069f74461p-1, +0x1.470cf7aa8e19fp-2, 0x1.d21a92d3a4352p-3, 0x1.454b8cee8a972p-1, 0x1.abb4092357681p-3, +0x1.092391a212472p-2, 0x1.c104733b8208ep-2, 0x1.888d3783111a7p-6, 0x1.7984a992f3095p-3, +0x1.714f7ba2e29efp-4, 0x1.03d3457607a69p-1, 0x1.320f1e42641e4p-2, 0x1.d1f17c33a3e3p-1, +0x1.695f2162d2be4p-3, 0x1.4f052f429e0a6p-4, 0x1.75eef9b2ebddfp-3, 0x1.9cb4fadb3969fp-2, +0x1.24453372488a6p-2, 0x1.11163246222c6p-1, 0x1.9a3459833468bp-5, 0x1.fb76e0f7f6edcp-1, +0x1.9c0163e33802cp-3, 0x1.7531a3b6ea634p-1, 0x1.b7d45ea36fa8cp-3, 0x1.d43c4c27a878ap-1, +0x1.c0b17dc38163p-1, 0x1.e17db463c2fb7p-3, 0x1.5d4da602ba9b5p-2, 0x1.ecb78563d96f1p-2, +0x1.f066e203e0cdcp-7, 0x1.783b15eaf0763p-2, 0x1.60fd929ac1fb2p-2, 0x1.56902ebaad206p-2, +0x1.30a42faa61486p-1, 0x1.f5ca563feb94bp-1, 0x1.163519aa2c6a3p-1, 0x1.b535f87f6a6bfp-1, +0x1.ac991fb359324p-2, 0x1.2279836644f3p-1, 0x1.39722e0272e46p-5, 0x1.04767f5208edp-1, +0x1.326646e264cc9p-4, 0x1.593d640ab27adp-2, 0x1.accff703599ffp-2, 0x1.0149226a02924p-2, +0x1.acfeafdb59fd6p-2, 0x1.33e3b9ee67c77p-1, 0x1.4eff0ea29dfe2p-1, 0x1.68a1f1a6d143ep-1, +0x1.13e7b0d227cf6p-3, 0x1.68a2543ad144bp-1, 0x1.6418d29ac831ap-1, 0x1.57f48a5aafe91p-2, +0x1.bba7efdb774fep-2, 0x1.d20dea43a41bdp-1, 0x1.006d22a200da4p-2, 0x1.3d0aeb5a7a15dp-2, +0x1.29b55d72536acp-3, 0x1.2edd64525dbadp-1, 0x1.94e1385f29c27p-1, 0x1.48bbcb9291779p-3, +0x1.eafaef47d5f5ep-1, 0x1.158006b22b001p-3, 0x1.faee1483f5dc3p-2, 0x1.1b9f1eee373e4p-1, +0x1.d952bf43b2a58p-4, 0x1.3ac23e8275848p-5, 0x1.a1aa2ed343546p-2, 0x1.1176e7c222eddp-1, +0x1.3625a7526c4b5p-1, 0x1.c8d8749b91b0fp-2, 0x1.5ed67102bdacep-5, 0x1.5c72702eb8e4ep-1, +0x1.910aec532215ep-1, 0x1.d8aac52bb1559p-2, 0x1.dd170163ba2ep-1, 0x1.9e2910f33c522p-3, +0x1.01c8e4020391dp-4, 0x1.2c161002582c2p-1, 0x1.d02c35e3a0587p-1, 0x1.94cc22d329984p-3, +0x1.2970c87252e19p-2, 0x1.3445087e688a1p-1, 0x1.112d4de2225aap-1, 0x1.728c5c26e518cp-1, +0x1.0652f2be0ca5ep-1, 0x1.9163df3322c7cp-1, 0x1.111d1d42223a4p-5, 0x1.50c04a1aa1809p-1, +0x1.8082870301051p-2, 0x1.a5f30a334be61p-1, 0x1.a2ef3cff45de8p-1, 0x1.5678658aacf0dp-2, +0x1.eb530bdfd6a61p-1, 0x1.40cc8e8281992p-2, 0x1.c6db51b78db6ap-1, 0x1.33eb1e2267d64p-4, +0x1.6824d652d049bp-2, 0x1.2f60d23a5ec1ap-2, 0x1.37f44b8a6fe89p-1, 0x1.ea38127bd4702p-1, +0x1.7c1ca36af8394p-1, 0x1.4de1b29a9bc36p-1, 0x1.46aa82a68d55p-1, 0x1.0d278fba1a4f2p-1, +0x1.d1b8a963a3715p-4, 0x1.23c1840647831p-1, 0x1.74b1d3f6e963ap-1, 0x1.69c0c6c2d3819p-3, +0x1.3f5e50127ebcap-3, 0x1.44de09da89bc1p-1, 0x1.7f4674cafe8cfp-2, 0x1.c91ff07b923fep-2, +0x1.e48c4953c9189p-3, 0x1.d0d0884ba1a11p-1, 0x1.5c715192b8e2ap-3, 0x1.7f760512feec1p-1, +0x1.6234677ac468dp-1, 0x1.a0b898e341713p-3, 0x1.a06c9e5b40d94p-2, 0x1.13ad57e2275abp-4, +0x1.c4260d03884c2p-6, 0x1.cc9630a3992c6p-3, 0x1.9b63bb8336c77p-2, 0x1.f9743c4bf2e88p-1, +0x1.138bd36a2717ap-1, 0x1.291a5eea5234cp-2, 0x1.ff1a00c3fe34p-5, 0x1.c79e3e978f3c8p-1, +0x1.2c3d9896587b3p-1, 0x1.57e5eb96afcbdp-1, 0x1.b1d6510f63acap-1, 0x1.50b477faa168fp-2, +0x1.4b8f3c62971e8p-2, 0x1.f101a76be2035p-2, 0x1.b581cbbb6b039p-1, 0x1.bffd66bb7ffadp-2, +0x1.c4257b83884afp-5, 0x1.2a339fae54674p-1, 0x1.3a6ee50e74dddp-1, 0x1.b067af0360cf6p-3, +0x1.bc46a613788d5p-3, 0x1.fa121f77f4244p-1, 0x1.50a9e3fea153cp-1, 0x1.d06977b3a0d2fp-2, +0x1.cae2a7bf95c55p-1, 0x1.a7c638634f8c7p-1, 0x1.9eab03b33d56p-3, 0x1.2d170f365a2e2p-1, +0x1.fe8bd303fd17ap-6, 0x1.37e1101a6fc22p-1, 0x1.4f8cba329f197p-1, 0x1.e158f043c2b1ep-5, +0x1.ab069c43560d4p-1, 0x1.d3e97f43a7d3p-5, 0x1.789cb4c2f1397p-5, 0x1.7d24df5afa49cp-2, +0x1.63978ed2c72f2p-2, 0x1.bbdb5ac377b6bp-4, 0x1.0c615c8218c2cp-2, 0x1.de095fffbc12cp-1, +0x1.8f6156f31ec2bp-1, 0x1.c037fa63806ffp-4, 0x1.0cc737fa198e7p-2, 0x1.a947a903528f5p-4, +0x1.3087d302610fap-1, 0x1.df2b3da3be568p-4, 0x1.1527a87e2a4f5p-1, 0x1.4cca2abe99945p-1, +0x1.66190762cc321p-1, 0x1.3e5a36327cb47p-3, 0x1.b8e4167f71c83p-1, 0x1.d52ab0ebaa556p-1, +0x1.26a2b4024d457p-3, 0x1.098dfa7a131bfp-1, 0x1.7abed982f57dbp-2, 0x1.48b54bc2916a9p-5, +0x1.62a865bac550dp-2, 0x1.250a2dae4a146p-1, 0x1.41a263f28344cp-1, 0x1.829122eb05224p-2, +0x1.73acf712e759fp-3, 0x1.225e3c4a44bc8p-2, 0x1.bebc40f37d788p-2, 0x1.fc768203f8edp-7, +0x1.5cdb6c32b9b6ep-2, 0x1.edcfd78bdb9fbp-2, 0x1.8d08936b1a112p-2, 0x1.60397d82c073p-1, +0x1.2e6357225cc6bp-1, 0x1.4cb4f7f69969fp-1, 0x1.3e42dd827c85cp-1, 0x1.7b895c22f712cp-2, +0x1.84bbf7430977fp-1, 0x1.c4a6797f894cfp-1, 0x1.e5db4663cbb69p-2, 0x1.6a87948ad50f3p-2, +0x1.17c260022f84cp-10, 0x1.02a975820552fp-6, 0x1.06fa80020df5p-8, 0x1.66a4e892cd49dp-1, +0x1.5eaf64e2bd5edp-3, 0x1.baf20b7f75e41p-1, 0x1.3bcf997a779f3p-1, 0x1.42a90c7285522p-2, +0x1.89000beb12001p-2, 0x1.f92f063ff25e1p-1, 0x1.6bbfb5ead77f7p-2, 0x1.75d438d2eba87p-1, +0x1.1e3933ea3c726p-1, 0x1.f7823eebef048p-1, 0x1.b8e6524371ccap-4, 0x1.7b2471b2f648ep-1, +0x1.1162ba1a22c57p-2, 0x1.167aeac22cf5dp-1, 0x1.83164bbb062c9p-1, 0x1.371f13266e3e2p-1, +0x1.ac5ad10358b5ap-6, 0x1.266a55b24cd4bp-3, 0x1.2eb1214a5d624p-2, 0x1.3bc62daa778c6p-1, +0x1.964f8d632c9f2p-1, 0x1.d59b6e27ab36ep-1, 0x1.f98adbbbf315bp-1, 0x1.1b0b84a236171p-1, +0x1.9a41e7a33483dp-1, 0x1.d8f0fdd3b1e2p-2, 0x1.d04f4ee7a09eap-1, 0x1.9acdc8d3359b9p-1, +0x1.e91b952bd2373p-2, 0x1.d25d43e7a4ba8p-1, 0x1.0172b16602e56p-1, 0x1.4c39a3d298734p-1, +0x1.8d4f4f631a9eap-1, 0x1.ea1256e3d424bp-4, 0x1.ed8e2a0bdb1c5p-1, 0x1.473d55628e7abp-3, +0x1.b38a88c367151p-4, 0x1.46dc0a028db81p-2, 0x1.c7a38e2b8f472p-1, 0x1.54aa8506a9551p-1, +0x1.35e087d26bc11p-2, 0x1.fec05873fd80bp-1, 0x1.9f9ded6b3f3bep-2, 0x1.23a1a0f647434p-1, +0x1.153b43362a768p-1, 0x1.4b9509b2972a1p-3, 0x1.6b02d062d605ap-3, 0x1.229e19be453c3p-1, +0x1.38ffafb271ff6p-2, 0x1.e432897bc8651p-2, 0x1.79911d92f3224p-3, 0x1.967b29c32cf65p-4, +0x1.8f6965cb1ed2dp-2, 0x1.5fbc8c72bf792p-3, 0x1.4ddae9da9bb5dp-1, 0x1.87da6a130fb4dp-3, +0x1.4467a20688cf4p-1, 0x1.1e2a38c23c547p-1, 0x1.fcc4635bf988cp-1, 0x1.c7ab64c38f56dp-4, +0x1.e10ef94bc21dfp-2, 0x1.fc6e297bf8dc5p-2, 0x1.852f106b0a5e2p-1, 0x1.f75b3023eeb66p-3, +0x1.3b795f9a76f2cp-1, 0x1.72bd3a76e57a7p-1, 0x1.9f4c42c33e988p-2, 0x1.71eab0b6e3d56p-1, +0x1.62b3f742c567fp-5, 0x1.2e935f125d26cp-2, 0x1.8d2a6b731a54dp-2, 0x1.623706bac46e1p-2, +0x1.2c140ffa58282p-2, 0x1.96642c6f2cc86p-1, 0x1.d4bd2453a97a5p-1, 0x1.ab454b33568a9p-1, +0x1.e9496edbd292ep-1, 0x1.7beec342f7dd8p-4, 0x1.9bc6c9db378d9p-2, 0x1.0b928d6217252p-2, +0x1.21971d26432e4p-1, 0x1.2c47ac52588f6p-1, 0x1.713157d2e262bp-2, 0x1.e94bd00bd297ap-1, +0x1.8436cf6f086dap-1, 0x1.9ce5700339caep-7, 0x1.2d09aa425a135p-3, 0x1.913ce2e32279cp-2, +0x1.249dce82493bap-1, 0x1.201b37a240367p-3, 0x1.0193de0a0327cp-1, 0x1.5254b282a4a96p-5, +0x1.463de2a68c7bcp-1, 0x1.0d85dcea1b0bcp-2, 0x1.25f82e624bf06p-2, 0x1.036e847a06dd1p-2, +0x1.f98028ebf3005p-1, 0x1.62a23892c5447p-1, 0x1.f3a1f2f3e743ep-1, 0x1.f56d0b83eada1p-6, +0x1.f9ebe81bf3d7dp-1, 0x1.746e5152e8dcap-2, 0x1.818dd773031bbp-2, 0x1.1febe02a3fd7cp-2, +0x1.426d545284dabp-3, 0x1.2b08201256104p-2, 0x1.d9d9da23b3b3bp-4, 0x1.cf261f639e4c4p-4, +0x1.8a03d0e31407ap-2, 0x1.091ea032123d4p-1, 0x1.7f5c153afeb83p-2, 0x1.e6990597cd321p-1, +0x1.ab3264035664dp-4, 0x1.7846b686f08d7p-1, 0x1.cfe4d5a39fc9bp-1, 0x1.b99d1bef733a3p-1, +0x1.7eba4c4afd74ap-1, 0x1.b274030364e8p-5, 0x1.04771aba08ee3p-2, 0x1.46b035928d607p-2, +0x1.8cb8386319707p-3, 0x1.83cf6b6b079edp-1, 0x1.70facbe2e1f59p-2, 0x1.a96bf0bf52d7ep-1, +0x1.524b3b82a4967p-6, 0x1.4b797d2296f3p-1, 0x1.591997c2b2333p-4, 0x1.04a0b10209416p-7, +0x1.5c376b62b86edp-2, 0x1.ec525ec3d8a4cp-5, 0x1.3bdeb20277bd6p-5, 0x1.500f3b9aa01e7p-2, +0x1.b1f89d2b63f14p-2, 0x1.a909adb352136p-2, 0x1.37fd8de26ffb2p-1, 0x1.2997a3ae532f4p-1, +0x1.6a08e6e2d411dp-1, 0x1.7338c92ae6719p-1, 0x1.637c679ac6f8dp-1, 0x1.78567a82f0acfp-4, +0x1.f15da563e2bb5p-3, 0x1.195391c232a72p-4, 0x1.5a3d4e42b47aap-5, 0x1.637b6bbac6f6dp-2, +0x1.9b7128bf36e25p-1, 0x1.e588aa87cb115p-1, 0x1.ad6b47235ad69p-3, 0x1.1a2b75063456fp-1, +0x1.5fd56802bfaadp-10, 0x1.db2cbe53b6598p-2, 0x1.bd838fd37b072p-1, 0x1.8f77e3331eefcp-3, +0x1.c5972a438b2e5p-3, 0x1.d803d703b007bp-3, 0x1.a93d3103527a6p-6, 0x1.efe091b3dfc12p-3, +0x1.c17a72e782f4ep-1, 0x1.c368e42386d1dp-4, 0x1.00154e62002aap-2, 0x1.be58a2537cb14p-3, +0x1.5cc909c2b9921p-3, 0x1.279124a24f225p-2, 0x1.179dc6622f3b9p-1, 0x1.302e9106605d2p-1, +0x1.684d692ad09adp-1, 0x1.3e6d51127cdaap-3, 0x1.6718d2c2ce31ap-3, 0x1.a4aca01349594p-2, +0x1.c2d41d6f85a84p-1, 0x1.bd429c4f7a854p-1, 0x1.01611f5a02c24p-1, 0x1.f95c3623f2b87p-4, +0x1.e06d0e87c0da2p-1, 0x1.1704f43e2e09fp-1, 0x1.e1d27943c3a4fp-2, 0x1.7bde3742f7bc7p-1, +0x1.f91b3d8bf2368p-2, 0x1.5c440e6eb8882p-1, 0x1.2c1358925826bp-2, 0x1.fa7b12f3f4f62p-2, +0x1.2769b6524ed37p-3, 0x1.4e34f0629c69ep-3, 0x1.611b824ac237p-1, 0x1.7680704aed00ep-2, +0x1.931c63b32638cp-2, 0x1.6e656bd2dccadp-1, 0x1.37385c926e70cp-1, 0x1.1611497a2c229p-2, +0x1.a6d288574da51p-1, 0x1.b74303c36e86p-1, 0x1.f53d9aabea7b3p-2, 0x1.fe04cac7fc099p-1, +0x1.2c2e5842585cbp-3, 0x1.23c93b4247927p-5, 0x1.2e335bce5c66bp-1, 0x1.b358ff3b66b2p-1, +0x1.875f9fe30ebf4p-3, 0x1.87f9907f0ff32p-1, 0x1.0b5e9e8216bd4p-2, 0x1.25602b224ac05p-4, +0x1.453c2cca8a786p-1, 0x1.87106e9b0e20ep-1, 0x1.8f5e30b31ebc6p-3, 0x1.25a93b4e4b527p-1, +0x1.3c2ac5aa78559p-2, 0x1.54c0c8cea9819p-1, 0x1.430ee522861ddp-2, 0x1.9aa3019b3546p-1, +0x1.6209ae72c4136p-2, 0x1.37911eda6f224p-1, 0x1.2fc1162a5f823p-2, 0x1.f5be899beb7d1p-2, +0x1.8b1e5af3163cbp-1, 0x1.f8fc0d5ff1f82p-1, 0x1.b61f7cf36c3fp-1, 0x1.52b23322a5646p-3, +0x1.6761792ecec2fp-1, 0x1.daafb303b55f6p-2, 0x1.bf6a63137ed4cp-2, 0x1.0e3401861c68p-1, +0x1.4935ba82926b7p-2, 0x1.da53fedfb4a8p-1, 0x1.0c38cc4a1871ap-1, 0x1.df4ce6a3be99dp-2, +0x1.ec909293d9212p-1, 0x1.d36140a3a6c28p-4, 0x1.45fee5128bfddp-2, 0x1.39a1ea327343dp-3, +0x1.c265b89784cb7p-1, 0x1.28aec1ca515d8p-1, 0x1.cc51ffc398a4p-3, 0x1.07a1e55e0f43dp-1, +0x1.5f7e60c2befccp-2, 0x1.add8183b5bb03p-2, 0x1.6a590562d4b21p-4, 0x1.4dd4933a9ba92p-1, +0x1.5d66a762bacd5p-4, 0x1.9da5267b3b4a5p-2, 0x1.d0ef29a3a1de5p-2, 0x1.b963584b72c6bp-2, +0x1.98ec850331d91p-7, 0x1.80581fe700b04p-1, 0x1.d790f0f7af21ep-1, 0x1.91820d0723042p-1, +0x1.79542d42f2a86p-1, 0x1.8db06de71b60ep-1, 0x1.e62e99cfcc5d3p-1, 0x1.c16b4ce382d6ap-2, +0x1.ec211da3d8424p-3, 0x1.8bc796ab178f3p-2, 0x1.eee9a7f7ddd35p-1, 0x1.1fa324aa3f465p-1, +0x1.406f946280df3p-2, 0x1.f644e87bec89dp-2, 0x1.e932ff83d266p-6, 0x1.1990b98a33217p-2, +0x1.358e9c566b1d4p-1, 0x1.6492150ac9243p-2, 0x1.b661aea36cc36p-2, 0x1.efe8a9d3dfd15p-2, +0x1.daf7cc53b5efap-1, 0x1.4e4557429c8abp-1, 0x1.ff963a47ff2c7p-1, 0x1.156df9622adbfp-2, +0x1.298b1b0253163p-4, 0x1.670ad782ce15bp-4, 0x1.d88b8febb1172p-1, 0x1.4378e13286f1cp-3, +0x1.f767dc5beecfcp-2, 0x1.8206497b040c9p-2, 0x1.2d8fe4725b1fdp-1, 0x1.0217a042042f4p-1, +0x1.056d12820ada2p-3, 0x1.0520d5660a41bp-1, 0x1.27335a8a4e66bp-2, 0x1.baaf71e7755eep-1, +0x1.25a2869a4b451p-2, 0x1.e7211c53ce424p-3, 0x1.36ca30aa6d946p-2, 0x1.0dd98ab61bb31p-1, +0x1.3fac126a7f582p-1, 0x1.149d8092293bp-2, 0x1.6be57ae2d7cafp-4, 0x1.dfe3dc9fbfc7cp-1, +0x1.857134870ae27p-1, 0x1.e6323ac3cc647p-4, 0x1.b2b0e5836561dp-3, 0x1.75ffa1b2ebff4p-2, +0x1.de1ea3c3bc3d4p-2, 0x1.47dd10b28fba2p-1, 0x1.b2f425c365e85p-1, 0x1.940e3c63281c8p-2, +0x1.2c44cfe25889ap-2, 0x1.b28a600b6514cp-1, 0x1.54be1ae2a97c3p-1, 0x1.76a796a2ed4f3p-2, +0x1.df6bbafbbed77p-1, 0x1.2d49aace5a935p-1, 0x1.0c32039e1864p-1, 0x1.b63f52536c7eap-2, +0x1.ee4ccf8bdc99ap-1, 0x1.ce0f40839c1e8p-4, 0x1.dd37496bba6e9p-1, 0x1.7d40a142fa814p-4, +0x1.3ee2bd767dc58p-1, 0x1.c343dac38687bp-3, 0x1.ea57860fd4af1p-1, 0x1.d1b400c3a368p-1, +0x1.d5327b8baa64fp-2, 0x1.0b793cc216f28p-2, 0x1.bf1b16eb7e363p-2, 0x1.522a8162a455p-4, +0x1.100b5eaa2016cp-1, 0x1.0d0a3ad61a147p-1, 0x1.452599028a4b3p-6, 0x1.2af9266255f25p-2, +0x1.49d0822e93a1p-1, 0x1.db5598a3b6ab3p-3, 0x1.507c640aa0f8dp-1, 0x1.c6fea0638dfd4p-4, +0x1.beb276db7d64fp-1, 0x1.037089ce06e11p-1, 0x1.02e6f23e05cdep-1, 0x1.53537b32a6a6fp-3, +0x1.6bf5d3aad7ebap-2, 0x1.5e943482bd287p-3, 0x1.1028aa1e20515p-1, 0x1.2acd499a559a9p-2, +0x1.84eeb7ef09dd7p-1, 0x1.c5aadbc38b55bp-5, 0x1.70864df6e10cap-1, 0x1.733b8776e6771p-1, +0x1.58725732b0e4bp-3, 0x1.4dbd97629b7b3p-1, 0x1.a2e39b9f45c73p-1, 0x1.94ff534329feap-1, +0x1.be8e8e137d1d2p-1, 0x1.8d3b21af1a764p-1, 0x1.66b35406cd66bp-1, 0x1.524f97aaa49f3p-2, +0x1.2f7c00c25ef8p-5, 0x1.19037de23207p-3, 0x1.a6da38034db47p-2, 0x1.23031eba46064p-1, +0x1.534b1a4ea6963p-1, 0x1.bb2c919b76592p-2, 0x1.b87fb1eb70ff6p-1, 0x1.3a3738fa746e7p-2, +0x1.546baef6a8d76p-1, 0x1.08fc15f211f83p-1, 0x1.abf6e11357edcp-2, 0x1.131e25d2263c5p-1, +0x1.8d93f7831b27fp-6, 0x1.d8e262cbb1c4cp-1, 0x1.67f3049ecfe61p-1, 0x1.84cf1323099e2p-2, +0x1.843b7f430877p-4, 0x1.e06ebae3c0dd7p-3, 0x1.57ce2e62af9c6p-1, 0x1.b57627d76aec5p-1, +0x1.28ecb8ea51d97p-2, 0x1.90a8f8ab2151fp-2, 0x1.28b1af4a51636p-1, 0x1.d525e483aa4bdp-2, +0x1.61213b42c2427p-5, 0x1.972a95cb2e553p-2, 0x1.fe491613fc923p-3, 0x1.d4a0a1c7a9414p-1, +0x1.6341b242c6836p-3, 0x1.e645998bcc8b3p-1, 0x1.f721b663ee437p-3, 0x1.af20b2835e416p-3, +0x1.6433c802c8679p-4, 0x1.5135899ea26b1p-1, 0x1.8ecb4b5b1d969p-1, 0x1.7fd19352ffa32p-1, +0x1.765e9342ecbd2p-4, 0x1.474afd428e96p-1, 0x1.ced2fcc39da6p-5, 0x1.8337815f066fp-1, +0x1.411c4cc28238ap-3, 0x1.e5d140abcba28p-2, 0x1.2cab4e5a5956ap-2, 0x1.72cecbc2e59d9p-3, +0x1.9796063b2f2c1p-2, 0x1.fe48abcbfc915p-1, 0x1.1f1b3c823e368p-1, 0x1.f8a4e60bf149dp-2, +0x1.d9916a13b322dp-3, 0x1.dba5ab83b74b5p-3, 0x1.639135b2c7227p-2, 0x1.0adab6fa15b57p-1, +0x1.3f3de73a7e7bdp-1, 0x1.da7a4a23b4f49p-1, 0x1.f56da93feadb5p-1, 0x1.554ffaeeaa9ffp-1, +0x1.4c1f2a12983e5p-2, 0x1.d3ffbb03a7ff7p-3, 0x1.29f09cb653e14p-1, 0x1.fdc00333fb8p-2, +0x1.6d162122da2c4p-3, 0x1.a7b90a4f4f721p-1, 0x1.6aa82e3ad5506p-1, 0x1.0f9802921f3p-2, +0x1.f1dd27d3e3ba5p-2, 0x1.f2e6f323e5cdep-2, 0x1.e7652603ceca5p-7, 0x1.27ba66524f74dp-1, +0x1.02f9db4205f3bp-3, 0x1.2456232248ac4p-4, 0x1.55e3cf62abc7ap-2, 0x1.220b140a44163p-2, +0x1.177364be2ee6dp-1, 0x1.41478ede828f2p-1, 0x1.db7279ebb6e4fp-2, 0x1.e33e67dbc67cdp-1, +0x1.3f903aaa7f207p-1, 0x1.9a8f2e83351e6p-6, 0x1.bf21b5c37e437p-2, 0x1.b5f4952f6be93p-1, +0x1.077bc8b20ef79p-2, 0x1.915975bb22b2fp-1, 0x1.819e984b033d3p-2, 0x1.c2fbcb9385f79p-1, +0x1.6bd3bfded7a78p-1, 0x1.6c79eac2d8f3dp-2, 0x1.184bc67e30979p-1, 0x1.1e354e423c6aap-5, +0x1.2b3ce4225679dp-1, 0x1.08f18cc211e32p-3, 0x1.10c3567e2186bp-1, 0x1.86826c6b0d04ep-1, +0x1.e9f56d83d3eaep-1, 0x1.edae12e3db5c2p-3, 0x1.c9cdb683939b7p-6, 0x1.c5c802d38b9p-2, +0x1.74defe4ae9bep-1, 0x1.5ec024c2bd805p-5, 0x1.53ccf782a799fp-6, 0x1.b59d751f6b3afp-1, +0x1.d3b635a3a76c7p-4, 0x1.6b209edad6414p-2, 0x1.1a8bfc823518p-3, 0x1.51ea2b72a3d45p-1, +0x1.f6d7de4bedafcp-1, 0x1.345c3c1668b88p-1, 0x1.3528934a6a512p-1, 0x1.366818f26cd03p-1, +0x1.4130b58a82617p-1, 0x1.4b96e282972dcp-5, 0x1.d8b95c3bb172cp-2, 0x1.c4ee99e389dd3p-1, +0x1.a612e3e74c25cp-1, 0x1.ad2bfa475a57fp-1, 0x1.87ea65730fd4dp-1, 0x1.11e6a3c223cd4p-1, +0x1.8da3be931b478p-3, 0x1.406c57e280d8bp-2, 0x1.23c9f8a64793fp-1, 0x1.8ea5d3cb1d4bap-1, +0x1.c4e51e4389ca4p-2, 0x1.a46a790348d4fp-4, 0x1.152840322a508p-1, 0x1.98cff943319ffp-2, +0x1.5ff1a7b2bfe35p-2, 0x1.2376ade646ed6p-1, 0x1.af4bfe0f5e98p-1, 0x1.26be91224d7d2p-4, +0x1.3962b03672c56p-1, 0x1.b9ea65cb73d4dp-1, 0x1.da754743b4ea9p-1, 0x1.73d976eae7b2fp-1, +0x1.bdead4d37bd5bp-3, 0x1.08c2330211846p-4, 0x1.8b8744b3170e9p-2, 0x1.994a4df33294ap-3, +0x1.55748276aae9p-1, 0x1.faec35a3f5d87p-1, 0x1.9cbaac7339756p-1, 0x1.2d4a6ffa5a94ep-2, +0x1.f4b47983e968fp-6, 0x1.122eb51a245d7p-2, 0x1.6e4f4782dc9e9p-3, 0x1.b5b887b36b711p-1, +0x1.b21aa68364355p-4, 0x1.e37e3753c6fc7p-1, 0x1.8f3e56e31e7cbp-2, 0x1.335888f266b11p-2, +0x1.0768c6820ed19p-2, 0x1.eb692417d6d25p-1, 0x1.4290c20285218p-4, 0x1.6626f266cc4dep-1, +0x1.ff673343fece6p-5, 0x1.3d7a58727af4bp-1, 0x1.9477782328eefp-4, 0x1.9fde8e233fbd2p-2, +0x1.83c4196307883p-3, 0x1.e1daed13c3b5ep-1, 0x1.e98e326bd31c6p-2, 0x1.9a53b68f34a77p-1, +0x1.9bc552db378aap-1, 0x1.9e78c0eb3cf18p-2, 0x1.0e2d2d761c5a6p-1, 0x1.68010182d002p-6, +0x1.e0a94dabc152ap-2, 0x1.d3f0cfcfa7e1ap-1, 0x1.c64a6e338c94ep-3, 0x1.1724a5222e495p-3, +0x1.cedd056f9dba1p-1, 0x1.c9a8ff839352p-6, 0x1.b8dcc28b71b98p-2, 0x1.de82a93bbd055p-1, +0x1.2ec945125d929p-2, 0x1.3802332670046p-1, 0x1.943b30eb28766p-1, 0x1.9b4feebb369fep-2, +0x1.1b806a7a3700dp-1, 0x1.6f697162ded2ep-3, 0x1.67543bd6cea87p-1, 0x1.9f34cdbb3e69ap-1, +0x1.1d0e01b23a1cp-3, 0x1.8fa654171f4cbp-1, 0x1.055bc01e0ab78p-1, 0x1.9ce7ce9339cfap-3, +0x1.9a41590b3482bp-2, 0x1.37eaaf266fd56p-1, 0x1.37293ab66e527p-1, 0x1.2e11b2de5c236p-1, +0x1.19c59c36338b4p-1, 0x1.5f829f42bf054p-4, 0x1.90cad2d32195ap-2, 0x1.6b15de22d62bcp-2, +0x1.f65968bbecb2dp-2, 0x1.d69296dfad253p-1, 0x1.8195ee3b032bep-2, 0x1.eb815b33d702bp-1, +0x1.aa8366ab5506dp-1, 0x1.325d92aa64bb2p-1, 0x1.8a5423c314a84p-4, 0x1.79606c1af2c0ep-1, +0x1.40aadaa68155bp-1, 0x1.0db8e5be1b71dp-1, 0x1.57e31552afc63p-1, 0x1.d80f7d33b01fp-1, +0x1.16ec63922dd8cp-3, 0x1.d83c8c7bb0792p-2, 0x1.4b6ee91a96dddp-2, 0x1.613b835ec277p-1, +0x1.47f8a2968ff14p-1, 0x1.a1760c0342ec2p-6, 0x1.0070511600e0ap-1, 0x1.8f3c23071e784p-1, +0x1.9cb2047739641p-1, 0x1.73044d02e608ap-7, 0x1.f67616abecec3p-1, 0x1.a74ac3e34e958p-3, +0x1.3db6c05a7b6d8p-1, 0x1.2d9f515e5b3eap-1, 0x1.97e463db2fc8cp-1, 0x1.5df17232bbe2ep-3, +0x1.598fa546b31f5p-1, 0x1.81273503024e7p-3, 0x1.0d074b9e1a0e9p-1, 0x1.52f16682a5e2dp-3, +0x1.b6e321036dc64p-4, 0x1.cdd242bf9ba48p-1, 0x1.00f6d34201edap-3, 0x1.e15fcacbc2bf9p-1, +0x1.002fd566005fbp-1, 0x1.c620e5238c41dp-3, 0x1.5ac036e2b5807p-1, 0x1.036ac03206d58p-3, +0x1.7f411f06fe824p-1, 0x1.6546986aca8d3p-2, 0x1.8ea2d3c31d45ap-5, 0x1.c4fc37eb89f87p-1, +0x1.9ec192733d832p-1, 0x1.7d434392fa868p-2, 0x1.2637bb464c6f7p-1, 0x1.cd746a0b9ae8dp-2, +0x1.975aa4532eb55p-2, 0x1.354062e26a80cp-4, 0x1.d7d96023afb2cp-3, 0x1.a17d5a7342fabp-3, +0x1.63a0ec82c741ep-4, 0x1.b1b1bac363637p-3, 0x1.a4640f2b48c82p-2, 0x1.6a2addead455cp-1, +0x1.9a0bc00f34178p-1, 0x1.a859adb350b36p-3, 0x1.c1a73a77834e7p-1, 0x1.e736caa3ce6d9p-2, +0x1.94c071632980ep-2, 0x1.9d5d0c2b3aba2p-2, 0x1.4857bef290af8p-1, 0x1.013c9cd202794p-1, +0x1.390191a272032p-2, 0x1.889573c3112aep-1, 0x1.c538cf338a71ap-2, 0x1.9cb09e3739614p-1, +0x1.fa1dad0bf43b6p-1, 0x1.eae4f3e3d5c9ep-4, 0x1.dd8b4e43bb16ap-1, 0x1.795ecc12f2bdap-1, +0x1.dfffd563bfffbp-2, 0x1.f6757b7feceafp-1, 0x1.3e5b03fa7cb6p-1, 0x1.1d82fa423b05fp-2, +0x1.6a2e3a8ad45c7p-2, 0x1.924afd032496p-3, 0x1.757bb226eaf76p-1, 0x1.80c46f6f0188ep-1, +0x1.1675973a2ceb3p-2, 0x1.eb720a33d6e41p-1, 0x1.e923c60bd2479p-1, 0x1.6f5dd25adebbap-2, +0x1.5f79e382bef3cp-3, 0x1.76ab9b42ed573p-2, 0x1.0ece38a21d9c7p-4, 0x1.f1ea38f3e3d47p-1, +0x1.256c390e4ad87p-1, 0x1.e381018bc702p-1, 0x1.cb0b3c8396168p-2, 0x1.efcc71bfdf98ep-1, +0x1.645f0f3ac8be2p-2, 0x1.6eeae9a2ddd5dp-4, 0x1.e2121d1bc4244p-2, 0x1.4eb0506e9d60ap-1, +0x1.b672d0f76ce5ap-1, 0x1.d3a5762ba74afp-1, 0x1.d6c1dd4bad83cp-2, 0x1.b0907e036121p-1, +0x1.10214a4220429p-5, 0x1.91d879cb23b0fp-2, 0x1.29ef4a1253de9p-1, 0x1.0101ff560204p-1, +0x1.7ec370cafd86ep-2, 0x1.a129382342527p-3, 0x1.8fc37c771f87p-1, 0x1.7478d5aae8f1bp-1, +0x1.99ba1a9333743p-2, 0x1.053f2e9a0a7e6p-1, 0x1.ea7a8a33d4f51p-2, 0x1.5817d8e6b02fbp-1, +0x1.e1627193c2c4ep-2, 0x1.bcc2164379843p-2, 0x1.f8d84203f1b08p-6, 0x1.488fb1ae911f6p-1, +0x1.99b6d8c3336dbp-1, 0x1.8d0449231a089p-4, 0x1.3a79ea9e74f3dp-1, 0x1.7e4623a2fc8c4p-2, +0x1.5218ab02a4315p-5, 0x1.fff88dc3fff12p-5, 0x1.5ddf071abbbe1p-2, 0x1.8ea2249b1d445p-2, +0x1.377398426ee73p-3, 0x1.9ff8921f3ff12p-1, 0x1.60162bc2c02c5p-5, 0x1.13edc20227db8p-7, +0x1.739e0846e73c1p-1, 0x1.0162516202c4ap-1, 0x1.b4e0350b69c07p-1, 0x1.84a01ceb09404p-1, +0x1.ca4e8e47949d2p-1, 0x1.bd9efe337b3ep-2, 0x1.0b44387a16887p-2, 0x1.13608d5226c12p-2, +0x1.4719cd228e33ap-1, 0x1.56598b02acb31p-5, 0x1.fe291c57fc524p-1, 0x1.3f6da6c27edb5p-5, +0x1.1aa4c74a35499p-1, 0x1.e6ccc2dbcd998p-2, 0x1.6c0eb352d81d6p-1, 0x1.6ac00282d58p-6, +0x1.d1c76c8fa38eep-1, 0x1.7bd57566f7aafp-1, 0x1.53e5b1c2a7cb6p-1, 0x1.6b7e4552d6fc9p-1, +0x1.ad75fe8b5aecp-1, 0x1.1cbf38ba397e7p-2, 0x1.550ab902aa157p-4, 0x1.c297893b852f1p-1, +0x1.5cbe4a72b97c9p-2, 0x1.b321b55b66437p-2, 0x1.13d1371227a27p-2, 0x1.f878169bf0f03p-2, +0x1.e625b323cc4b6p-3, 0x1.3fd3fc8a7fa8p-2, 0x1.008bc25601178p-1, 0x1.ed27750fda4efp-1, +0x1.a14c4fa74298ap-1, 0x1.6ad7eebad5afep-2, 0x1.71c791f6e38f2p-1, 0x1.6b9addead735cp-1, +0x1.943b76772876fp-1, 0x1.f769ae33eed36p-1, 0x1.f54b2497ea965p-1, 0x1.b6aa872b6d551p-2, +0x1.99e8dc0333d1cp-6, 0x1.f37440ebe6e88p-1, 0x1.de983c03bd308p-2, 0x1.27740e2e4ee82p-1, +0x1.cdb544ab9b6a9p-2, 0x1.6d6b4552dad69p-3, 0x1.32ca0e4265942p-1, 0x1.71441dc2e2884p-2, +0x1.d73046bbae609p-1, 0x1.0d5f80021abfp-2, 0x1.2102a18242054p-4, 0x1.84a64543094c9p-1, +0x1.150f5c5e2a1ecp-1, 0x1.3b06ad42760d6p-3, 0x1.473dce7e8e7bap-1, 0x1.c36e819786ddp-1, +0x1.2852860250a51p-1, 0x1.d1266a07a24cdp-1, 0x1.7f5519c2feaa3p-2, 0x1.a1dbf2cb43b7ep-1, +0x1.c441a12388834p-3, 0x1.c0364f37806cap-1, 0x1.8f0367db1e06dp-1, 0x1.25cb7ec24b97p-5, +0x1.d6891a43ad123p-3, 0x1.00caf9ce0195fp-1, 0x1.7df795d6fbef3p-1, 0x1.3bb7a082776f4p-6, +0x1.f0695003e0d2ap-2, 0x1.7342ba6ae6857p-1, 0x1.ca66013b94ccp-2, 0x1.0503eee20a07ep-1, +0x1.66b6fb52cd6dfp-1, 0x1.d47f1e9fa8fe4p-1, 0x1.63bfe862c77fdp-4, 0x1.364676926c8cfp-3, +0x1.7ecf7f82fd9fp-4, 0x1.5f420b4ebe841p-1, 0x1.0633ac8a0c676p-1, 0x1.c28daa03851b5p-7, +0x1.e5f1cb4fcbe39p-1, 0x1.2a5400ba54a8p-1, 0x1.8bb07bef1760fp-1, 0x1.f6024f53ec04ap-2, +0x1.7915ac0ef22b6p-1, 0x1.a5dc94d34bb93p-2, 0x1.7cdf5282f9beap-2, 0x1.42d0641a85a0dp-2, +0x1.482968da9052dp-2, 0x1.7e1a3622fc347p-1, 0x1.0d1093521a212p-3, 0x1.15251cb62a4a4p-1, +0x1.3e50855a7ca11p-1, 0x1.d2478cafa48f2p-1, 0x1.2781d4a24f03bp-1, 0x1.b3f2cbeb67e59p-1, +0x1.a6250cfb4c4a2p-2, 0x1.4af2d4ea95e5bp-2, 0x1.bdd088f37ba11p-1, 0x1.cb472e7f968e6p-1, +0x1.8bc24e031784ap-5, 0x1.4607131a8c0e2p-2, 0x1.a0963abb412c7p-2, 0x1.7f732032fee64p-1, +0x1.de0aa0a3bc154p-3, 0x1.f98634dbf30c7p-2, 0x1.cd04bddb9a098p-1, 0x1.4eb9303a9d726p-2, +0x1.701496e2e0293p-3, 0x1.a670d4c34ce1bp-2, 0x1.5ccd9d8ab99b4p-2, 0x1.07dbc4220fb79p-3, +0x1.fd8c6b1bfb18dp-1, 0x1.d0ba5583a174bp-4, 0x1.3cf818b279f03p-1, 0x1.76a21726ed443p-1, +0x1.0d05951a1a0b3p-1, 0x1.fb67c1f3f6cf8p-1, 0x1.80a4930301492p-5, 0x1.b11a498762349p-1, +0x1.7981f816f303fp-1, 0x1.6d39b822da737p-3, 0x1.8c7ecc7318fdap-2, 0x1.6fa4fadadf49fp-2, +0x1.6cafd5a2d95fbp-4, 0x1.edc13adbdb827p-1, 0x1.af1525535e2a5p-3, 0x1.00a881320151p-1, +0x1.26754aa24cea9p-2, 0x1.4cae9222995d2p-4, 0x1.97df5f5b2fbecp-2, 0x1.57ed9462afdb3p-2, +0x1.9932b7a332657p-2, 0x1.9c3acd0f3875ap-1, 0x1.5b4f5302b69eap-4, 0x1.441c03fe8838p-1, +0x1.31fbcef263f7ap-2, 0x1.f86ea83bf0dd5p-1, 0x1.eb789c1bd6f14p-1, 0x1.ea061a63d40c3p-2, +0x1.974e25332e9c5p-2, 0x1.33bed5ba677dbp-2, 0x1.36f9fe3a6df4p-1, 0x1.9266fb6b24cdfp-2, +0x1.a7ed6b234fdadp-2, 0x1.cfc85bb39f90bp-3, 0x1.feaca6c3fd595p-4, 0x1.e0fc4aabc1f89p-1, +0x1.bd6763737acecp-3, 0x1.5f7f7832befefp-3, 0x1.92169433242d3p-1, 0x1.e8dbd0f3d1b7ap-1, +0x1.665c982accb93p-2, 0x1.6157e9a2c2afdp-3, 0x1.415c9cba82b94p-2, 0x1.c1888d9383112p-2, +0x1.185cd51230b9bp-3, 0x1.0c7397b618e73p-1, 0x1.e16cc7ffc2d99p-1, 0x1.b2a3b52b65477p-2, +0x1.360969fa6c12dp-1, 0x1.5ab8ef52b571ep-2, 0x1.8548a4c70a915p-1, 0x1.5162e602a2c5dp-8, +0x1.265d12d24cba2p-3, 0x1.b0b28f2761652p-1, 0x1.46bec9ca8d7d9p-1, 0x1.c52a585b8a54bp-2, +0x1.a921376352427p-1, 0x1.323765e2646edp-1, 0x1.d7983963af307p-1, 0x1.d32127e3a6425p-3, +0x1.cc16d0bf982dap-1, 0x1.0e92379a1d247p-1, 0x1.3dfbc7ae7bf79p-1, 0x1.401b0c9a80362p-2, +0x1.82844e870508ap-1, 0x1.7dd15c8afba2cp-1, 0x1.0213a1f204274p-2, 0x1.f1de2767e3bc5p-1, +0x1.d5b13a97ab627p-1, 0x1.32065282640cap-5, 0x1.dab9f857b573fp-1, 0x1.11bf0d52237e2p-2, +0x1.add97e435bb3p-3, 0x1.eda11ad3db423p-3, 0x1.69a3cd72d347ap-1, 0x1.631b29aac6365p-2, +0x1.87dbde6b0fb7cp-1, 0x1.4b10956e96213p-1, 0x1.8adf6f6b15beep-1, 0x1.7bca90c2f7952p-2, +0x1.f86d0d1bf0da2p-1, 0x1.1028142e20503p-1, 0x1.81101c5b02204p-2, 0x1.0811473210229p-3, +0x1.81b546ab036a9p-2, 0x1.d1b5fd03a36cp-7, 0x1.24997dfe4933p-1, 0x1.a7ef6ad34fdedp-3, +0x1.397e3dd672fc8p-1, 0x1.f8636ebbf0c6ep-2, 0x1.bd88495b7b109p-2, 0x1.05950e960b2a2p-1, +0x1.587dde82b0fbcp-6, 0x1.cbfec5c397fd9p-5, 0x1.a5a294e34b453p-1, 0x1.8d483d7f1a908p-1, +0x1.9a9148e735229p-1, 0x1.35632ec26ac66p-4, 0x1.7f2664e2fe4cdp-1, 0x1.7042837ae085p-1, +0x1.ce6658039cccbp-4, 0x1.59e05d36b3c0cp-1, 0x1.f9220a23f2441p-1, 0x1.4a86552a950cbp-2, +0x1.d548a3ebaa914p-1, 0x1.62c5d792c58bbp-1, 0x1.56d0bf6aada18p-1, 0x1.5d248252ba49p-1, +0x1.5bacda02b759bp-2, 0x1.c3605dab86c0cp-2, 0x1.b09cab4361395p-5, 0x1.4c86f432990dfp-2, +0x1.f1d84303e3b08p-1, 0x1.b723b1c36e476p-2, 0x1.d08f97cba11f3p-2, 0x1.6565ccaacacbap-2, +0x1.c5b161b38b62cp-2, 0x1.9c293c0338528p-6, 0x1.1caec10a395d8p-1, 0x1.c56eeac38adddp-5, +0x1.0913013e1226p-1, 0x1.fb72e5bbf6e5dp-1, 0x1.21ebfd4243d8p-1, 0x1.13d6f03627adep-1, +0x1.832d2143065a4p-5, 0x1.8f1d244b1e3a5p-2, 0x1.423e5b62847cbp-2, 0x1.b2c41afb65883p-1, +0x1.dc75effbb8ebep-2, 0x1.022c948204593p-4, 0x1.23069e72460d4p-1, 0x1.2807c302500f8p-1, +0x1.7a25efc6f44bep-1, 0x1.1c28a89238515p-1, 0x1.cd4aed979a95ep-1, 0x1.4f6e93b29edd2p-1, +0x1.fbba0083f774p-3, 0x1.241bacfe48376p-1, 0x1.59262c02b24c6p-2, 0x1.2cc4ed225989ep-1, +0x1.72f6f402e5edfp-7, 0x1.8f39c16b1e738p-2, 0x1.d308673ba610dp-1, 0x1.f7a41ed7ef484p-1, +0x1.a32eb99b465d7p-1, 0x1.76a06642ed40dp-2, 0x1.54ae0a52a95c1p-2, 0x1.0c0ed4e2181dbp-2, +0x1.9062fa0320c5fp-2, 0x1.c705c6378e0b9p-1, 0x1.44bcb23a89796p-2, 0x1.d1447e43a289p-1, +0x1.c278abef84f15p-1, 0x1.c44a56638894bp-1, 0x1.ca36dceb946dcp-2, 0x1.daab7e03b557p-1, +0x1.17b1d10a2f63ap-2, 0x1.863a9c270c754p-1, 0x1.8d6f98fb1adf3p-1, 0x1.7a13e082f427cp-1, +0x1.a6802eb74d006p-1, 0x1.60ec6ed2c1d8ep-2, 0x1.44374702886e9p-2, 0x1.20a61e7a414c4p-1, +0x1.cc9edffb993dcp-1, 0x1.bd9a44537b349p-3, 0x1.c052c8a380a59p-3, 0x1.2e3580625c6bp-3, +0x1.93823e1727048p-1, 0x1.1ca7c82e394f9p-1, 0x1.78524d3ef0a4ap-1, 0x1.994e19e7329c3p-1, +0x1.e444a8e3c8895p-1, 0x1.4b5ab47696b57p-1, 0x1.90f238bb21e47p-1, 0x1.8773627b0ee6cp-1, +0x1.aab9e5035573dp-7, 0x1.da49ef23b493ep-4, 0x1.af599d035eb34p-6, 0x1.9db8c9333b719p-2, +0x1.27820c024f042p-8, 0x1.5fb24c12bf64ap-2, 0x1.4041c5b280839p-2, 0x1.c4c7b007898f6p-1, +0x1.d08df1a3a11bep-3, 0x1.853c514f0a78ap-1, 0x1.9f732e073ee66p-1, 0x1.fff8c9dbfff19p-2, +0x1.0b76ed7216edep-1, 0x1.2ce2c6fe59c59p-1, 0x1.e84115b3d0823p-3, 0x1.63ee384ac7dc7p-2, +0x1.dd58fe67bab2p-1, 0x1.1c2be8f23857dp-1, 0x1.d29d3a9fa53a7p-1, 0x1.a9f7de5f53efcp-1, +0x1.8b927a071724fp-1, 0x1.0ac7b322158f6p-3, 0x1.f5853e77eb0a8p-1, 0x1.1f14b81a3e297p-1, +0x1.5f59b4f6beb37p-1, 0x1.6dd78bb2dbaf1p-1, 0x1.70c5a402e18b5p-2, 0x1.439e5dd6873ccp-1, +0x1.72648052e4c9p-2, 0x1.25542ae24aa85p-3, 0x1.962380a32c47p-2, 0x1.7fba4f7aff74ap-2, +0x1.093c913a12792p-2, 0x1.b1191a7362323p-2, 0x1.8eb98c571d732p-1, 0x1.0dda996a1bb53p-2, +0x1.8865b34310cb6p-1, 0x1.76d37962eda6fp-4, 0x1.2ed3f2e25da7ep-3, 0x1.fc892fabf9126p-1, +0x1.b416c07b682d8p-1, 0x1.eb282abfd6505p-1, 0x1.f90b292bf2165p-2, 0x1.7f1b5bd2fe36bp-2, +0x1.180af1ba3015ep-1, 0x1.7695da06ed2bbp-1, 0x1.7184ca0ee3099p-1, 0x1.eac7e03bd58fcp-2, +0x1.258385ea4b071p-2, 0x1.442204ae88441p-1, 0x1.3eb79cf27d6f4p-2, 0x1.e543cf83ca87ap-5, +0x1.86d3f1770da7ep-1, 0x1.29c219e253843p-2, 0x1.3d68f5167ad1fp-1, 0x1.cc5b4cd398b6ap-2, +0x1.5c4c5002b898ap-8, 0x1.f5cbc717eb979p-1, 0x1.4e6021e29cc04p-4, 0x1.77d5b192efab6p-2, +0x1.f9068e63f20d2p-4, 0x1.e9bb891bd3771p-2, 0x1.7bc8008af79p-1, 0x1.877e34db0efc7p-2, +0x1.cd6a51cb9ad4ap-1, 0x1.0a818cde15032p-1, 0x1.4aac67229558dp-1, 0x1.55d0050aaba01p-1, +0x1.395bfc0e72b8p-1, 0x1.966163df2cc2cp-1, 0x1.525934b6a4b27p-1, 0x1.dae5790bb5cafp-2, +0x1.81898e9b03132p-1, 0x1.3b7b252276f65p-3, 0x1.ad006a735a00dp-1, 0x1.332900aa6652p-2, +0x1.c574a34f8ae94p-1, 0x1.1e85347e3d0a7p-1, 0x1.8ef870731df0ep-1, 0x1.60d99902c1b33p-3, +0x1.8a9ce4a31539dp-3, 0x1.72a1f762e543fp-4, 0x1.da2a8cf3b4552p-3, 0x1.e97b2a9fd2f65p-1, +0x1.866a97bb0cd53p-2, 0x1.b3f3985367e73p-1, 0x1.9f51a20b3ea34p-2, 0x1.8bdbc8fb17b79p-2, +0x1.a9bf5f67537ecp-1, 0x1.f2e9aa8be5d35p-2, 0x1.81d8bd4b03b18p-1, 0x1.e8e03133d1c06p-1, +0x1.ee5299d3dca53p-1, 0x1.fb417ba3f682fp-2, 0x1.593e973ab27d3p-2, 0x1.bbbceb9b7779dp-1, +0x1.044955820892bp-6, 0x1.f74bb2c3ee976p-1, 0x1.118cf0a62319ep-1, 0x1.417e46ba82fc9p-1, +0x1.8dad169f1b5a3p-1, 0x1.8f9895631f313p-3, 0x1.77881a02ef103p-4, 0x1.0f36a5361e6d5p-1, +0x1.6589dd42cb13cp-2, 0x1.dbf16db3b7e2ep-1, 0x1.a8cb258b51965p-1, 0x1.e0e647c3c1cc9p-3, +0x1.f4ed445be9da9p-2, 0x1.37c395fe6f873p-1, 0x1.a0dff06341bfep-2, 0x1.5d1ddb5aba3bbp-1, +0x1.6617d4eacc2fbp-1, 0x1.46fa9b6e8df53p-1, 0x1.469905f68d321p-1, 0x1.4a69062294d21p-4, +0x1.f5dc677bebb8dp-2, 0x1.641d6fc2c83aep-5, 0x1.de760a83bcec1p-2, 0x1.495b264292b65p-2, +0x1.0fb6ac421f6d6p-1, 0x1.c44f0a23889e1p-3, 0x1.1b1b88aa36371p-2, 0x1.fc128c23f8252p-2, +0x1.6eb4805add69p-1, 0x1.3a2d0ff2745a2p-1, 0x1.738c635ae718cp-2, 0x1.76d6cb0aedad9p-1, +0x1.3178c2b262f18p-1, 0x1.cb53225396a64p-1, 0x1.70aa2382e1544p-2, 0x1.7e4bb29afc976p-2, +0x1.79ca3d42f3948p-4, 0x1.ce8c2a039d185p-2, 0x1.ce5c7e879cb9p-1, 0x1.c3fc6c9387f8ep-2, +0x1.866f05630cde1p-2, 0x1.7727a40eee4f5p-1, 0x1.5a37c83ab46f9p-1, 0x1.bdae24e37b5c5p-1, +0x1.5dd67412bbacfp-2, 0x1.553e0362aa7cp-4, 0x1.1acc003a3598p-1, 0x1.5030ef02a061ep-5, +0x1.71a25bdae344bp-1, 0x1.859418b30b283p-3, 0x1.f2817da3e503p-4, 0x1.b2423e6364848p-3, +0x1.de9b74a3bd36fp-3, 0x1.2d8b34fa5b167p-1, 0x1.113e22ba227c4p-1, 0x1.875d896b0ebb1p-1, +0x1.9e9ef7833d3dfp-1, 0x1.9ecbe70f3d97dp-1, 0x1.0acd9efa159b4p-2, 0x1.0d5377de1aa6fp-1, +0x1.b1f1ee0363e3ep-2, 0x1.3f2d012a7e5ap-1, 0x1.085485ca10a91p-2, 0x1.4e3736029c6e7p-6, +0x1.0a80237a15004p-1, 0x1.3c7f54a678febp-1, 0x1.932f2603265e5p-2, 0x1.39b96b227372dp-1, +0x1.1e2b4d423c56ap-4, 0x1.2fe8230a5fd04p-2, 0x1.bb7a168376f43p-5, 0x1.cdf9d8b39bf3bp-2, +0x1.e376b203c6ed6p-6, 0x1.75ef69a6ebdedp-1, 0x1.4956227292ac4p-2, 0x1.7c0ddf3af81bcp-2, +0x1.a0972a13412e5p-1, 0x1.bf7711737eee2p-1, 0x1.a613fd1b4c28p-2, 0x1.123985ea24731p-1, +0x1.06e0bd020dc18p-4, 0x1.115a2e4622b46p-1, 0x1.7eca1582fd943p-1, 0x1.3105e992620bdp-2, +0x1.f72b19e3ee563p-4, 0x1.2010707a4020ep-2, 0x1.fe07e343fc0fcp-5, 0x1.dd845abfbb08bp-1, +0x1.76a0fa42ed41fp-4, 0x1.4a8e9b62951d3p-2, 0x1.d5afa533ab5f5p-2, 0x1.07cd164a0f9a3p-1, +0x1.e4744edbc8e8ap-1, 0x1.6f02157ede043p-1, 0x1.123ecffe247dap-1, 0x1.dde8e4a3bbd1dp-2, +0x1.5702d44aae05bp-2, 0x1.dbd662ffb7accp-1, 0x1.456eeb828adddp-4, 0x1.9e8da79b3d1b5p-2, +0x1.cf29d2039e53ap-3, 0x1.1195fb62232bfp-3, 0x1.b643c0276c878p-1, 0x1.05cc54220b98bp-2, +0x1.ba54e87f74a9dp-1, 0x1.6bbb4582d7769p-3, 0x1.40ed19ae81da3p-1, 0x1.5aec128eb5d82p-1, +0x1.a65e2d034cbc6p-5, 0x1.3f7183c27ee3p-5, 0x1.b49661e3692ccp-3, 0x1.da0fd383b41fap-4, +0x1.255146824aa29p-1, 0x1.ebefadfbd7df6p-1, 0x1.a789de7b4f13cp-2, 0x1.6436a9bec86d5p-1, +0x1.efdf98d3dfbf3p-3, 0x1.e74adae3ce95bp-2, 0x1.41bb047a83761p-1, 0x1.55980b02ab301p-2, +0x1.98ecbb2331d97p-1, 0x1.6496b8a2c92d7p-4, 0x1.b2991bcb65323p-1, 0x1.7d6109fafac21p-1, +0x1.9b94ec933729ep-1, 0x1.89afd78b135fbp-2, 0x1.b155f12362abep-3, 0x1.1c595ad238b2bp-3, +0x1.415c9d8282b94p-2, 0x1.2a06b372540d6p-2, 0x1.165d2a822cba5p-1, 0x1.1478c34228f18p-1, +0x1.b2d1b12365a36p-2, 0x1.9941d5533283bp-2, 0x1.975eed572ebdep-1, 0x1.277b82224ef7p-2, +0x1.278fbc0a4f1f8p-1, 0x1.b0980e0361302p-2, 0x1.eea9d39fdd53ap-1, 0x1.41f59eda83eb4p-1, +0x1.d8863e7bb10c8p-2, 0x1.6f3db052de7b6p-3, 0x1.7d37994efa6f3p-1, 0x1.19465bc2328cbp-5, +0x1.1efc68423df8dp-3, 0x1.43f2222287e44p-3, 0x1.75cb0f7aeb962p-1, 0x1.876e008b0edcp-2, +0x1.44a1f5fa8943fp-1, 0x1.6f0c27eade185p-2, 0x1.6e8305c6dd061p-1, 0x1.bb1d6233763acp-2, +0x1.c831d6139063bp-2, 0x1.211c219242384p-1, 0x1.6bbeec42d77dep-3, 0x1.feb75e63fd6ecp-3, +0x1.e5f40d57cbe82p-1, 0x1.8e8a6eb31d14ep-2, 0x1.8d885ca31b10cp-2, 0x1.0d44b8321a897p-2, +0x1.5c489112b8912p-1, 0x1.dd2158d3ba42bp-1, 0x1.9b1b1f5b36364p-1, 0x1.ad8b4d035b16ap-4, +0x1.538486f2a7091p-2, 0x1.327a0cae64f42p-1, 0x1.92de556325bcbp-2, 0x1.d151ff83a2a4p-1, +0x1.58c27602b184fp-6, 0x1.7031fca2e064p-2, 0x1.13479e5e268f4p-1, 0x1.ee1265dbdc24dp-2, +0x1.13e86a6627d0dp-1, 0x1.20fe6f5241fcep-2, 0x1.089d98ae113b3p-1, 0x1.5ba78476b74f1p-1, +0x1.c2f7806385efp-2, 0x1.f9a2a093f3454p-3, 0x1.f5e84bc3ebd09p-5, 0x1.30edb14261db6p-4, +0x1.35eebc1a6bdd8p-1, 0x1.8de18a831bc31p-1, 0x1.03ac67420758dp-1, 0x1.a07a720340f4ep-5, +0x1.5dfb5822bbf6bp-2, 0x1.5e9c2252bd384p-1, 0x1.336afd7a66d6p-2, 0x1.29e372d253c6ep-2, +0x1.2f0acd425e15ap-4, 0x1.6079ad0ec0f36p-1, 0x1.1b94158237283p-1, 0x1.8229eabb0453dp-1, +0x1.3d9b05de7b361p-1, 0x1.6d5e69b2dabcdp-2, 0x1.b7db545b6fb6bp-1, 0x1.e75d495bceba9p-1, +0x1.e929418bd2528p-1, 0x1.0294fe1a052ap-2, 0x1.b8af48db715e9p-1, 0x1.f3ef553be7debp-1, +0x1.39637d5e72c7p-1, 0x1.97edce6b2fdbap-2, 0x1.d5f1104babe22p-2, 0x1.352f9f026a5f4p-3, +0x1.5c761edeb8ec4p-1, 0x1.f39620d3e72c4p-1, 0x1.a8f36c3b51e6ep-1, 0x1.ef8ef863df1dfp-4, +0x1.c7fb23e38ff64p-3, 0x1.c851f0f790a3ep-1, 0x1.903e54d3207cbp-3, 0x1.a7ed85134fdb1p-1, +0x1.56337b76ac66fp-1, 0x1.67bbfc76cf78p-1, 0x1.c1f52c3783ea6p-1, 0x1.4c49e2029893cp-7, +0x1.8cb03d8b19608p-2, 0x1.6eaaabc2dd555p-3, 0x1.3445c1e2688b8p-2, 0x1.d872f0dbb0e5ep-2, +0x1.bc2457ff7848bp-1, 0x1.b5b6f6736b6dfp-1, 0x1.b98d8c93731b2p-3, 0x1.f37ebbb3e6fd7p-2, +0x1.b198ad2363316p-3, 0x1.31f5bc0263eb8p-4, 0x1.c2394e638472ap-2, 0x1.563db342ac7b6p-3, +0x1.4f126d1a9e24ep-2, 0x1.3397e01a672fcp-2, 0x1.25fb08224bf61p-3, 0x1.e0ecb3ebc1d96p-1, +0x1.65c2d742cb85bp-1, 0x1.34774a3268ee9p-1, 0x1.71c4dd42e389cp-4, 0x1.8471ec4308e3ep-2, +0x1.280d6b02501adp-1, 0x1.d72c07e3ae581p-1, 0x1.002ad52e0055bp-1, 0x1.9a0c33fb34186p-1, +0x1.9f7df8d73efbfp-1, 0x1.643a6a66c874dp-1, 0x1.41f9b90e83f37p-1, 0x1.eb62e89bd6c5dp-2, +0x1.97eccdb32fd9ap-2, 0x1.03eee54207dddp-1, 0x1.f5c537abeb8a7p-2, 0x1.924e85a3249d1p-1, +0x1.5f999032bf332p-1, 0x1.95057cc72a0bp-1, 0x1.fa1ff833f43ffp-3, 0x1.1bbde82e377bdp-1, +0x1.4abc73369578ep-1, 0x1.d9d6c26bb3ad8p-2, 0x1.57d46042afa8cp-5, 0x1.b7229e7f6e454p-1, +0x1.132a18b626543p-1, 0x1.ed33da73da67bp-2, 0x1.96416a032c82dp-6, 0x1.bab34f437566ap-1, +0x1.9065dd4720cbcp-1, 0x1.58c33562b1867p-3, 0x1.9ba0032b374p-1, 0x1.ec51690bd8a2dp-2, +0x1.8aa8178b15503p-1, 0x1.c9d89ed393b14p-1, 0x1.b861aaa770c35p-1, 0x1.656b051acad61p-2, +0x1.a104a6b742095p-1, 0x1.7118ffaae232p-2, 0x1.3306da12660dbp-3, 0x1.40829f8a81054p-1, +0x1.cc6ea38398dd4p-5, 0x1.8ebb6f931d76ep-1, 0x1.b1a09ea363414p-4, 0x1.d17aa223a2f54p-2, +0x1.2554a9a24aa95p-2, 0x1.3116afaa622d6p-1, 0x1.ec2f5ac3d85ebp-3, 0x1.f243e503e487dp-1, +0x1.8c3858db1870bp-2, 0x1.f327a983e64f5p-2, 0x1.0e01cd2e1c03ap-1, 0x1.0d89fa021b13fp-5, +0x1.e67f35f7ccfe7p-1, 0x1.237f133646fe2p-1, 0x1.c7fb3e238ff68p-1, 0x1.f3529d53e6a54p-2, +0x1.a19006c343201p-5, 0x1.d4ad4973a95a9p-1, 0x1.68b93bd2d1727p-2, 0x1.aa7eddb354fdcp-1, +0x1.56f0b642ade17p-4, 0x1.3ff284427fe51p-3, 0x1.414f246a829e5p-2, 0x1.b5862e576b0c6p-1, +0x1.9d53fe033aa8p-5, 0x1.6424f372c849ep-3, 0x1.a0eec38341dd8p-3, 0x1.bad9e69775b3dp-1, +0x1.1195bcb2232b8p-1, 0x1.69facecad3f5ap-2, 0x1.f6b90c43ed722p-2, 0x1.2e5ca6ea5cb95p-1, +0x1.0ee35be21dc6bp-3, 0x1.319099f663213p-1, 0x1.719f7f82e33fp-5, 0x1.acc65793598cbp-2, +0x1.8a9d2683153a5p-3, 0x1.244b9d5a48974p-2, 0x1.914e219b229c4p-2, 0x1.28c3760e5186fp-1, +0x1.8bb9a36f17734p-1, 0x1.d6a8ddfbad51cp-1, 0x1.399c15b273383p-1, 0x1.7238d962e471bp-1, +0x1.f44fe25be89fcp-2, 0x1.019753d2032eap-1, 0x1.af88a0235f114p-3, 0x1.1440f19a2881ep-1, +0x1.ac893a8359127p-2, 0x1.203ec5f2407d9p-1, 0x1.7d7f9e92faff4p-2, 0x1.0122b40a02457p-1, +0x1.703b6702e076dp-1, 0x1.5f676182bececp-1, 0x1.6d51c4badaa39p-2, 0x1.8a10a6e314215p-1, +0x1.b8709e5f70e14p-1, 0x1.1ee4933e3dc92p-1, 0x1.44ea8d7a89d52p-1, 0x1.940cb61b28197p-2, +0x1.d3e1faa7a7c3fp-1, 0x1.011c4e620238ap-3, 0x1.f86301f7f0c6p-1, 0x1.79ad19c2f35a3p-5, +}; + +static const int babl_num_conversion_test_pixels = 128; + +static const double *babl_conversion_test_pixels = babl_path_test_pixels; + +static const int babl_num_format_test_pixels = 256; + +static const double *babl_format_test_pixels = babl_path_test_pixels; + +static const int babl_num_model_test_pixels = 512; + +static const double babl_model_test_pixels[2048] = { +-0x1.0f8630dbb8a62p-4, 0x1.18480e35ca29bp+0, 0x1.b444a8503556p-1, 0x1.c2ddee8785bbep-1, +0x1.261ae25d19029p+0, 0x1.80029017ccd1ep-1, 0x1.7b673ed62a01bp-2, -0x1.ce043776cf3bcp-5, +0x1.0a554d9ee1776p-1, 0x1.37c9b5c5a2c69p-2, -0x1.9dae22833b5c8p-5, 0x1.2330732eacc75p+0, +0x1.99315c726595ep-1, 0x1.fffac770ccc24p-4, -0x1.ab6b8d368a0a8p-6, 0x1.393ecc9c0c172p-3, +0x1.277773ac4eeeep+0, 0x1.605f4ecac0be9p-2, 0x1.84d85897d67d8p-1, 0x1.8f8a855febe1cp-1, +0x1.2d51d1bbf43d2p-1, 0x1.2efc2fa1912b9p+0, 0x1.2db59d7b2838p-1, 0x1.e74c8bf234ff7p-2, +0x1.3df9bc41af26ap-1, 0x1.33c1a828cde9cp-4, 0x1.d5f2398878b14p-1, 0x1.624b94145e30cp-1, +0x1.b0ea300295078p-1, -0x1.ce7858d069cp-8, 0x1.c6ae22838d5c4p-4, 0x1.f55fd04d84594p-1, +-0x1.cb99d59064009p-4, 0x1.29c069865380dp+0, 0x1.51d758690a152p-1, -0x1.4e8f718f69ebcp-3, +0x1.6d1cfcb873d38p-1, -0x1.5b6dba491d41ep-3, -0x1.43b72e9c21088p-6, 0x1.10be3f0eee49p-5, +0x1.56dfa56de0f27p-2, 0x1.09b72b3bad07ep-3, -0x1.df3383b6f19a8p-6, -0x1.0e29ba154f86cp-4, +0x1.d1a71446d6815p-2, 0x1.2845b77bea25p-3, 0x1.25e1c4957ef6cp-2, 0x1.a2b81620123cfp-2, +0x1.60a77baac14eep-1, -0x1.3a74ae0f41b63p-3, -0x1.5ff57f02bfebp-7, 0x1.3c9737d5ac618p-4, +-0x1.5c2ccab2b859ap-3, 0x1.8e9c2de5839ecp-1, 0x1.819f935a36726p-1, 0x1.4d54effb6776ap-1, +0x1.0dbd64ab4eaep+0, 0x1.e256ccf8917a5p-2, 0x1.24e876a57d042p-3, 0x1.65fe92ed32638p-1, +0x1.53f4dc310e5p-1, 0x1.d0ec90c06ea5fp-2, 0x1.e9eff99d6d797p-2, 0x1.80e807eb01dp-1, +0x1.ab216a01bca93p-2, -0x1.f9711343f2e28p-5, 0x1.93aa91ed8dbb8p-1, -0x1.1dc5a568a1f1cp-4, +-0x1.00c1960201834p-5, 0x1.eff33ee4acb34p-1, 0x1.4ee656a904332p-3, 0x1.01ca1fbd36c76p-1, +-0x1.a02ae5c34055fp-4, 0x1.564cbfe5dfcc9p-2, 0x1.466b4ee0f33dp-1, 0x1.1b3493d1699c4p-1, +0x1.5b9e343850d6p-1, 0x1.1fe14bcbd95c3p+0, 0x1.297b82a3ec90ap+0, 0x1.577d25dc4893ep-3, +0x1.2bc5e93d2458ap+0, -0x1.8ef372031de7p-5, 0x1.c7b12db05c2f1p-2, -0x1.97971a799594ap-3, +0x1.dc135d2bb826cp-1, -0x1.dc787336ec28p-10, 0x1.4dd58fc902118p-1, 0x1.9127c0165582ap-1, +0x1.56a390a913ad8p-1, 0x1.fd7613d8c7b8ep-1, 0x1.217fd92f0fcc8p-2, 0x1.10c819ceee5cep-3, +0x1.fe17d733fc2f8p-3, 0x1.ec1e4fcca5096p-1, 0x1.15c03a6291e6dp+0, 0x1.bb7d1139dd608p-1, +0x1.1976d28232edap+0, 0x1.58c4a046b1894p-1, 0x1.fe2ac2f32f88ap-1, -0x1.0e136b1ee8f3bp-3, +0x1.c4a2f17ebc791p-2, -0x1.4820dce8f6a88p-5, 0x1.24abab617c8a8p-1, 0x1.14b2826d5c984p-1, +0x1.fa1571158dc47p-2, 0x1.2c24f59bf1e2p-7, -0x1.b3fa8169ce5b8p-4, -0x1.b7af351d08f88p-6, +-0x1.0f99d7eeec008p-4, -0x1.27bac54582a8cp-3, 0x1.5d106c6920873p-2, -0x1.866e777ca676ap-4, +0x1.c43efa69eee4p-8, 0x1.f8c7337324c18p-1, -0x1.8269790fd19fdp-4, 0x1.230120c646024p+0, +0x1.2f1faecff7d8fp+0, 0x1.83eec70d6e43ep-1, 0x1.70c39b36e1872p-1, 0x1.4e7c87e29cf9p-1, +0x1.1afe747a35fcep-1, -0x1.938b7a5ff3e3cp-3, 0x1.f914f4bcbef6cp-1, 0x1.00756856cdb7ap+0, +0x1.eda1d79b0e76ep-1, 0x1.be2f0315e2c46p-1, 0x1.56017b7b78cfcp-1, 0x1.ba29163374522p-1, +0x1.611a79e1289b5p-2, 0x1.db8bb00550b0fp-2, 0x1.dd0aa1d7ba154p-1, 0x1.f9451c1bf28a2p-1, +0x1.3faa309a7f546p-1, 0x1.369fcd9a6d3f9p-2, 0x1.4f22703a9e44dp-2, -0x1.4d8bea35ce4b1p-4, +0x1.0666e10a0ccdcp-1, 0x1.aef09cb82aae1p-2, 0x1.77bb7bb622aap-4, 0x1.4ada0c782f4dcp-1, +0x1.e7e006e236267p-2, 0x1.43e60c11baff4p-1, 0x1.8072a3ef00e54p-1, 0x1.5ddee7d1eef1p-1, +0x1.ac8db231bf81dp-2, 0x1.b68bdb336d17cp-1, 0x1.3d7ac2f27af58p-1, 0x1.9c3fa0a4d218dp-2, +0x1.a82877a9b6b75p-2, 0x1.1f5fdef571f2ep-3, -0x1.272838dbe7ea2p-3, 0x1.2abc8b5abbdf8p+0, +0x1.256dfe2f17a8cp-3, 0x1.0ad8a67615b14p+0, 0x1.effd80fcacc7cp-1, -0x1.7b4879fc902aap-4, +0x1.6d79e9960e27p-1, 0x1.bf312c184b2f1p-2, 0x1.f1266d5a48b34p-1, -0x1.217cff95762d4p-3, +0x1.19e26a3d66f81p+0, 0x1.67caa8c602c88p-1, 0x1.0ba6214e7db2bp+0, 0x1.0d089ea94d448p-1, +-0x1.8d2f5b631a5ecp-3, 0x1.61dc514f90856p-3, 0x1.49bd87ce937bp-1, 0x1.0981709d4636p-1, +0x1.9655c9165fdecp-1, 0x1.df1b5dabbe36cp-1, -0x1.20ae9568a7c3cp-5, 0x1.1efb30dbd78fcp-4, +0x1.793606ae259f3p-2, 0x1.d4ce20fedccf6p-1, 0x1.e824b453d0496p-1, 0x1.f94842d658f6ep-1, +0x1.24f395cbe380cp-1, 0x1.7e7221b4967ddp-2, 0x1.8406b2f3080d4p-3, 0x1.2fb71c0392a17p+0, +0x1.6d776f03a7bbap-1, 0x1.f67813b0b9bccp-3, 0x1.2740742b1b4dbp+0, 0x1.0e9caa7aea062p+0, +0x1.67475b62ce8e8p-4, 0x1.d81802e6e3632p-1, 0x1.2a1b560e5436ap+0, 0x1.00649db4672fap+0, +0x1.4528ca1c23eb2p-3, 0x1.def6b3108aba2p-1, 0x1.0f6830f7b86ap+0, 0x1.ea8a095d6ead8p-5, +0x1.c0b5ead51b057p-2, 0x1.cfb63e206c394p-1, 0x1.9217a5ab242f4p-1, 0x1.c6eb09fb8dd5fp-2, +-0x1.f1c89fbd7d2afp-4, 0x1.d5bb1c36dea96p-3, 0x1.29aeae00b9c3cp+0, 0x1.be831b85169fcp-1, +-0x1.1dc41b28a1eecp-5, -0x1.289f9e08b7a5cp-4, 0x1.2464740648c8fp+0, 0x1.1125280aef172p-1, +0x1.0b1049d216209p+0, 0x1.ca8735f461db4p-1, 0x1.480e08f5c34f3p-2, 0x1.a95b86081f83dp-2, +0x1.1acf0342359dcp-4, 0x1.6b6f179e0a116p-1, 0x1.9b6b29499d3cbp-2, 0x1.f737b5d254d5cp-1, +0x1.27b9c17b1c405p+0, 0x1.6ba02d1e0a737p-2, 0x1.ae0aa45c28e22p-1, 0x1.5f607f692527p-5, +0x1.3c0d984f44e7cp-4, 0x1.9bdaea126ae9p-1, -0x1.3e9c8c1c16d2cp-3, 0x1.be6497eeaffc5p-2, +0x1.146b36b6f5a32p-1, 0x1.1ac7d2a768c2ep+0, 0x1.644152f92ee9p-1, 0x1.2d964943f4c63p+0, +0x1.9edf7d033dbfp-1, 0x1.1fe52470a630ap-2, 0x1.b077623360eebp-2, 0x1.c70ccf778e19ap-1, +0x1.6bc7bfac71292p-1, 0x1.8a654d5e47fddp-2, 0x1.1f298490a4b96p-1, 0x1.c051e4604d708p-1, +0x1.068519547370ap-1, 0x1.018c0631364b4p-1, 0x1.ac4298135885p-3, 0x1.6c7e8d247296bp-2, +0x1.96b356fcc7002p-3, 0x1.757e10e61e2f6p-1, 0x1.f1536ffcaf73ap-1, 0x1.deda391bbdb45p-2, +0x1.ea1b0860a102ep-3, 0x1.628a78d5f8482p-3, 0x1.007cd7e867601p-2, 0x1.8e4f7a8983054p-3, +0x1.74d91b2ae9b22p-1, -0x1.c0eab0dd1b6f1p-4, 0x1.bfe09a09e6279p-2, 0x1.01609a4d9c5adp+0, +0x1.ca23fa5d2de18p-1, 0x1.ed5f20c8a78afp-2, 0x1.ee3468b0a9358p-3, 0x1.e0a32aa08e13p-3, +0x1.8bb19e8e4a967p-2, 0x1.231a69c5dfce7p+0, 0x1.b3bbdb269aaacp-3, -0x1.ae1a219cf5dp-9, +0x1.bf03fd604ad4ap-3, 0x1.ab910e49bd888p-1, 0x1.15e28dde2bc51p+0, 0x1.20f792b575226p+0, +0x1.4ba9d24f642p-6, 0x1.c91073cd2bba7p-2, 0x1.9bdaa35f37b54p-1, 0x1.7748ce4d54f8p-1, +0x1.263d533f19477p+0, -0x1.7dec741fc8a5cp-3, -0x1.c6f28c638de52p-4, 0x1.2f045745913bcp-3, +0x1.7c695a44926c4p-1, 0x1.0f6dc26e1edb8p+0, 0x1.a19498c5a98f8p-1, 0x1.2eab41645d568p+0, +0x1.117bca5bbc91p-5, -0x1.124d86c88b018p-3, 0x1.6a0febfc6db96p-3, 0x1.ec573e3ca57b4p-1, +-0x1.64a5161c62e4p-5, 0x1.a0daae6a74e88p-1, 0x1.88b20c6bde30ep-1, 0x1.0d2007b0e70cep+0, +0x1.891ec31645708p-4, -0x1.889cff4fde06dp-3, 0x1.60139d1c59c0cp-4, 0x1.5d630e10545fap-1, +0x1.2539fd0f1740cp+0, 0x1.feafa1a730927p-2, 0x1.c21b5a5ab769ep-1, 0x1.4f3a4c2904daep-3, +0x1.1209e2c55747p-3, 0x1.877a0fab0ef42p-1, 0x1.7aba90495bdb4p-4, 0x1.6a8c5b546eb25p-2, +0x1.66f8c9693457p-7, 0x1.18cc2dea31985p+0, -0x1.cebb5376d0a9fp-4, -0x1.44fdcc28f0624p-5, +0x1.1c41d2996bb6ep+0, -0x1.89eab29cad6f8p-6, 0x1.3baf3eea775e7p-2, 0x1.4e8699110373ap-1, +-0x1.4f68dc929ed1cp-3, -0x1.37d1715c093c9p-4, 0x1.4576b56dbe20ap-1, 0x1.1d1f5f68a0a5p-4, +-0x1.49ca5dcf6062p-7, 0x1.03308b699ffabp+0, -0x1.59acf10919c05p-3, 0x1.2bd3ae358ada8p-3, +0x1.40d55ed74e778p-1, 0x1.98ad368ffe272p-1, -0x1.316b7735960cp-9, 0x1.d85f9da07d8cp-1, +0x1.9cec5d2806a58p-1, 0x1.226edd257810ep-2, 0x1.9eb88a94d70a9p-2, 0x1.80f9f0da3527p-1, +0x1.f6f5a5ccbab8p-1, 0x1.5889c9c9177ap-4, 0x1.1d9775283b2eep+0, -0x1.57723f6f7bb16p-4, +0x1.0c78d7a54c24ep+0, 0x1.07f57b687651p-7, 0x1.e17c98508fc5fp-2, -0x1.1f634fd8a52d1p-3, +-0x1.8571a54fd7b03p-4, 0x1.1d4d481fd4342p-1, 0x1.47b6b5b5c2ap-6, -0x1.7a43d77627bafp-3, +0x1.776458f1552f2p-1, 0x1.0e7bbb89502aap-1, 0x1.565c0999dfeb4p-1, 0x1.89f08838ad7aap-1, +0x1.4de7f3c435698p-1, 0x1.ab62c4dcf05fp-4, 0x1.09fd6d4613faep+0, 0x1.af2730b8f7e8p-1, +-0x1.54c7b7e90ff5ep-4, 0x1.11fb025823f6p+0, 0x1.3041415660828p+0, 0x1.7ca2ce4092df2p-1, +0x1.563cd4d446134p-1, -0x1.c553cd9d2442p-7, 0x1.dd380af55409bp-2, 0x1.1985972099718p-2, +0x1.e1110b855bbb9p-2, 0x1.122f5895bdf85p+0, -0x1.62a6a7ef921a2p-3, 0x1.022f8a46d12bep-2, +-0x1.6f67c0761203p-5, 0x1.2475d35d7c1eep+0, 0x1.791fc742f23f9p-2, -0x1.91accca32359ap-3, +-0x1.95ae9c365e90cp-5, 0x1.09da4b1813b4ap+0, -0x1.177682e22eed1p-3, 0x1.c5d47fe9f20f8p-5, +0x1.9536efc7f73abp-2, 0x1.5633dadc46014p-4, 0x1.2195c43bdcc5p-4, -0x1.2334acb5799cap-4, +0x1.9fa89d50d8eacp-1, 0x1.e0f52887c1ea6p-1, 0x1.cbf0590864ad8p-1, 0x1.0e5455521ca8ap-2, +-0x1.4013952280273p-3, 0x1.7984cd288ca32p-1, -0x1.80a8584fce1d9p-4, -0x1.43775df5ba224p-5, +0x1.37146b6cd48f2p-1, -0x1.afc7761cf928ap-4, 0x1.ced1becd373dp-1, 0x1.3756ced5a1e08p-4, +0x1.4ac1436295828p-4, 0x1.5c1d776f8507ap-3, 0x1.1a140bd1675b4p-1, 0x1.8047149b008e2p-1, +0x1.4ffa89b5d328p-5, 0x1.27d0c83be93b2p-1, -0x1.941e32b65b6fap-3, 0x1.91be4be989e3p-3, +0x1.0a56088ae178ep-1, 0x1.7bdd7ab491547p-2, 0x1.99ab18e00022ep-3, 0x1.576185337b8fcp-1, +0x1.acf3b479c04dap-3, 0x1.0de717d6e89afp-2, 0x1.da25339881174p-1, 0x1.9c3ecb68d2172p-1, +0x1.18206dad63742p-1, 0x1.325f2943318b2p+0, 0x1.de3e9c3e22e3ap-1, 0x1.458a9248f17b6p-3, +0x1.df4d14a225008p-1, 0x1.43c88eda87912p-1, 0x1.3ef335a74ab34p-1, 0x1.f5ae95bfeb5d4p-1, +0x1.5b9bd672b7378p-3, 0x1.75449103b755ep-1, 0x1.23eec3237b10cp+0, 0x1.f461c76fe8c3ap-1, +0x1.a5b208a67e974p-1, 0x1.b048dea82d5e8p-1, -0x1.2c6714858c016p-3, 0x1.1ab84bbf68a3dp+0, +-0x1.7c58a79fc57e2p-3, 0x1.3560ad1c045aep-1, 0x1.4f5145add1d5cp-1, 0x1.c4fe519d2396p-5, +-0x1.269e22824d3dp-6, 0x1.50b01f66a1604p-1, 0x1.ce4bbcf536311p-2, 0x1.67877de2cf0eep-1, +-0x1.5f1e2695f16f9p-3, 0x1.b3f70b1e9b214p-1, 0x1.620a72a92a7b4p-3, 0x1.e76f277d6877ep-3, +-0x1.5bde7b0f8489ep-4, -0x1.9df4b149a24fep-4, -0x1.412f4478e8c5p-3, 0x1.530b04b1d9492p-1, +-0x1.ab355076899dep-4, 0x1.f45931864f18cp-1, 0x1.056a07d80ad41p+0, 0x1.0826687cdd199p+0, +0x1.a376b3e9ad53bp-2, 0x1.c6c1bdd6c0b6bp-2, 0x1.9f95004da5906p-1, 0x1.8f08b5f7eade2p-1, +-0x1.b81ecf9d09d78p-6, 0x1.810c20289bb1cp-1, 0x1.1d0417016d3b6p-1, 0x1.fe57789596488p-1, +0x1.95dd30d4c553fp-2, 0x1.3850b84670a16p-1, 0x1.cd61a9a867902p-1, 0x1.a47da9d1af61bp-2, +0x1.d2bfbd9d3f18p-7, 0x1.6c9911d472cbbp-2, 0x1.54f5206ea9ea4p-1, 0x1.91f1d1398a4ap-3, +-0x1.7da6f86c94e79p-3, -0x1.525b3c15d7e9cp-4, 0x1.19352c4bcc03fp+0, -0x1.432b8568ecbd8p-3, +0x1.f0120a02468a8p-1, 0x1.243476af15358p-4, 0x1.1eee9de23ddd3p-2, 0x1.157e50835e2fdp+0, +0x1.5cb97c4c530c8p-3, 0x1.4b23c87296477p-2, 0x1.17a13f522f428p-1, 0x1.105c36d553eb9p-2, +0x1.9c257a9cd1e48p-4, 0x1.781dd12c89d53p-2, 0x1.90a42fc321484p-4, 0x1.6ba66faed74cep-1, +0x1.02eb16f405d62p+0, 0x1.1c07f656380ffp+0, 0x1.28917e80b7895p-2, 0x1.2f3dcee8c4e2p+0, +0x1.52b5a6690bd1ap-1, 0x1.0bd99e5417b33p+0, 0x1.f66caffb200cap-1, -0x1.23089e6246114p-3, +0x1.d33b1d05400fdp-2, 0x1.5d67f337879cap-1, 0x1.dfc627788c591p-2, 0x1.574ef3e515044p-1, +-0x1.4ac7a928fbf5cp-3, -0x1.0c7192087f49ap-4, 0x1.1118e74ceefeap+0, -0x1.2ed507e590dd4p-3, +0x1.a8ccca29b8p-5, 0x1.ee35c0c576052p-1, -0x1.b0cde769c8024p-4, -0x1.6f1e3f06116fcp-3, +-0x1.4ea85b429d50cp-3, 0x1.7f87f0d498a97p-2, 0x1.1acdbbd5cf351p+0, 0x1.a7aabaa34f556p-3, +0x1.cbbc4309fddeep-1, 0x1.cdaca1239b593p-2, 0x1.587f3079e4318p-1, 0x1.32d3ac61ff40fp+0, +0x1.04a5cfc73c7edp+0, 0x1.f0fa1cd8aec1p-1, 0x1.6ae7620c6f684p-1, 0x1.a8bb670a84aap-1, +0x1.c2a3a3191ee0ep-1, 0x1.32cb43d998c9cp+0, 0x1.a0d09e75a807ap-1, 0x1.5de5c62c55651p-2, +0x1.0b71aef7b07cfp+0, 0x1.30d6e804c8144p-1, 0x1.992e43d3325c7p-2, 0x1.34350c0c0203bp-2, +0x1.3ec3a6af4a54p-4, 0x1.11704e0622e09p+0, 0x1.2be7f028be364p+0, 0x1.dc678790859bcp-4, +-0x1.944ff283289ffp-3, 0x1.09cda43fad34ep+0, 0x1.58f8557c4b8a2p-3, 0x1.bdf366837be68p-5, +0x1.9b6aa2d8d06eep-1, 0x1.0d157dbbb3c48p-2, 0x1.33f06868ce47p-4, 0x1.ae26f26e8f812p-1, +0x1.acb51dae8c9d8p-1, -0x1.499c35b5c66cp-6, -0x1.3953155272a63p-3, 0x1.120afa522416p-1, +0x1.42efd54a85dfap-1, 0x1.7090d18badee6p-1, 0x1.114becaa2297ep-1, 0x1.cbaa1ce530eddp-2, +0x1.f6490ff0b95efp-2, 0x1.5cce84a920034p-5, 0x1.41507888e9074p-4, 0x1.5d871295ee416p-3, +0x1.4fd0991c393a8p-5, 0x1.17b089f695c78p+0, 0x1.6cbb0e27a642ep-1, -0x1.d42ff756db933p-4, +0x1.f3a32b171a797p-2, -0x1.68a1b2d60476bp-4, 0x1.8bf5db0e4b1edp-2, 0x1.881070c7dcedap-1, +0x1.2e19660bf5cc6p+0, 0x1.6ec8ced943f7fp-2, 0x1.1501e4102a03cp+0, 0x1.2ec29aeec3eb9p+0, +0x1.9265261657fd8p-3, 0x1.9db77190083b8p-5, 0x1.2fe05d9bf95ap-5, -0x1.9989e83666471p-3, +0x1.06cc9c5d40cc6p-1, 0x1.3fc4f2a5b2bd1p-2, 0x1.ae2adeccf5ef4p-1, 0x1.346d4e7f35a76p-3, +0x1.f7f7fc1723231p-2, 0x1.c63c7fdebfac4p-1, 0x1.c58cb45857e64p-1, -0x1.3bd498af44761p-4, +0x1.a0cdd6080e687p-2, 0x1.c1c8ea70505e8p-3, 0x1.24c0e1c3164e8p-1, 0x1.18f8ecb165251p+0, +0x1.d94b129a18fc7p-2, 0x1.b3515740336f8p-1, 0x1.1769bd0efba04p-4, 0x1.6808f94ad011ep-1, +0x1.7c4c04c15efe6p-1, 0x1.f60eac2fec1d6p-1, 0x1.93e960c65b05ep-1, 0x1.f6e67c1d8766p-6, +0x1.17b06e1dc8fa7p+0, -0x1.904303cfed538p-6, 0x1.fe2e0b0f2f8f4p-1, 0x1.1296a0f3bec6ep+0, +0x1.1148b5ba22916p-1, 0x1.c1cb6cc91d306p-1, 0x1.0e2608ac82b27p+0, 0x1.dc4865a61ef72p-1, +0x1.2106a524420d5p+0, -0x1.b8e279c9d82b7p-4, 0x1.dc4c51feebcbep-1, 0x1.c4e7007389cdfp-2, +0x1.9e592100097efp-2, 0x1.2410ca5fe1bb2p-1, 0x1.95f53a3ff8b74p-1, 0x1.18c77a78fe5bcp+0, +0x1.07cdc7b07601fp-2, 0x1.ea371063d46e1p-2, -0x1.7148122948f69p-3, 0x1.bab43542a89bap-1, +0x1.cbf4293464b52p-1, 0x1.2ed5439f2a774p-1, 0x1.863fa83972e5ap-1, 0x1.48cd3055c4cd8p-3, +0x1.ef00d1cd779b4p-3, 0x1.07c9a320dc601p+0, 0x1.105155e353d5ep+0, 0x1.2f394fd05e72ap+0, +0x1.9f3b8c05a4dd8p-1, 0x1.4e25a6269c4b4p-1, 0x1.f0db456a481dp-7, 0x1.683601d536d26p-1, +0x1.a809f46e83472p-1, -0x1.81d3b90636dabp-3, 0x1.26fcdd50b4602p-1, 0x1.4bb10ef297622p-3, +0x1.c7bce4edf5e02p-1, 0x1.b9c5107b738a1p-2, -0x1.b98de849d9824p-4, 0x1.a363c8ca79facp-1, +0x1.0c2c9f707ebfap-1, 0x1.05c07db0d84ddp+0, 0x1.f70e2983ee1cp-5, 0x1.20dfcb2b74f2dp+0, +0x1.9256beab24ad7p-2, 0x1.0de6419f4effbp+0, 0x1.06741271401b5p+0, 0x1.b378a99433be2p-1, +0x1.55034a09106cfp-2, 0x1.0b7e435f4a2fbp+0, 0x1.07c6786adc59ap-1, 0x1.00f67cceceb98p-5, +0x1.bed6c7e37dad9p-2, 0x1.3cfdd1ef46c84p-4, 0x1.9152349cbc3dfp-2, 0x1.c191fed11cbdap-1, +-0x1.799b2f62f3367p-4, 0x1.05cabf520b958p-2, 0x1.b99e3805d9a2ep-1, 0x1.d66e8c854676cp-1, +0x1.1bb8b61b043e4p+0, 0x1.13e405c0f494dp+0, 0x1.b07c4fdcfa923p-2, 0x1.7914fa3e255d2p-1, +0x1.16dcc1d360ecbp+0, 0x1.32d0b5d598d4ap+0, 0x1.1933d23098cep+0, 0x1.8f100228b7b98p-1, +0x1.b83b1af9d6dc9p-2, 0x1.30ce26e1fb35ep+0, 0x1.981ac90e6368bp-2, 0x1.275849a9e84a3p+0, +0x1.035b715cd383bp+0, 0x1.51e4ad85d6fc8p-1, 0x1.1504e1a22a09cp+0, 0x1.a5ef6e8ce5788p-3, +0x1.074aca5e0e958p-1, 0x1.d08b81bad44a4p-1, -0x1.25c784bbe528ap-3, 0x1.0c196ae47e994p+0, +0x1.8121a20d68a9ap-1, 0x1.24bafda24976p-1, -0x1.f1214683e242ap-4, -0x1.76581b361fe4p-7, +0x1.b2c11e4698b56p-1, 0x1.e1d6afc8907a3p-2, 0x1.110f826555523p+0, 0x1.e9f41ec63a4eap-1, +0x1.da371df3b46e4p-1, 0x1.7556d66484474p-1, 0x1.59fc44df80c54p-1, 0x1.ab4223c356844p-1, +0x1.36b87b80070a8p-1, -0x1.a15fccf00f8c7p-4, 0x1.7be16f2af7c2dp-2, 0x1.fc17317591c7fp-2, +-0x1.a787a2f682428p-4, 0x1.13e3eb155afbp-2, 0x1.35a9a3e8d1b98p-4, 0x1.0d92ff8a1b26p-1, +0x1.0a4fb9c547d2ap-2, 0x1.5928ff6ab252p-1, 0x1.ebba58e3d7749p-2, 0x1.2bc2c98257858p-4, +0x1.129d1a288ba08p-3, 0x1.730112947f9bbp-2, 0x1.eab5367f089d9p-2, 0x1.b258774e97e42p-1, +0x1.1d2d24c8a0c08p-4, 0x1.124f2076f16bp-1, 0x1.6424e6ab95168p-1, 0x1.0596d68671941p+0, +-0x1.7ae2429628f7cp-4, 0x1.8c6724417f34ap-1, -0x1.844867196ef74p-3, 0x1.e9cb3c5fd3966p-1, +0x1.6ec15b9c771c4p-5, 0x1.13b9a8b55aa68p+0, 0x1.6d58f4ba0de52p-1, 0x1.2bc4cd0cbdfp+0, +0x1.3663c168d32dep-1, 0x1.83bb4cb63aa9cp-3, 0x1.9c655770d2644p-1, 0x1.ad759f368e1ep-7, +0x1.26527febe63e8p-2, -0x1.820aecb63749p-6, 0x1.6b27d59e0982cp-1, 0x1.893d640645adfp-2, +0x1.c8900916c4533p-2, 0x1.f84370818a208p-1, 0x1.1c4c0bf9d231bp+0, 0x1.cfd647da0613p-1, +0x1.d60c130bac181p-2, 0x1.901dbbf3203b7p-2, 0x1.2dda83b85bb51p+0, 0x1.9613b6765f5aap-1, +0x1.e7f5cdafcfeb8p-1, 0x1.d55278887771bp-2, 0x1.c40b8eb1ee7d7p-2, -0x1.6b2bd08c6ff14p-3, +0x1.31af6190c9c52p+0, -0x1.01ddc33b9d554p-4, 0x1.0b648faae395ep+0, -0x1.931f5cbcbfd86p-4, +0x1.d291d2460b8ap-1, 0x1.0e0eb5fae8ea3p+0, 0x1.0ee6db975100ep+0, 0x1.27f227331cb12p+0, +0x1.dd2a56f487216p-1, 0x1.24c0457cafe6ep-1, 0x1.2083c109daa11p+0, 0x1.5a4f63e2b49ebp-2, +0x1.ec157f10a4f7cp-1, 0x1.7706731887a66p-1, 0x1.1a43eed49aee4p-1, 0x1.8d8589a981718p-5, +0x1.d15c82193c52ap-1, 0x1.f055e0c3e0ab8p-5, 0x1.43dd710421546p-1, 0x1.3cf880f8e0574p-3, +-0x1.3c765f78df533p-3, 0x1.160f228bc5b7cp-1, -0x1.1d47f94f075ccp-3, 0x1.024ed80e049dap-1, +0x1.22423378aaeadp+0, -0x1.480d753c29b49p-3, 0x1.8fe140c31fc24p-4, 0x1.c613ce3525c14p-1, +0x1.fe188ac262977p-2, 0x1.7a6855d7c19d6p-1, 0x1.d1af4078702b4p-1, 0x1.f809442d89ac1p-2, +0x1.c09303dc4df2ep-1, 0x1.8211f96237572p-1, 0x1.30071ce593416p-1, 0x1.2cbe6fb6597cep-1, +0x1.37c8feec092bap-1, 0x1.cedcdb506a867p-2, 0x1.163c57b092df2p-1, 0x1.5d19def453cd3p-2, +-0x1.68decd1c6b574p-3, 0x1.e1bae6bbc375dp-2, 0x1.c21b07d1ea9c8p-1, 0x1.f844322ff0886p-1, +0x1.7d800a696164p-9, 0x1.d7e241007c914p-3, -0x1.55276e6f771bbp-3, 0x1.1ca03447d2dap+0, +0x1.f6c8a965872adp-2, 0x1.54f9fbcea9f4p-1, 0x1.10c1130eee4ecp-4, 0x1.12ad233af227p-1, +0x1.28adfd02515bp-7, 0x1.04b229d209644p-3, -0x1.45a9ac75be869p-3, -0x1.d3f4786a0e4f8p-5, +0x1.563e4e2f79496p-3, 0x1.1be08d856af44p-3, 0x1.079d768a75a15p+0, 0x1.bb023f5376048p-1, +0x1.13e36fd28e2d4p+0, 0x1.7a83c7215b6dep-1, 0x1.4281ec0f51d08p-3, 0x1.81f37d156a4d6p-1, +0x1.2c5eb43a58bd6p-2, 0x1.e70dfe4fce1cp-1, 0x1.212e197f0f29p-3, 0x1.1a2f5fb7cdf86p+0, +0x1.a058164673e34p-3, 0x1.c4ee4476bd0fcp-1, 0x1.f21521f7175d6p-3, 0x1.d112e2c3a225cp-3, +0x1.3d9545a27b2a8p-3, -0x1.3e30b0b5af94bp-4, 0x1.88a11e9caadbp-7, 0x1.6e926fbe10581p-2, +0x1.6931c11f9f305p-2, 0x1.73f0f44fb4ae8p-5, 0x1.144674055bc01p-2, 0x1.0b31cdd47ccap+0, +0x1.d29f717a0ba54p-1, 0x1.12a1c2caf2104p-1, 0x1.8554b0efd7761p-2, 0x1.1ed447ea3da89p+0, +0x1.ba34b3a5dacfcp-1, 0x1.af4ca781c4ff9p-2, -0x1.17f47878964f6p-3, -0x1.5a887ce91b776p-3, +0x1.8504dd8e3d3cep-1, 0x1.17d21aae960a9p+0, 0x1.cac686852f26ap-1, 0x1.466556c759976p-1, +0x1.43c19618211ccp-1, -0x1.2bfd938bf194cp-3, 0x1.87c9b5c30f936p-3, 0x1.202bab4dd9f0fp+0, +0x1.013a7fe99c0eap+0, 0x1.10a45a36ee156p-1, 0x1.0727d7cfa7e94p+0, 0x1.0927be354582p-7, +0x1.bcb0e106ac94ep-3, 0x1.23748db57a1c4p-4, 0x1.bd9f7c2b7b3efp-2, 0x1.24f7f01649efep-1, +0x1.8c3b88197edd6p-3, 0x1.4b58a8f696b16p-1, 0x1.2153c72ddc412p+0, 0x1.7e0e28fc95b5ep-1, +0x1.c8fe1ea1f862ap-1, 0x1.999187c999896p-3, 0x1.2e0b5e398f4ap-1, 0x1.353729b00407ep-1, +0x1.df6c8b23bed92p-1, 0x1.2b8e0e8bf0b5cp+0, 0x1.0c79531e18f2ap-1, 0x1.333ad85d99a8ep-1, +0x1.90b814e4bb09bp-2, 0x1.2ce29b6659c52p-1, 0x1.42ff1f89b9318p-1, -0x1.9057e6b653e34p-5, +0x1.ec40d4ba3ee7fp-2, 0x1.4ebe7f45d0b03p-2, 0x1.93c63ec25abfap-1, -0x1.64232fb5fb79bp-4, +0x1.858c824ca4b29p-2, 0x1.2e0f894cc2857p+0, -0x1.4a4dd71c2e355p-3, 0x1.7b536a4c90406p-3, +0x1.065d066473206p-1, 0x1.1111501f5555dp+0, 0x1.92bfbfe4bf191p-2, 0x1.dbefa50c84acp-1, +-0x1.fd53476a610d4p-5, 0x1.074b023741c94p+0, 0x1.35025d6d9d37fp-2, 0x1.534027ec4019dp-2, +0x1.e7108df234877p-2, 0x1.db095a9a1c792p-3, -0x1.f5c14bca51e91p-4, 0x1.587ffcbc4a998p-3, +0x1.438d1eff53e7p-1, 0x1.55b99b26ab734p-1, 0x1.f1bd8f4b16ae4p-1, 0x1.7926876e25803p-2, +0x1.466f51d826782p-1, 0x1.2fa0f7fa5f41fp-2, 0x1.2b1a413d8967bp+0, -0x1.5e6c2885f00b9p-3, +0x1.158cbee4f7e65p+0, 0x1.32cd3b9e659a6p-1, -0x1.474444cf5b558p-6, 0x1.75a703761e813p-2, +0x1.204970d3da2c7p+0, 0x1.eff28302464b8p-1, 0x1.e96b04556c6f9p-2, 0x1.39e578cf4097bp-2, +0x1.e5ab2f2fcb566p-1, 0x1.088872ca1110ep-1, 0x1.622dfd612ac26p-1, 0x1.0b439e507cedap-2, +0x1.88895944aaac3p-2, -0x1.d6c448c3ad88ap-4, -0x1.353c8dcf3747p-7, 0x1.0ad5de9215abcp-1, +0x1.1d11f0e106f0bp+0, 0x1.f82545d7237dbp-2, 0x1.0d6e2c7a1adc5p+0, 0x1.8e8b849e504a3p-2, +0x1.d93b5ff87f438p-1, 0x1.21454af0a8f1p+0, 0x1.83cc27ea3acb8p-1, 0x1.6cc43122d9885p-2, +0x1.31ddcaa196eecp-1, 0x1.0f2350c95179ep-1, 0x1.d95bc2aee5eaap-1, 0x1.1e6b60dbd6704p-5, +0x1.06ad199673c09p+0, 0x1.c929dec39253cp-1, 0x1.059092953e544p-4, 0x1.d20d4a8ad74dcp-1, +0x1.2b2167ebefdc5p-2, 0x1.f3795a4a4d59p-3, 0x1.33d32efc013fcp-4, 0x1.bef4bcc6b11cap-3, +0x1.9a9cca36686cp-7, 0x1.81964e709cc62p-1, 0x1.731651ffb2f96p-1, 0x1.293e045f85af4p+0, +0x1.1dc2d6a23b858p-4, 0x1.bb77a3d376ef2p-3, 0x1.c6ddc5ed2755p-3, 0x1.4e636ddd032d4p-1, +0x1.34d78c90d0157p-2, 0x1.a691cb54e6bd3p-2, -0x1.a5a33f9ce4e08p-6, 0x1.b8a50679d7b06p-3, +0x1.1ae0f77e35c1fp+0, -0x1.62dc9dd2c5b94p-3, 0x1.9bd56a540477ap-1, 0x1.a896e88e8461p-1, +0x1.281cea6c5039dp+0, 0x1.727657a47e863p-2, -0x1.db595303b6b4p-7, 0x1.1bb1390e37626p-1, +0x1.17627180fb91bp+0, 0x1.1c2a61e49ebb2p+0, 0x1.93fe55825b2fcp-1, 0x1.d5b8afc2dea4ap-1, +0x1.9b183c20cfcap-1, 0x1.0d8b671db4b07p+0, 0x1.415f93e74f8bep-1, -0x1.adebb2a9c23dep-4, +0x1.8c75f30fe5b88p-4, 0x1.ce40602d361a6p-1, 0x1.40cc3e90e7fedp-2, 0x1.3cbf2fe2797e5p-2, +0x1.d2e09063a5c11p-2, -0x1.4ba7d48f641c8p-3, 0x1.14ea7488903b4p-2, 0x1.738f096c80b7ap-1, +0x1.04b4b47a09695p-2, 0x1.62931225f8596p-1, 0x1.6e3043760f93cp-3, 0x1.832c86ebd325ep-1, +-0x1.845374dca240ap-4, 0x1.698aba99397bdp-2, 0x1.2bde177857bc3p+0, -0x1.84bb98163caa7p-3, +0x1.84e9387ca36c1p-2, 0x1.8d2b32d8b3fp-1, 0x1.adce68ef5b9ccp-1, 0x1.58901555e4535p-2, +-0x1.00003ddb999a2p-4, 0x1.0663b504d9943p+0, 0x1.172fd50fc7f94p+0, -0x1.5e862c95f03f9p-3, +0x1.deb5c766f09ecp-1, 0x1.5bf79935eb226p-1, 0x1.e47d8b096294ap-1, 0x1.13679d215a026p-1, +0x1.10a8010554832p-1, 0x1.7eed710964415p-2, 0x1.44108d328821p-1, 0x1.a89d25cdb7a0cp-1, +0x1.3a85922f41d7cp-4, 0x1.256e8970b1438p+0, -0x1.f69a8ad0ba02p-5, 0x1.772760de2181ep-1, +0x1.2f2cc214c4bfep+0, 0x1.a2e3effb45c7dp-2, 0x1.08a007c877a67p-2, 0x1.e935dfea38d22p-3, +-0x1.930ae2432615dp-4, 0x1.46427b28261eap-1, 0x1.31f032a663e06p+0, 0x1.bd4dc4037a9ap-8, +0x1.30b71f6d94a17p+0, 0x1.2a9b16e8bb9c9p+0, 0x1.16437d1bc62p-6, 0x1.7af8e9662924fp-2, +0x1.7bfafa3e2b292p-1, 0x1.0e73759f501a2p+0, 0x1.d02ae5c46d22ap-1, 0x1.c26158e91e5c4p-1, +0x1.c347eedc535cap-1, 0x1.9824297d96aecp-1, 0x1.d126342fa24c6p-1, 0x1.3b974fd743fb6p-1, +0x1.1b6ab88f03a23p-2, 0x1.4f3d58cd04e1p-1, -0x1.767797362022cp-5, 0x1.0261e1dc6b2a2p+0, +-0x1.5ec9546923f91p-3, 0x1.930f7a2b261eep-1, 0x1.46fa831a8df5p-1, 0x1.b0261c902d18cp-4, +0x1.778626a088a5ep-1, 0x1.8df740d98254ep-1, 0x1.09c9456b46c5bp+0, 0x1.6f79445e1225ap-1, +-0x1.bf4b6536b1cbp-7, 0x1.8be142764af5cp-4, 0x1.2816915f83605p+0, 0x1.683ee47603b0cp-4, +0x1.de2509e2ef7d4p-1, 0x1.26d390cfe740cp+0, 0x1.2dd1bcfa5ba37p-2, 0x1.d92ce25218c02p-1, +0x1.1e3b7482a2dd5p+0, 0x1.060160cc72692p-1, 0x1.821784c96a954p-4, 0x1.520b7cdd0a7d6p-1, +0x1.7903cb3e253abp-2, -0x1.97e240232fc48p-3, 0x1.5c0cdeb451b35p-2, 0x1.9636e0f65fa0cp-5, +0x1.9891ffdb3123ep-1, 0x1.8c63d1dcb261p-5, 0x1.bb61244d105bep-1, -0x1.007c2925342b9p-3, +0x1.ce69fc51366dap-1, 0x1.053008a2d72cep+0, 0x1.15858feaf7d7ep+0, 0x1.dd1e0d9d53d5cp-1, +0x1.37092504d478cp-1, 0x1.0b9f3c8a173e6p-1, -0x1.4d0e54f29a1cbp-3, 0x1.20a394e5747a6p-3, +0x1.9980b7bccc9acp-4, 0x1.135aae02f3822p+0, 0x1.0f044801b7a22p+0, 0x1.25329f924a653p-2, +-0x1.c69c42e9f39f8p-6, 0x1.03e7a62b3b028p+0, 0x1.260792be4c0f2p-1, 0x1.1b2b471903235p+0, +0x1.ef10078fde2p-1, 0x1.11ab6bd0f023ap+0, 0x1.a91d0a1db8a08p-1, 0x1.c5208a2923daap-1, +0x1.85e3a404a560dp-2, 0x1.1fe3308ea62ccp+0, 0x1.618b41345cb01p-2, 0x1.e5da1e07cbb44p-1, +0x1.201a1bbd73677p+0, 0x1.c53276605731cp-1, 0x1.32d1f93ecc0a5p+0, 0x1.725fd0ea17f2cp-1, +0x1.222f8cf2445f2p+0, 0x1.ba9eb064420a2p-1, 0x1.98a72d0ccae7ep-1, 0x1.ac62afcf58c56p-1, +0x1.5e985b3df063ep-1, 0x1.5d4be676ba97cp-1, 0x1.231a5700ac9bp-1, 0x1.79d8ceb626e4cp-4, +0x1.425e4a68eb2p-8, 0x1.363d28300613ep-1, 0x1.bb94caed10c31p-2, 0x1.383673e5a3a01p-2, +0x1.ed183b93da307p-2, 0x1.2ad91e1bef4bdp-2, 0x1.951af027f702ap-1, 0x1.4ebda21903e1ap-1, +0x1.b6aba7f03a24p-4, 0x1.52f071e90c474p-3, 0x1.1eadc9e4a3c1ep-1, -0x1.0203a7786a6dcp-3, +0x1.1ac8db5bcf2b4p-5, 0x1.8591b6597189cp-3, 0x1.eb0606b16fa5ap-1, 0x1.3b04c61e76098p-1, +0x1.d623423d45ep-4, 0x1.ab2a0729bcba4p-4, 0x1.74f0fb7fb6aebp-2, 0x1.492395c29246cp-5, +0x1.307f0ed5fa97bp+0, 0x1.736c13a2e6d81p-2, 0x1.ed5870aca77dap-1, 0x1.1f7b68923ef6dp+0, +0x1.bdca7936aec78p-6, 0x1.1f99374d7265ap-1, 0x1.84f31a87d6b3p-1, 0x1.d2ed156e0c408p-1, +0x1.67eb75dc69704p-5, 0x1.069c2c88739eap-3, -0x1.90f8dc9cbb8b6p-3, 0x1.fda76963fb4eap-3, +0x1.de4a99b88962p-1, 0x1.bfe52976b2fd7p-2, 0x1.81eb7ab7d0a3cp-1, 0x1.b9c14459d9e8cp-3, +0x1.dbc58a2fb78bp-1, 0x1.614008e78f4cdp-2, 0x1.11ca2ccaf0613p+0, -0x1.4f2d9cf904c1ap-3, +0x1.6bc28754711eap-1, 0x1.b7b77a1d09087p-2, -0x1.6f2f55afab2b9p-4, 0x1.e3d57b709477cp-1, +0x1.a3a6910b474d2p-1, 0x1.11c34133bd201p+0, 0x1.70e7b6514835dp-2, 0x1.2268afdf78049p+0, +-0x1.af5463e9c50f8p-6, 0x1.d952bf4ee5d8ap-1, -0x1.a059aa1cda4d8p-6, -0x1.2e2ebdf58f91p-5, +0x1.651315a2ca26p-4, 0x1.235e04e11388dp+0, -0x1.d2940936d85b5p-4, 0x1.41ee39d41d75fp-2, +0x1.ffddb5526621bp-2, 0x1.b106ffccfba7ap-1, 0x1.afb97d835f728p-6, 0x1.7cd3f86d600e4p-1, +0x1.2c8a38aabf7adp+0, 0x1.f4bf661d83178p-6, 0x1.31521c9662a43p+0, 0x1.d0f8a4a20857ap-1, +0x1.55fef652abfdep-1, 0x1.7e294d7895ec2p-1, -0x1.37eb859c0970bp-4, 0x1.96bc342cc711fp-2, +-0x1.bce8a3fd136afp-4, 0x1.317ea7a462fd5p+0, 0x1.bbf2328844b11p-2, 0x1.9a8bd940ceb16p-1, +0x1.b0e54be1c830fp-2, 0x1.167994f493598p-1, 0x1.17faee456329p-1, 0x1.5b2d0902b659cp-5, +0x1.a73361e01b337p-2, 0x1.1b6a97ea36d53p+0, -0x1.7c46c39c92278p-6, 0x1.2c85743725d7ap-1, +0x1.a9c188b75383p-1, 0x1.36058be26c0bp-3, 0x1.8008eebe3345p-1, 0x1.1e6528ebd663fp+0, +0x1.6eb832a2dd704p-4, 0x1.ac1cd4035839ap-1, 0x1.dd6c2156ee0b6p-3, 0x1.942c4763f5256p-1, +0x1.ed7adac8a7c27p-2, 0x1.d67e755079c99p-2, 0x1.5533b2caaa675p-2, 0x1.d2d6f09ba5addp-2, +0x1.614b9c3f8f64p-1, 0x1.4daf584c34f83p-2, 0x1.4ff6da0f6cba6p-3, 0x1.4390b098ed87cp-3, +-0x1.0595b31ed7f84p-3, 0x1.26cd586d80cddp-2, 0x1.82a8aca89eeaep-1, -0x1.29c1ae0f20504p-5, +0x1.1ffb2a270cc31p-2, -0x1.71281fcfaf1ep-7, 0x1.ee5624c64312ap-1, 0x1.ced6a16ad0e06p-1, +0x1.771b5adbbb038p-1, 0x1.3fd5594a7faabp-2, 0x1.2577ec337e231p+0, -0x1.bb15a9a9dc92p-5, +0x1.c165d836b5fecp-3, -0x1.3ac6210f42592p-4, 0x1.773a8002ee75p-1, -0x1.312d9e85958e8p-3, +0x1.191e0a85656f4p-2, 0x1.21ba10b576a74p-2, 0x1.2b72a84e56e55p+0, 0x1.20cc71fd74cc2p-1, +-0x1.4b64506f63958p-4, 0x1.9f67ca19a535ep-3, 0x1.3a494bd5a7c5cp-3, 0x1.33b749bccdd4ep-1, +0x1.b97f93950c98cp-1, 0x1.5f9292c1258b8p-1, -0x1.250e91857d506p-3, 0x1.68c992dc6b2cbp-2, +-0x1.7ff09e12ffe14p-3, 0x1.c481e2238903cp-3, 0x1.6baf5bfad75eap-1, -0x1.d7d96f307c7fcp-4, +0x1.6aed8b26090e4p-1, 0x1.0fe3446eec934p-2, 0x1.8cf1da4fe6b08p-5, 0x1.30a8c34ffaeb2p+0, +0x1.d126d03d3be73p-2, -0x1.7d049002fa092p-3, 0x1.c9c1c1a460504p-1, -0x1.ade8db035bd3p-7, +0x1.4e1fde15cf72dp-2, 0x1.ae4b339f5c966p-1, 0x1.0ff5a17eecb8p-3, 0x1.7dcfcb8495392p-1, +0x1.ed58d5e3dab1ap-1, 0x1.10cf27648804bp+0, 0x1.97eaca49963bep-1, 0x1.38174ba8d694cp-5, +0x1.3053c2df2d744p-3, 0x1.8869b47a44068p-1, 0x1.9ab44d1e689bcp-1, 0x1.121d9a208aa19p-2, +0x1.2b5506b389dd4p+0, 0x1.27d6833d1c79dp+0, 0x1.11963e99bcc62p+0, 0x1.a9c33a9020534p-1, +0x1.48d932cf5e7f2p-1, 0x1.20279f9c404f4p+0, -0x1.07cc4db542ccp-6, 0x1.4f4371b69e86ep-1, +0x1.2c2545558b7dcp-3, 0x1.c9d75ff92d486p-1, 0x1.7aaeaa36f55d6p-1, 0x1.0e2ea170e92a1p+0, +-0x1.49d643b5c6dfcp-5, 0x1.f9e42e425a2ecp-1, 0x1.0ba4318db0e2p+0, 0x1.3a5c6a4f4185ap-1, +0x1.0084b856cdd64p+0, 0x1.7aa3be53c2144p-1, 0x1.9a0b2d499a7ccp-1, 0x1.06cbe5320d97cp-3, +0x1.8511170e3d555p-2, 0x1.22377e07de089p+0, 0x1.12f4959bbf82cp+0, 0x1.25ebebfbe5716p-3, +0x1.ffa6e46ccc1aap-1, 0x1.576d8f1515418p-1, 0x1.86c5ac4b0d8b5p-2, -0x1.aaa9141ceeecp-5, +0x1.e5c3748d65208p-3, -0x1.09e8650213d1p-6, 0x1.a9954469b990fp-2, 0x1.a6d21079b40a8p-3, +-0x1.f08a3143e1148p-5, 0x1.23217203dfdc7p-2, -0x1.4bba9edf64421p-3, 0x1.9036f62186d44p-1, +0x1.ade64739c232ep-3, 0x1.672b881c67fp-6, 0x1.e45005b0956ccp-3, 0x1.1ce9498fd36c2p-1, +0x1.1dbb91503b772p+0, 0x1.2d1489078d5c4p+0, 0x1.a5c04c0b4b809p-2, -0x1.fc65400a5f30fp-4, +0x1.eda6d9e574e74p-1, 0x1.0784456a0f088p-2, 0x1.613628b45c05ep-1, 0x1.8849e4271093cp-1, +0x1.326623b797ff8p+0, 0x1.29b5df23ed055p-2, 0x1.1831a1efc9fcep+0, 0x1.81dcd9149d535p-2, +0x1.cb8e14d6ca4f4p-3, 0x1.efe608ab12ff4p-1, 0x1.70cfcdf54806p-1, 0x1.848066cfd5cdp-6, +0x1.c1da62b383b4bp-2, -0x1.919e128989a2ap-4, 0x1.5f7f616c58984p-3, 0x1.c0c474e38188ep-1, +0x1.5f1b0769249c4p-4, 0x1.9310e0fbf2ee8p-1, -0x1.df6b6b23bed6fp-4, 0x1.cd0490fd33a2ap-3, +-0x1.071331b8748cdp-3, -0x1.43ad75af5427dp-4, -0x1.8bb930164aa5ap-3, 0x1.2036578d739fdp-2, +0x1.24a84fc57c83cp-3, 0x1.f2306f33e460cp-3, 0x1.09b56dde79d14p+0, 0x1.e3ad02b6fa8dp-5, +0x1.c13b1dc04f43p-3, 0x1.ff926d70cbf18p-3, 0x1.14523a4228a46p-3, -0x1.0e18a21bb5cb8p-6, +0x1.6a0d2477a0e7p-1, 0x1.06588ed5a64abp+0, 0x1.e63f857c994bcp-1, 0x1.687305806a7fap-1, +0x1.d92d368a18c0cp-4, 0x1.b03c62f02d45ap-1, -0x1.e827a30a36b5cp-4, 0x1.146f926d5c126p-1, +0x1.39bc0534d9de6p-1, 0x1.9a313ffa6795cp-1, 0x1.86f9fc0a41272p-1, -0x1.2ef4bf75911ccp-3, +0x1.ce63e40f9cc7cp-1, 0x1.22a01d68aba6ap+0, 0x1.db6dab6c83a82p-1, 0x1.3056d5b460adap+0, +0x1.71eab5614a3bcp-1, 0x1.02f352373919ep+0, 0x1.b621a4f0391p-3, 0x1.968c4f59937fp-1, +0x1.21ebae0f770a9p+0, 0x1.c4020e738804p-3, -0x1.fdf75a5d95886p-4, 0x1.34d84d4f367d4p-4, +0x1.53f305d5db192p-1, 0x1.1d092b6ea078cp+0, 0x1.5678807779bdbp-2, 0x1.155419d62aa83p+0, +0x1.4e422f35cfb7ap-3, 0x1.56b73532ad6e6p-1, -0x1.10bbdf422177cp-3, 0x1.12020b55bd9dbp+0, +0x1.fa03d8e3f4079p-2, 0x1.043b7a0c0876fp+0, 0x1.2610b5bfe5bbp-1, 0x1.9e8df9a9a3826p-1, +0x1.524cf09c3e338p-1, 0x1.4f7227ca9ee44p-1, 0x1.325c96abfe52cp-3, 0x1.2d147b28c08f4p-4, +0x1.067a02b20cf4p-2, 0x1.1cfbc40dd3912p+0, 0x1.012f17b868c48p-3, -0x1.4c580fdc3249cp-5, +0x1.0c68ae407f37cp+0, -0x1.2ab3d42f22348p-3, -0x1.a7e3c0101c948p-5, 0x1.2455ab7648ab6p-1, +0x1.10d00ae488068p+0, 0x1.72e12742e5c25p-2, 0x1.51ee518f70a96p-3, 0x1.ff110b8197bbap-1, +0x1.90d77daa54e22p-1, 0x1.ec8c3e10a5e54p-3, -0x1.02e9450205d29p-3, 0x1.f9907450bfedap-3, +0x1.3b3bffd5a9ab2p-3, 0x1.a1d0aac343a15p-2, 0x1.0a97a952152f4p-3, 0x1.08c5f22944bf2p-1, +-0x1.f636debd86077p-4, 0x1.937563bff3b78p-3, 0x1.8cc744d17ff4fp-2, 0x1.24a17700afa94p-1, +0x1.bb79a70376f2p-7, 0x1.296d5f4a52dacp+0, 0x1.732428f94caeap-3, 0x1.bfa13d9eb275ap-1, +0x1.3be67ff34499cp-1, 0x1.0fc6964fb926cp-1, 0x1.25d519b7e543dp+0, 0x1.12c4f3d958bd2p+0, +0x1.c6af6ffec0921p-2, 0x1.2c7c978f25c5cp-4, -0x1.5687fedc46a9ap-3, 0x1.2b855c33f0a44p-2, +0x1.052411320a48p-3, -0x1.373aaa35a1a9p-6, 0x1.103f5ffb53b1fp+0, -0x1.bea62869e3b4p-8, +0x1.161d24bbc5d3ep-1, 0x1.d27dbe83a4fbp-6, 0x1.30fd12cb952d5p+0, 0x1.0238efe86ad84p-3, +0x1.e03ac7bd5a0f1p-2, -0x1.149a48555c67cp-3, 0x1.2558bf74b117ep-1, 0x1.a552ca3a7dd8cp-1, +0x1.e4505365623a3p-2, 0x1.ce65102f9cca2p-1, 0x1.1ec957df0a5f6p-3, 0x1.19c7b44166c28p-1, +-0x1.991fea63323fep-4, 0x1.747c5ec6e8f8ap-1, -0x1.3fe9d94f4ca0ap-4, 0x1.d1827db06fd1cp-4, +0x1.60f0b6ef8eae2p-1, 0x1.36646af59ffc1p-2, 0x1.301bf9e06037fp+0, 0x1.b38683b69a4p-4, +0x1.08af991877c59p+0, 0x1.22bde062457bcp+0, -0x1.4d75c79c34858p-6, 0x1.1ca107889fa87p-2, +0x1.293b529bec0fp-7, 0x1.962e1c9cc5f5p-7, 0x1.8a799844ae8ccp-1, 0x1.58a8b005e4849p-2, +0x1.8c152633182a4p-3, 0x1.4491f1d4ef8a4p-1, 0x1.0f3d721884e14p-1, 0x1.df88d4aef244ep-1, +0x1.b98c462f7318ap-1, 0x1.0ad13143af3cp-1, -0x1.193d570bcc145p-3, 0x1.0d0d0e8880808p-3, +0x1.2c110594be886p-1, 0x1.456fd01824792p-1, 0x1.277e3a21822fbp+0, -0x1.20b4dc924169cp-3, +0x1.5adcf3b78286bp-2, 0x1.82431e7637b94p-4, 0x1.3800e3833cce8p-1, 0x1.c161c5f6b5f6bp-2, +0x1.0595947e0b2b2p+0, 0x1.766a0ebfb9a0ep-1, 0x1.81479917cf5cp-1, 0x1.05b579853e9e2p-1, +-0x1.532888c5d9845p-3, 0x1.7b19266c8fcbep-1, 0x1.a28cb062784c8p-1, 0x1.117dbb32efc84p+0, +0x1.5a2e80c51ac36p-1, 0x1.fe87688bfd0ecp-1, 0x1.2b964ef8bd93p-3, 0x1.c539d47b8a73ap-1, +-0x1.8619159fd8ffp-3, 0x1.1de2c9376ef8cp+0, 0x1.64f8c24f96bd8p-6, 0x1.9f95aa2cd8c4cp-3, +0x1.19f11dd7cd7bcp-1, 0x1.80cb9e9167fdap-1, -0x1.ef82731d789ecp-5, 0x1.b45bf66d02518p-3, +0x1.29b34b48b9cccp-4, 0x1.1ee9719bd768p-9, 0x1.16c0a7a3c71aep-1, 0x1.b7add5643c288p-1, +0x1.acf51ff026b72p-1, 0x1.fead6af596f47p-2, 0x1.d5e704a612348p-1, -0x1.8059940300b38p-6, +0x1.96057faff8d7cp-1, 0x1.4f03037a9e05fp-2, 0x1.3b147cc1a95c2p-1, 0x1.3aca42400f2e2p-1, +-0x1.21eb57bbdd705p-3, 0x1.57d6bdcc4947p-3, -0x1.2f355535919ep-4, -0x1.b6f48dd03ab5fp-4, +0x1.1bba9e230442p+0, 0x1.e30c6c27c618cp-1, 0x1.2941a5891f501p+0, 0x1.2b3d56a4bce1p-1, +0x1.7b2d6e47c327ap-1, 0x1.b813c32370274p-4, 0x1.142189688ea96p-2, 0x1.800d8f46334e4p-1, +0x1.8c348ce97ecfp-6, 0x1.f73de25a54e23p-2, 0x1.272cb01be7f2fp+0, 0x1.8cb928a57fd8ap-1, +0x1.6042952926eb4p-5, -0x1.b8296b303d1fbp-4, 0x1.301b46539369cp+0, 0x1.4341f244201d7p-2, +0x1.8401138fd4cfp-4, 0x1.1090cddeedee6p-1, -0x1.a2f2fcb679198p-6, 0x1.21edd46443dbap+0, +-0x1.59fb8c491a5d8p-3, 0x1.179ae9936269p+0, -0x1.746c51efb5a58p-4, 0x1.a5ed030418a6cp-1, +0x1.c143b9e04f542p-3, 0x1.72ed58ea190dep-1, 0x1.e9437b7705bap-3, 0x1.1c78fddf05becp-2, +0x1.17a4b761c8e3p+0, 0x1.75a1353aeb425p-2, 0x1.7b88a737c3de1p-2, 0x1.002c225199f1ep+0, +0x1.bbb502c9ddd04p-4, 0x1.53c27084411e7p-2, 0x1.8a5e69b7e1899p-2, 0x1.0c853a867f70dp+0, +0x1.474a170cf4fa8p-1, 0x1.b5a65ff69e7fep-1, 0x1.32b19de7323p-1, 0x1.ba1221e040f1p-1, +0x1.2b7baadf23c42p-3, 0x1.1aa497b89baf8p-1, 0x1.c0c9c83381939p-2, 0x1.8e92f4e1838c3p-2, +0x1.4a05d0b8fa72p-1, 0x1.b46a14b5026dbp-2, 0x1.cf50d9f9383b4p-1, 0x1.e0ec5996f50bep-1, +0x1.28961f4feac5ep+0, 0x1.144fd43cf56c7p+0, 0x1.be619bf37cc32p-1, 0x1.3089e0fcc77a2p+0, +0x1.f16f1534afaaep-1, 0x1.f63a781bec74ep-1, 0x1.a09a5e91a79b2p-1, -0x1.2998afcf1fffp-7, +0x1.02c16a9f9f1c6p-1, -0x1.2deca3f25bd95p-3, 0x1.dff9052d598b9p-2, 0x1.9748e5ee61c4fp-2, +0x1.ab77b019bd55bp-2, 0x1.0a139e4c7a8dap+0, 0x1.965944b99318ep-3, 0x1.7398decc80cb4p-1, +0x1.5e8839bc56a9ep-3, 0x1.912bec70bbf16p-1, 0x1.263ced6d7fadp-1, 0x1.02a945f13885cp+0, +0x1.c0d7cbf6b4e2bp-2, -0x1.aefb6236912a8p-6, 0x1.58fe4756b1fc8p-1, 0x1.91b1371989c8cp-1, +0x1.7393230d4d8cap-1, -0x1.6819d7af9d00ap-4, -0x1.ad769c368e208p-6, 0x1.5cca35691ffacp-3, +0x1.139835caf3fd2p-1, 0x1.1425c5bef5186p+0, -0x1.723bfbd617ab4p-4, 0x1.fcbc1bfd9311dp-2, +0x1.ea84cd8bd509ap-1, 0x1.f68082e4b9cdep-1, 0x1.f216d318b0fa7p-2, 0x1.758d7c5484b48p-1, +0x1.86549494a642cp-1, 0x1.99fb0dbccd8f8p-4, 0x1.d74d7ffbae9bp-1, 0x1.157cc6422af98p-4, +0x1.38aa7c85a4882p-3, 0x1.838e70996d834p-3, 0x1.54ba722b7641cp-1, 0x1.8a4cdd94ae334p-1, +0x1.d48e4a6a0f828p-6, 0x1.105b94e020b72p+0, 0x1.2efeabf591308p-2, 0x1.9959ce519919fp-2, +0x1.4b7cafca96f96p-1, 0x1.121154e75755dp+0, 0x1.ae6432935cc86p-3, -0x1.d3ee853074a9ep-4, +-0x1.3eee5ebc17766p-3, 0x1.157edd30f7ca8p+0, 0x1.bd99ccdf7b338p-1, 0x1.8a3df1c4ae158p-1, +0x1.323072e9312dbp+0, 0x1.0b4a3f3216948p+0, 0x1.23eb72c57b0a1p+0, 0x1.1192b5315658ap-1, +0x1.d879a37bb0f34p-1, -0x1.335c016f3384ep-3, -0x1.59d68cd91a138p-3, 0x1.5c980a9b85fcep-1, +0x1.0807f477a9a98p+0, 0x1.08fc2cbc785eap-1, 0x1.aefc8226912c4p-3, 0x1.2ffe171d932f6p-1, +0x1.a2a1f4da78772p-1, -0x1.1ace2f3568cfap-4, 0x1.b914164c3ef4ep-1, 0x1.2b997d33f0cc9p+0, +0x1.47e079575c8dbp-2, 0x1.4ed044176a6d5p-2, 0x1.7b1971908fcc6p-1, 0x1.18fb156565294p-1, +0x1.86e3959640fa4p-3, -0x1.4f367b829e6dp-3, 0x1.2607317d18db3p+0, 0x1.09cdfdcb46cf3p+0, +0x1.1b5db8ad03884p+0, 0x1.450424cc23a1cp-3, 0x1.1fc248ab72b7cp+0, 0x1.26b32008b3ccap+0, +0x1.5d85d28f87d84p-5, 0x1.96b7f7ca60a32p-1, 0x1.713dcb6faf486p-1, 0x1.3d2dc94f4728p-5, +0x1.46e60fc82765cp-1, 0x1.52ae4a8ea55c8p-1, 0x1.8bcbf82cb1318p-1, 0x1.71f299afb0b1fp-2, +0x1.6c3db0993ee1cp-1, 0x1.9bbcbb5cd113p-1, -0x1.43543be286a88p-3, 0x1.15e733222bce6p-1, +0x1.f2940d97185b4p-4, 0x1.02a0efeed20eap-2, -0x1.0408e1620811ep-4, 0x1.23ad6e79e0f47p+0, +0x1.88ba30f977dabp-2, 0x1.fef9608664592p-1, 0x1.1c13b877d1c1p+0, 0x1.ceb3bb8ed09aap-1, +0x1.ffd8e15d994b4p-4, 0x1.4cda7c19cce82p-1, 0x1.0290d5106b881p-2, 0x1.081a67f7a9ce6p-1, +0x1.5f73439f8bb34p-1, 0x1.9bc19c599de9ap-3, 0x1.6a9ffa446ed97p-2, 0x1.2fc84e8d92c3ep-1, +0x1.1e97d6afd6c94p-1, 0x1.1cdc501a39b89p-2, 0x1.16c8283893f6ap-1, 0x1.9ad69a44cf46cp-1, +-0x1.05011a3ba39bep-3, 0x1.0cfc69e219f8cp-4, 0x1.0a87eea0150fdp+0, 0x1.6c0c2f9fa4e52p-1, +0x1.dab43e314f02p-1, 0x1.3a756f00db514p-1, -0x1.0583a7d20b076p-3, 0x1.c11710bd1bc7bp-2, +0x1.bf2f0fdd17f7cp-3, -0x1.5e7c9435f02c7p-4, 0x1.2e6c90f3900c5p+0, 0x1.1484ac108f6fcp-1, +0x1.77ce97b956037p-2, -0x1.50730589074c9p-4, 0x1.eaf24530a2b15p-2, 0x1.e6aacabfcd558p-1, +0x1.1da8b320a1b7dp+0, 0x1.8e745a431ce8bp-2, 0x1.4ef81fe29df04p-1, 0x1.4e61c00f699p-5, +-0x1.4946f4c2928dfp-3, 0x1.1b5378689d0d6p+0, 0x1.8366ea5f06cdcp-1, 0x1.7387ecd54d764p-1, +0x1.b9878c09d9754p-4, -0x1.6d7bf7560e2b4p-4, 0x1.e74ea7e3ce9d4p-4, 0x1.bc2f2e97785e6p-1, +0x1.8e4a1f1182fa9p-2, 0x1.ba18639b7430cp-1, 0x1.e13ec4e08f4a3p-2, 0x1.d8965ec07df97p-2, +0x1.210f2b9f0eeb2p+0, 0x1.3e91b288e389bp-2, -0x1.c1e0ed8383c28p-6, 0x1.b66c2f036cd86p-1, +0x1.20125758a68b1p+0, 0x1.6f67505c7868p-5, 0x1.848a87afd5e1cp-4, 0x1.262830f24c506p-3, +0x1.463523ac2603ep-3, 0x1.382063b5a373cp-4, 0x1.c4751eb388ea4p-1, 0x1.73dafb2e1ae92p-1, +0x1.8d7048afe7ad4p-3, 0x1.4e1f6b7f690b8p-3, 0x1.e83ebf03d07d7p-2, 0x1.c2389009ead78p-4, +0x1.81286e67cf1dap-1, -0x1.1a77383bce882p-4, 0x1.672728d134b4bp-2, 0x1.953d179d90e08p-1, +-0x1.4c397288fed95p-3, -0x1.7b5f3d22f6be9p-4, 0x1.44bd3c18efe0dp-2, 0x1.2a23ed15877bp-3, +0x1.295ffae8b926p-6, 0x1.45aed96f582a8p-1, -0x1.7eb8f22630a52p-3, 0x1.36d675cc07468p-1, +0x1.32c1ad3d98b69p-2, 0x1.eeaf189a43c47p-2, -0x1.0d1304fee6f2ep-3, 0x1.d4631dc3a8c64p-3, +0x1.fd06cbfd93a74p-1, 0x1.5129dc02a2538p-5, -0x1.d70b7fbd47b0bp-4, 0x1.d6c51442e0bd4p-1, +0x1.24def258b0244p-2, 0x1.70591d92e0b22p-3, -0x1.185d17b230ba4p-3, 0x1.4a63287dc7f98p-1, +0x1.d3017483a602dp-2, 0x1.e4c43f2d6322p-1, 0x1.5f5ef4ff8b8acp-3, 0x1.b34332d9cceccp-1, +-0x1.70d262f614d81p-4, 0x1.b25d83283187ep-1, 0x1.28f855a0b8571p+0, 0x1.b97488750c82ap-1, +0x1.f57502871e1d4p-1, 0x1.3e3bb28749441p-2, 0x1.d096734d3ac67p-2, 0x1.046686286f337p+0, +0x1.ac30b00b58615p-2, 0x1.f1103e197bba2p-1, -0x1.3105ed5bfba58p-5, 0x1.45c9be48f1f9ep-1, +0x1.a0b16239a7c91p-2, -0x1.8b069f1cafa7p-6, 0x1.639cda8f94064p-5, 0x1.d01fee2206a64p-1, +0x1.5165bdc03c65p-1, 0x1.cadb967d2f50cp-4, -0x1.096d86c87941ap-4, 0x1.d00c46a3a0187p-2, +0x1.69a8edec6ceb7p-2, 0x1.4ae8b2b5c904p-6, 0x1.619344a2c3268p-3, 0x1.adaa568e8e87ep-1, +0x1.99a7e6cccce97p-2, 0x1.e2cfc68a2c05cp-3, 0x1.234e3140ad02cp-2, 0x1.0e5d8a074fee4p+0, +-0x1.1dc6b3823b8ep-6, 0x1.4fe53c4c39642p-1, 0x1.6997e07c6cc94p-1, 0x1.7aef235c8f77cp-4, +0x1.37b8b210d5d7bp-2, 0x1.5522255777112p-1, 0x1.279c69a3826cp+0, 0x1.5757a94915158p-4, +0x1.2d533280c10cdp+0, 0x1.a23b4d0e77a9bp-2, -0x1.9573278ff7b32p-4, 0x1.94b0ad365c947p-2, +0x1.6f1df8d2de3bep-3, 0x1.053d14f53dad4p-4, -0x1.5911461f7eef6p-3, 0x1.928695bd8b738p-1, +0x1.ead7504708e1ap-3, 0x1.32df143bff578p-4, 0x1.f8803ae72433bp-2, 0x1.1940fc1c3281fp+0, +0x1.8c3b77864baa1p-2, 0x1.4178d30682f1ap-1, 0x1.68436a3c6a207p-2, 0x1.e158991fc2b14p-1, +0x1.b2367f0297a04p-1, 0x1.72ececad4c402p-1, 0x1.289c89425139p-1, 0x1.8a40bfcfe14ep-5, +0x1.2903a25b1ed41p+0, 0x1.1055042753dd4p+0, -0x1.883a32d643a7bp-4, -0x1.d4d5751d4344cp-5, +0x1.0a28de2ee11e8p-1, 0x1.9ef700880abacp-1, 0x1.e1dbce0090844p-3, 0x1.0635ceced9387p+0, +0x1.1b657ee70397cp-2, 0x1.852581830a4aep-3, -0x1.787e9d295763bp-4, 0x1.03e57c1207cafp-2, +0x1.98cd6d4e64cep-1, 0x1.2a0b73cf20e2p-7, 0x1.b2b17b10322fcp-1, 0x1.2d7da8f4c161cp+0, +0x1.176c6db3c8727p-2, 0x1.c2d38feeb8da6p-1, 0x1.871b813b0e37p-1, 0x1.6cd271520cd8p-1, +0x1.27caec711c62ap+0, 0x1.cf5384839ea68p-5, 0x1.38ee031e71dcp-1, 0x1.5e9a5c72bd34bp-2, +0x1.c4d471b523428p-1, 0x1.29bb0f5186a95p+0, 0x1.51fb07690a5c4p-4, 0x1.10a48a4bbae2ap-1, +0x1.5ffca4e45992cp-1, 0x1.b942509b7284ap-1, 0x1.8faefcb4b8f78p-1, 0x1.4b9d832e973bp-1, +0x1.7385f27e1a3fp-1, 0x1.c50e1cc056e9p-1, 0x1.94b69243296dp-1, 0x1.7486a40fb5d9cp-5, +0x1.fb3d6db8c3479p-2, -0x1.64e382a2c9c71p-3, -0x1.0ac97a3548c63p-3, 0x1.f1b7dcbbe36fcp-1, +0x1.b9db9879da1d8p-3, -0x1.6b7978cfa3cp-6, 0x1.a8868b1ceaa6p-6, -0x1.7c884bfc92aa4p-3, +0x1.7ecb21bc972fcp-3, 0x1.132e0ae7bff5bp+0, 0x1.311fd2ab2f0c7p+0, 0x1.51cf65af706b8p-1, +0x1.82c93f57d25f4p-1, 0x1.82f4c0256c4fep-1, 0x1.60edc255f50eap-3, 0x1.6bf8b1ce0b248p-1, +0x1.03282f6a06506p+0, 0x1.f78fda1a55862p-1, -0x1.2c82199259044p-3, 0x1.64be6a1d2fe32p-1, +0x1.e49f925162d8cp-1, 0x1.161503bbc5c3ap-3, 0x1.df91c0508bfp-6, 0x1.bc6ba19378d73p-2, +0x1.3296fbf8652ep+0, 0x1.0288f88ed1decp+0, -0x1.e498939d62cadp-4, 0x1.724d8402e49bp-1, +0x1.63b9a771faa68p-1, 0x1.be89e635e37a2p-1, 0x1.effc54aa465fp-1, -0x1.43820768ed6bp-7, +0x1.cbb76bf931086p-1, 0x1.09d82e447a16cp+0, 0x1.29881d8253103p+0, -0x1.61c0a2a2c3816p-4, +-0x1.784756a623c1ep-3, -0x1.847dc2363c3p-7, -0x1.279e073be8d5cp-4, 0x1.a01d64b00d07ap-3, +-0x1.18711e9564158p-3, -0x1.48d40fe8f80e9p-4, 0x1.101e92a3b9d6cp+0, 0x1.a3135e18dfc06p-1, +0x1.c040a48eb3b48p-1, 0x1.2122f70f0f128p-5, 0x1.514b52f5d5c9dp-2, 0x1.602a9cfc59eecp-1, +-0x1.7311736c7fbc8p-3, 0x1.87d712f976147p-2, 0x1.7a0a82b627484p-3, 0x1.ee419bdca95p-1, +0x1.6fd730d7ac7b2p-1, 0x1.a7cb2a2ce92ffp-2, 0x1.984418fffd54ep-3, 0x1.6e9ec25c76d72p-1, +0x1.ca447f206155cp-3, 0x1.1fc8b46572c49p-2, 0x1.ea177fe3d42eep-3, 0x1.1e5896d03cb13p+0, +-0x1.7f825fdc989e8p-5, 0x1.06f38dcedab3p-7, -0x1.761a071c85cdcp-4, 0x1.0d12d630e6f27p+0, +-0x1.3a68eeaf419ebp-3, -0x1.0865b12baa65p-3, 0x1.2a29ff39ededap+0, -0x1.1916abbbcbc7p-3, +0x1.e3b0312a2dc68p-5, -0x1.b83146fd09fc4p-4, 0x1.1050295220a04p-2, 0x1.f4290eca4eb88p-4, +0x1.916ee2698943p-7, 0x1.07fb4e120ff68p-3, 0x1.23ff732c47feep+0, 0x1.167663422cecdp+0, +0x1.74eed2b7b6aa7p-2, 0x1.147c52da28f8ap-2, 0x1.26b0fd14b3c86p-1, 0x1.8832e5ce4398fp-2, +0x1.b490195035edp-1, 0x1.eb9a0428a400cp-1, 0x1.2fd2a17592d86p-3, 0x1.7c01c777c4d05p-2, +0x1.6464cb62c8c98p-3, 0x1.186c1503ca71cp-1, -0x1.ce3602706938ep-4, 0x1.3210b90730ee4p-1, +0x1.075b6ace751d4p+0, 0x1.4e4b0c229c961p-2, 0x1.085b804143ea2p-1, 0x1.2e928b02c38b7p+0, +0x1.11a7baaef01c4p-1, 0x1.3ffea5c41996ep-1, 0x1.08722dfdaa7dfp+0, 0x1.2973e56f1fb4ap-1, +0x1.644b9fdf9564p-1, 0x1.fed1f408ca70cp-1, 0x1.4994a0e693294p-1, 0x1.e8ed095e38406p-1, +0x1.171918c7c7cbdp+0, 0x1.1c118dfb04efep+0, -0x1.f7a1d9a3ef43cp-4, -0x1.8f73ca69854ep-4, +0x1.3bb890e8ddd74p-5, -0x1.756eed1fb7aabp-3, 0x1.30b259cec7cb1p+0, 0x1.349958d66932ap-1, +0x1.2691a91719f01p-2, 0x1.21af4a46435eap-1, 0x1.2f8c9911f8b2cp+0, -0x1.e8d788aa3815cp-5, +0x1.4dc5d005cebedp-2, 0x1.129dd055586ecp-3, 0x1.05d9d197a54d4p-1, 0x1.66628141fff82p-1, +0x1.c379ef7f86f3ep-1, 0x1.327977affe8c8p-1, 0x1.90669f1654004p-4, 0x1.6bca5eb60ac7ep-1, +0x1.2002b213d99efp+0, 0x1.a0ceba8a74d0ap-1, 0x1.62890e4f91deep-1, 0x1.d68d70e079e7bp-2, +0x1.e99be78a399e2p-3, 0x1.0d0703e480746p-1, -0x1.46af22328d5e5p-3, 0x1.228c80144519p+0, +0x1.4ae5230295ca3p-2, 0x1.5e4f3ec056382p-1, 0x1.c79fa31ac2728p-1, 0x1.b4f9729369f2ep-3, +0x1.300bf44ff9b18p-1, 0x1.ef11ce4caaf06p-1, 0x1.436c937c2072bp-2, 0x1.aa2de3c4edf56p-1, +0x1.f81c7970bd05cp-1, 0x1.39692ddf3f9f3p-2, 0x1.e18358bd5ca02p-3, 0x1.27f73c824fee4p-4, +0x1.126523ce24ca5p+0, 0x1.c44e87b3889dp-3, 0x1.b35f55b0338b6p-3, 0x1.951b24e32a364p-3, +0x1.1c217c689ea94p-1, 0x1.d9180d6fb2302p-1, 0x1.1907d87098761p+0, 0x1.e4d41606fcdb4p-3, +0x1.4a563d6761793p-2, -0x1.24f0d40249e2p-8, 0x1.25b2e54f1832ap+0, 0x1.fb2871d3f650cp-3, +0x1.02759fa46b51bp+0, 0x1.47887281c244p-1, 0x1.d0773b4ba0ee6p-1, 0x1.8ebd2bf650ad4p-5, +-0x1.1d6f005bd477cp-5, 0x1.e531d92563fd6p-1, -0x1.0c326fcee532p-6, 0x1.f4040fc3e8081p-2, +0x1.ba3562f3746abp-2, 0x1.12d23b0158d7bp+0, 0x1.cda6caf2ce80cp-1, -0x1.64ff028930647p-3, +0x1.ae4fdde8f6396p-1, 0x1.1ed5c89bd745p-6, 0x1.b754898ea1dc4p-1, 0x1.4005f0edb33fp-1, +0x1.0c11aba07e89cp-1, -0x1.b588357037dd4p-4, 0x1.cb6b3ee463a34p-1, 0x1.94eb19a1903c9p-2, +0x1.4192034a83241p-2, -0x1.711a90afaf02p-4, 0x1.9622bc6ff9124p-1, 0x1.11a8723cf01dbp+0, +0x1.08ad90e0115b2p+0, 0x1.61cc06eac398p-1, 0x1.b0fc1c7cfb91cp-4, 0x1.407f681f4dcb8p-3, +0x1.c5e88ba9256acp-1, 0x1.b1ee7c1cfd768p-5, 0x1.35505ce3376d8p-1, 0x1.646d648b95a78p-1, +0x1.c90dc0a9f881ep-1, 0x1.3ec26385b0b7fp-2, 0x1.e3bf9db16118cp-1, 0x1.0ece9b881d9d4p+0, +0x1.e2ca47c3c5948p-5, 0x1.20e2384ca82aep+0, 0x1.6271b10c5e7cfp-2, 0x1.61adbc61f68eap-1, +0x1.0081401acdcf4p+0, 0x1.8793d0cfdbf44p-5, 0x1.6ed4622610dcp-1, 0x1.48ebf7b291d7ep-1, +0x1.0faca37bb8f2ep-2, 0x1.7f850a9165707p-2, 0x1.145c11a228b8p-4, 0x1.fa4e63c4c169ap-1, +0x1.deefca0d57791p-2, 0x1.2a2e93bf87906p+0, 0x1.797628a6261f6p-3, 0x1.f6a74d1253b5p-1, +-0x1.00b2440b9afe2p-3, 0x1.2d735682c14d1p+0, 0x1.b391cb2033f06p-1, 0x1.1bca7b91d12e9p+0, +0x1.564c4d8446322p-1, 0x1.280bda8b1ce48p+0, 0x1.0a7356287b4dp-4, 0x1.6b9ce582d739bp-2, +0x1.340d9b02681bp-7, 0x1.bd052e0ead3d8p-1, -0x1.30aa3c7bfaee2p-3, 0x1.1a222ec101113p+0, +-0x1.4000d29c199b8p-6, 0x1.fdfb74fe625d4p-1, 0x1.eb7b2e263d5ccp-1, 0x1.ea4c113707cb4p-3, +0x1.d9597f2bb2b3p-1, 0x1.b26d020364dap-4, 0x1.2153938b0f73fp+0, 0x1.73f598f54e518p-1, +0x1.6a5a8772d4b51p-2, 0x1.4b1522d5c95d6p-1, 0x1.59eca8ef80a62p-3, 0x1.a369fbddad3a6p-1, +-0x1.6e3af9360fa93p-3, 0x1.beda25ad174ddp-2, 0x1.3751f9366ea3ep-1, 0x1.f49f1a3f1c715p-2, +0x1.9ac7a7de68c27p-2, 0x1.fc15e9c65e924p-1, 0x1.1520e796f70e8p-2, 0x1.e73b52a568103p-2, +0x1.f096305fe12c6p-1, -0x1.42213c0284428p-4, 0x1.8998741fdffdbp-2, 0x1.c0f82ef04ebd1p-2, +-0x1.f496c683e92dap-4, 0x1.4c810b3b65ceep-1, 0x1.fcb0f0a592fb6p-1, 0x1.651e200f9708cp-4, +0x1.463fa5bc2618dp-2, 0x1.0b7663f67d533p+0, -0x1.5f913a02bf23p-7, 0x1.ff0c655f314bfp-2, +0x1.ae81d67f5d03ap-1, 0x1.2631a7d24c635p+0, 0x1.e07f9d695a98ep-1, 0x1.2174ef44a9504p-1, +0x1.c4a897e9efb78p-5, 0x1.bcc05e137980cp-1, 0x1.78210e6fbd0ecp-4, 0x1.37de339e6fbc6p-1, +0x1.42de34fa85bc7p-2, 0x1.d7cb64ebaf96bp-2, 0x1.d387244073db2p-3, 0x1.588d85377de7dp-2, +0x1.18dc95d964ec6p+0, 0x1.094d145679009p+0, 0x1.067e5b10d9c98p+0, 0x1.316d326bfc73fp-2, +0x1.a849ac0750936p-1, 0x1.89361c0978d28p-4, 0x1.f2baa8f4b2422p-1, 0x1.32797600cb596p-1, +0x1.bd2409b37a48p-3, 0x1.4481f2628903cp-3, -0x1.4dc363cc35206p-3, 0x1.2e3920058fa57p-2, +0x1.0203f71d373b2p+0, 0x1.07d33f0c760cep+0, 0x1.2a26ba6b211a4p-1, 0x1.03056ab2060acp-3, +0x1.c02cdf9f8059cp-1, 0x1.8b0edbef161dap-1, 0x1.a6adf3c81a28ap-1, 0x1.08484fb2dd5d6p-1, +0x1.710bc527aee44p-1, 0x1.20c72ac574c18p-1, -0x1.e5493ba3ca929p-4, 0x1.f3bcb50cb4462p-1, +0x1.dc8489b3b909p-3, 0x1.63058315f93e2p-3, 0x1.8a69047e48053p-2, 0x1.7ef6a35631206p-1, +0x1.ab0d79a1bc816p-1, 0x1.a07cb1b5a75fcp-1, -0x1.d94803d07f5cep-4, 0x1.76603ee8865ap-1, +0x1.4cb073f69960ep-1, 0x1.1c1d0e070506ep+0, -0x1.5d3e391f87494p-3, 0x1.1d27732f071bap-2, +0x1.7d3c946960dep-8, 0x1.00e8c0899b6b2p+0, 0x1.13b9caff5aa6cp+0, 0x1.b153c3f82f745p-2, +}; + +static const int babl_num_type_test_pixels = 512; + +static const double babl_type_test_pixels[2048] = { +0x1.87326f630e64ep+3, 0x1.d98b8203b317p+6, 0x1.80c353a70186ap+6, 0x1.8b30cef31661ap+6, +0x1.ed4afa3bda95fp+6, 0x1.5b6f8b7eb6df1p+6, 0x1.a149bf2b42938p+5, 0x1.a42310c348462p+3, +0x1.076180960ec3p+6, 0x1.70fdcafae1fb9p+5, 0x1.b56661636acccp+3, 0x1.e920a48bd2415p+6, +0x1.6d6c669adad8dp+6, 0x1.db6bd983b6d7bp+4, 0x1.fcd15da3f9a2cp+3, 0x1.0228b6ca04517p+5, +0x1.ef3cee63de79ep+6, 0x1.8dfaef231bf5ep+5, 0x1.5ee3acfebdc76p+6, 0x1.668783d6cd0fp+6, +0x1.205f038640bep+6, 0x1.f9fa8d2ff3f52p+6, 0x1.20a64bea414c9p+6, 0x1.ee5b3f63dcb68p+5, +0x1.2c44ab0a58895p+6, 0x1.927c053324f81p+4, 0x1.98d196cf31a33p+6, 0x1.4635fc0e8c6cp+6, +0x1.7e5e224afcbc4p+6, 0x1.1a3f9972347f3p+4, 0x1.c6f50c538dea2p+4, 0x1.af4470375e88ep+6, +0x1.00db42e201b68p+3, 0x1.f28096bfe5013p+6, 0x1.3a753f2674ea8p+6, 0x1.accc52835998ap+1, +0x1.4df0223a9be04p+6, 0x1.6343d782c687bp+1, 0x1.07ab12b20f562p+4, 0x1.55468b42aa8d1p+4, +0x1.873208730e641p+5, 0x1.e25e4373c4bc8p+4, 0x1.f3923ac3e7247p+3, 0x1.882b56831056bp+3, +0x1.dee50e7bbdca2p+5, 0x1.f831cc33f063ap+4, 0x1.64338c6ac8672p+5, 0x1.bd5eeb3b7abddp+5, +0x1.4509ea9e8a13dp+6, 0x1.0fd733421fae6p+2, 0x1.14dbe5c229b7dp+4, 0x1.95a3b8832b477p+4, +0x1.5f000c02be002p+1, 0x1.65dd455acbba9p+6, 0x1.5c968dd2b92d2p+6, 0x1.373cab6a6e795p+6, +0x1.ca7c46ab94f89p+6, 0x1.ead04943d5a09p+5, 0x1.f5ca9de3eb954p+4, 0x1.48da68f291b4dp+6, +0x1.3bf80afe77f01p+6, 0x1.de5fd51bbcbfbp+5, 0x1.f03db24be07b6p+5, 0x1.5c13735eb826ep+6, +0x1.c361029386c2p+5, 0x1.94a0c24329418p+3, 0x1.6979d5f2d2f3bp+6, 0x1.7d051c22fa0a4p+3, +0x1.ed71b823dae37p+3, 0x1.ab649aa356c93p+6, 0x1.09e48caa13c92p+5, 0x1.01473b3e028e7p+6, +0x1.1fe15be23fc2bp+3, 0x1.86c91b5b0d923p+5, 0x1.324ca60e64995p+6, 0x1.136eb2ba26dd6p+6, +0x1.417100ba82e2p+6, 0x1.e4666c47c8ccep+6, 0x1.f21e2857e43c5p+6, 0x1.0cf5d6aa19ebbp+5, +0x1.f563df7beac7cp+6, 0x1.baa90e2375522p+3, 0x1.d7c7b2ebaf8f6p+5, 0x1.6f7f6002defecp-4, +0x1.9d32671f3a64dp+6, 0x1.21e99d1243d34p+4, 0x1.37988b466f311p+6, 0x1.67aeadc6cf5d6p+6, +0x1.3de28be67bc51p+6, 0x1.b50b32bf6a166p+6, 0x1.61122d6ac2246p+5, 0x1.e76a5b93ced4bp+4, +0x1.48763a9290ec7p+5, 0x1.a8a7efdb514fep+6, 0x1.d5ee0a43abdc1p+6, 0x1.85eb9e970bd74p+6, +0x1.db3c0827b6781p+6, 0x1.3f67e0327ecfcp+6, 0x1.b58c421b6b188p+6, 0x1.8ea3f2831d47ep+2, +0x1.d598f5a3ab31fp+5, 0x1.d3f44363a7e88p+3, 0x1.1a317a6a3462fp+6, 0x1.0ec8a64e1d915p+6, +0x1.fbc62c33f78c6p+5, 0x1.31f881d263f1p+4, 0x1.11bac82223759p+3, 0x1.faa0b683f5417p+3, +0x1.872465c30e48dp+3, 0x1.455815828ab03p+2, 0x1.8b9e044b173c1p+5, 0x1.324361826486cp+3, +0x1.2eaa8c725d552p+4, 0x1.b1b2db9b6365bp+6, 0x1.352260626a44cp+3, 0x1.e8dd0a3fd1ba1p+6, +0x1.fa2d42dff45a8p+6, 0x1.5e3cd752bc79bp+6, 0x1.508bb802a1177p+6, 0x1.380fcec6701fap+6, +0x1.13480a0e26901p+6, 0x1.14ceb802299d7p-2, 0x1.b1ea65ab63d4dp+6, 0x1.b78327576f065p+6, +0x1.a9bcbe9353798p+6, 0x1.87d86feb0fb0ep+6, 0x1.3d6ec5ea7add9p+6, 0x1.84f8c6b709f19p+6, +0x1.8e80a0331d014p+5, 0x1.e5f61003cbec2p+5, 0x1.9de305e33bc61p+6, 0x1.b20ccaef64199p+6, +0x1.2d79906e5af32p+6, 0x1.70290092e052p+5, 0x1.81aae2730355cp+5, 0x1.5ae53422b5ca7p+3, +0x1.0492a0be09254p+6, 0x1.c61994838c333p+5, 0x1.aac2f5535585fp+4, 0x1.35772d7a6aee6p+6, +0x1.eec49733dd893p+5, 0x1.307fbf7a60ff8p+6, 0x1.5bbf99aab77f3p+6, 0x1.430ceeba8619ep+6, +0x1.c465362388ca7p+5, 0x1.8263e5b704c7dp+6, 0x1.2be9f8f657d3fp+6, 0x1.b8bfbbe3717f7p+5, +0x1.c1417a0b8282fp+5, 0x1.f1d6c3d3e3ad8p+4, 0x1.46facb428df59p+2, 0x1.f3e8c713e7d19p+6, +0x1.f629feb3ec54p+4, 0x1.c65a125f8cb42p+6, 0x1.ab6bee6b56d7ep+6, 0x1.3a39f2027473ep+3, +0x1.4e3282469c65p+6, 0x1.d1b568a3a36adp+5, 0x1.ac4004f758801p+6, 0x1.572d25c2ae5a5p+2, +0x1.dbd5bc57b7ab8p+6, 0x1.4a230ad694461p+6, 0x1.c77f9d4b8eff4p+6, 0x1.094f4cc2129eap+6, +0x1.1bc58e02378b2p-1, 0x1.10aa1d0a21544p+5, 0x1.34abf34a6957ep+6, 0x1.06ca2bde0d945p+6, +0x1.6b61d8c6d6c3bp+6, 0x1.9f5cb09f3eb96p+6, 0x1.e20acaa3c4159p+3, 0x1.8b10917316212p+4, +0x1.9fb8e0333f71cp+5, 0x1.9800f2ff3001ep+6, 0x1.a5d113174ba22p+6, 0x1.b20f0b2b641e1p+6, +0x1.1a64d8b634c9bp+6, 0x1.a376181346ec3p+5, 0x1.1cddd23239bbap+5, 0x1.fb0595bbf60b3p+6, +0x1.4e30bd029c618p+6, 0x1.45bd2b9a8b7a5p+5, 0x1.eeee5ccfdddccp+6, 0x1.cbbb3caf97768p+6, +0x1.a4e2a0a349c54p+4, 0x1.9a5a4b3734b49p+6, 0x1.f3027aefe604fp+6, 0x1.b76b2a6f6ed65p+6, +0x1.0669ff0a0cd4p+5, 0x1.9f427fe73e85p+6, 0x1.ccddfccf99bcp+6, 0x1.7c2aef62f855ep+4, +0x1.d2cb1573a5963p+5, 0x1.945d9a1728bb3p+6, 0x1.685a089ed0b41p+6, 0x1.d73a2bb3ae745p+5, +0x1.cb2a898396551p+2, 0x1.3a0bf7ca7417fp+5, 0x1.f26741b7e4ce8p+6, 0x1.8814815f1029p+6, +0x1.e3156403c62adp+3, 0x1.7544d842ea89bp+3, 0x1.ead8a5bfd5b15p+6, 0x1.0c3f1c9a187e4p+6, +0x1.c6a98e078d532p+6, 0x1.90a9b8d321537p+6, 0x1.7c9c4f8af938ap+5, 0x1.c21ccd738439ap+5, +0x1.8993137313262p+4, 0x1.4cbd10de997a2p+6, 0x1.b827f8eb704ffp+5, 0x1.b09581df612bp+6, +0x1.ef9ba6afdf375p+6, 0x1.9604b2832c096p+5, 0x1.7c50be8af8a18p+6, 0x1.63513b52c6a27p+4, +0x1.957291d32ae52p+4, 0x1.6f53397adea67p+6, 0x1.03f7944207ef3p+2, 0x1.d12347f3a2469p+5, +0x1.0e95b95e1d2b7p+6, 0x1.dd1d7613ba3afp+6, 0x1.479c5fd68f38cp+6, 0x1.f7fb4417eff69p+6, +0x1.717b1026e2f62p+6, 0x1.5fecd0e2bfd9ap+5, 0x1.c730b3db8e616p+5, 0x1.8e2db8c31c5b7p+6, +0x1.4cfc645699f8dp+6, 0x1.abff374357fe7p+5, 0x1.16423a1e2c847p+6, 0x1.895f10d712be2p+6, +0x1.04a836aa09507p+6, 0x1.011adfda0235cp+6, 0x1.2b3c5ae25678bp+5, 0x1.96a389632d471p+5, +0x1.2389315a47126p+5, 0x1.53ec5536a7d8bp+6, 0x1.ac602b6b58c05p+6, 0x1.e852bb13d0a57p+5, +0x1.4152cc2282a5ap+5, 0x1.10e84fba21d0ap+5, 0x1.497dbeca92fb8p+5, 0x1.208a197a41143p+5, +0x1.5376811ea6edp+6, 0x1.087cef6210f9ep+3, 0x1.d232b72ba4657p+5, 0x1.b8d3259371a65p+6, +0x1.9062d76720c5bp+6, 0x1.f2b1a9b3e5635p+5, 0x1.42c9931a85932p+5, 0x1.3df121827be24p+5, +0x1.acec95d359d93p+5, 0x1.e9012963d2025p+6, 0x1.2de7a9b25bcf5p+5, 0x1.1fc56c323f8aep+4, +0x1.31ef23a263de4p+5, 0x1.7a8c2ec6f5186p+6, 0x1.d61f13cfac3e2p+6, 0x1.e5f3f627cbe7fp+6, +0x1.422f29a2845e5p+4, 0x1.d8c29bdbb1853p+5, 0x1.6f5306fadea61p+6, 0x1.55340112aa68p+6, +0x1.ed7c2dc7daf86p+6, 0x1.3c4d1a02789a3p+0, 0x1.042e2e02085c6p+3, 0x1.fd0319c3fa063p+4, +0x1.58dd899eb1bb1p+6, 0x1.cce5f12f99cbep+6, 0x1.736a23fae6d44p+6, 0x1.f986efb3f30dep+6, +0x1.55686422aad0dp+4, 0x1.829035c305207p+2, 0x1.1397f8da272ffp+5, 0x1.a8d09a2b51a13p+6, +0x1.c9c50a63938a1p+3, 0x1.72e55802e5cabp+6, 0x1.61a3bfbac3478p+6, 0x1.c99b78b39336fp+6, +0x1.b0f8b36361f16p+4, 0x1.8444a20308894p-1, 0x1.a25025d344a05p+4, 0x1.42b477c28568fp+6, +0x1.ec09b2a7d8136p+6, 0x1.ff0fbc9bfe1f8p+5, 0x1.8aa5d2d3154bap+6, 0x1.0a0288ea14051p+5, +0x1.e8503443d0a07p+4, 0x1.60c4e69ec189dp+6, 0x1.abd4ea6357a9dp+4, 0x1.953faef32a7f6p+5, +0x1.3498d2226931ap+4, 0x1.da484197b4908p+6, 0x1.fd3d88c3fa7b1p+2, 0x1.d5131283aa262p+3, +0x1.df3975ffbe72fp+6, 0x1.0166793202ccfp+4, 0x1.73c65182e78cap+5, 0x1.3816ff9e702ep+6, +0x1.a7f1ef034fe3ep+1, 0x1.6a6a65e2d4d4dp+3, 0x1.319def4e633bep+6, 0x1.8a66a21314cd4p+4, +0x1.15d940622bb28p+4, 0x1.bb69ebbb76d3dp+6, 0x1.6d485582da90bp+1, 0x1.fabbc593f5779p+4, +0x1.2e4f43be5c9e8p+6, 0x1.6d0e0266da1cp+6, 0x1.2129a86242535p+4, 0x1.9a8d7097351aep+6, +0x1.70168baee02d1p+6, 0x1.61bce71ac379dp+5, 0x1.ba83d0b37507ap+5, 0x1.5c203e52b8408p+6, +0x1.b06651db60ccap+6, 0x1.9f9eeca33f3dep+4, 0x1.e12182cbc243p+6, 0x1.53d2f742a7a5fp+3, +0x1.c8aca1c791594p+6, 0x1.305af58260b5fp+4, 0x1.ea346ccbd468ep+5, 0x1.5d2d6502ba5adp+2, +0x1.32f7f7a265effp+3, 0x1.14ee0ef229dc2p+6, 0x1.41d4e28283a9cp+4, 0x1.661d3d02cc3a8p+0, +0x1.5547ad3eaa8f6p+6, 0x1.0a58616214b0cp+6, 0x1.3daf74927b5efp+6, 0x1.62873cbac50e8p+6, +0x1.37a5ae1e6f4b6p+6, 0x1.bd358f737a6b2p+4, 0x1.c520e53f8a41dp+6, 0x1.7d1bfe3afa38p+6, +0x1.55ba7ca2ab75p+3, 0x1.d08b27eba1165p+6, 0x1.fbcaef9ff795ep+6, 0x1.59069352b20d2p+6, +0x1.3d992a4e7b325p+6, 0x1.105566d220aadp+4, 0x1.e72807d3ce501p+5, 0x1.5b5f6bf2b6bedp+5, +0x1.e9e79a83d3cf3p+5, 0x1.d0d5ec43a1abep+6, 0x1.39fe898273fd1p+1, 0x1.4ab43e3295688p+5, +0x1.c5ed3b438bda7p+3, 0x1.eaf17717d5e2fp+6, 0x1.9fa8fc0b3f52p+5, 0x1.6a492c02d4926p-2, +0x1.b841a3a370834p+3, 0x1.c4eeb46b89dd7p+6, 0x1.73d1f7c2e7a3fp+2, 0x1.759ccdb2eb39ap+4, +0x1.b3b986b367731p+5, 0x1.9ec960733d92cp+4, 0x1.8bfea18317fd4p+4, 0x1.792384a2f2471p+3, +0x1.720ab982e4157p+6, 0x1.a0af1cf3415e4p+6, 0x1.91abad4f23576p+6, 0x1.5360cf3aa6c1ap+5, +0x1.ff901983ff203p+1, 0x1.56cc928aad992p+6, 0x1.36632ea26cc66p+3, 0x1.d59e8303ab3dp+3, +0x1.2757ba724eaf7p+6, 0x1.14baaba229755p+3, 0x1.93ba63b72774cp+6, 0x1.93c3930327872p+4, +0x1.9ab2bca335658p+4, 0x1.0e9ccf3a1d39ap+5, 0x1.12a09aba25413p+6, 0x1.5ba07c6eb741p+6, +0x1.60914f72c122ap+4, 0x1.1c708f0638e12p+6, 0x1.f5370803ea6e1p-3, 0x1.21c3f68a4387fp+5, +0x1.0762061a0ec41p+6, 0x1.a19e3313433c6p+5, 0x1.249888e249311p+5, 0x1.3e6a3a927cd47p+6, +0x1.2b7b9be256f73p+5, 0x1.5312c7e2a6259p+5, 0x1.9bd16dff37a2ep+6, 0x1.6f9a914adf352p+6, +0x1.113bbc0e22778p+6, 0x1.fed1165ffda23p+6, 0x1.9ebf01e33d7ep+6, 0x1.068ceb1a0d19dp+5, +0x1.9f80334f3f006p+6, 0x1.306aaf2e60d56p+6, 0x1.2cf6dd2e59edcp+6, 0x1.af7cb41b5ef97p+6, +0x1.0e6e83721cddp+5, 0x1.53c34302a7868p+6, 0x1.ea30847bd4611p+6, 0x1.ae8efc2b5d1ep+6, +0x1.765a9876ecb53p+6, 0x1.7deae82efbd5dp+6, 0x1.37fe0e826ffc2p+2, 0x1.dd0747a3ba0e9p+6, +0x1.4e53f2029ca7ep+0, 0x1.26207ba64c40fp+6, 0x1.38a7c40e714f9p+6, 0x1.75768e92eaed2p+4, +0x1.0a442aa214885p+4, 0x1.39a25f927344cp+6, 0x1.dc7f3dd3b8fe8p+5, 0x1.49f310c693e62p+6, +0x1.4e2f23829c5e4p+1, 0x1.808be35f0117cp+6, 0x1.10ba96aa21753p+5, 0x1.405e8e1a80bd2p+5, +0x1.50aa3a62a1547p+3, 0x1.2175ca8242eb9p+3, 0x1.f93b0b03f2761p+1, 0x1.3b51035a76a2p+6, +0x1.17fe7d622ffdp+3, 0x1.ae88da3b5d11bp+6, 0x1.be9778eb7d2efp+6, 0x1.c28002fb85p+6, +0x1.bde712cb7bce2p+5, 0x1.d71cac2bae396p+5, 0x1.71fcb712e3f97p+6, 0x1.662acb1ecc559p+6, +0x1.fa8cc8a3f5199p+3, 0x1.5c2d3b8ab85a7p+6, 0x1.14b9c74a29739p+6, 0x1.b5ac318f6b586p+6, +0x1.b430477368609p+5, 0x1.2839a83250735p+6, 0x1.92b3792f2566fp+6, 0x1.bea2e7037d45dp+5, +0x1.39688f5272d12p+4, 0x1.96b67a732d6cfp+5, 0x1.3caf172a795e3p+6, 0x1.21d65d0243accp+5, +0x1.3f6732027ece6p+0, 0x1.5775b082aeeb6p+3, 0x1.dade3f47b5bc8p+6, 0x1.ede2bc83dbc58p+1, +0x1.ab7a996f56f53p+6, 0x1.8cee2a6319dc5p+4, 0x1.5f3cb9eabe797p+5, 0x1.d58fe0bbab1fcp+6, +0x1.0ed487d21da91p+5, 0x1.7ed06a9afda0dp+5, 0x1.10e0e41621c1dp+6, 0x1.54d4272aa9a85p+5, +0x1.b7c43e136f888p+4, 0x1.9ef0b9fb3de17p+5, 0x1.b3a85a336750bp+4, 0x1.4ce498ea99c93p+6, +0x1.bb06b313760d6p+6, 0x1.dee6cd9fbdcdap+6, 0x1.661ec812cc3d9p+5, 0x1.fa584c27f4b0ap+6, +0x1.3b14092676281p+6, 0x1.c7c92b538f925p+6, 0x1.b0047db36009p+6, 0x1.52c2cdc2a585ap+2, +0x1.e005a703c00b5p+5, 0x1.42b7f6de856ffp+6, 0x1.e8fb40c3d1f68p+5, 0x1.3e5cf75a7cb9fp+6, +0x1.c266828384cdp+1, 0x1.8965bc4312cb8p+3, 0x1.cf4825db9e905p+6, 0x1.310d0e02621a2p+2, +0x1.706db662e0db7p+4, 0x1.aa26651f544cdp+6, 0x1.13ff362227fe7p+3, 0x1.e581c203cb038p+0, +0x1.ac3df683587bfp+1, 0x1.a43c877348791p+5, 0x1.dd25e7c3ba4bdp+6, 0x1.2998673a5330dp+5, +0x1.91867907230cfp+6, 0x1.dc0d97abb81b3p+5, 0x1.3f3647327e6c9p+6, 0x1.ff77888bfeef1p+6, +0x1.bd7f28d37afe5p+6, 0x1.ac205dbf5840cp+6, 0x1.4c5c217698b84p+6, 0x1.7885dbe2f10bbp+6, +0x1.8b072b5b160e5p+6, 0x1.ff6b857ffed71p+6, 0x1.72de280ae5bc5p+6, 0x1.8c3668fb186cdp+5, +0x1.c734b0cf8e696p+6, 0x1.22e2a5ba45c55p+6, 0x1.b68ec2bb6d1d8p+5, 0x1.6e6f089adcde1p+5, +0x1.966a72632cd4ep+4, 0x1.cfc501bf9f8ap+6, 0x1.f5947ba7eb28fp+6, 0x1.ceb742b39d6e8p+4, +0x1.e3728803c6e51p-3, 0x1.c4dca17f89b94p+6, 0x1.0d7d431a1afa8p+5, 0x1.74349b72e8693p+4, +0x1.6f03069ade061p+6, 0x1.527d10aaa4fa2p+5, 0x1.928cb79325197p+4, 0x1.7c64f64ef8c9fp+6, +0x1.7b5ccc0ef6b9ap+6, 0x1.072456a20e48bp+4, 0x1.13129e8226254p+2, 0x1.0ce3451619c69p+6, +0x1.2fcfe17e5f9fcp+6, 0x1.5067711aa0ceep+6, 0x1.0c5acd9e18b5ap+6, 0x1.da9e14a3b53c3p+5, +0x1.f90f9dabf21f4p+5, 0x1.62dbbc42c5b78p+4, 0x1.975398c32ea73p+4, 0x1.0f1df45a1e3bfp+5, +0x1.6089d232c113ap+4, 0x1.d8b30e3bb1662p+6, 0x1.4daa2eae9b546p+6, 0x1.f5725583eae4bp+2, +0x1.f72b67ebee56dp+5, 0x1.478c80428f19p+3, 0x1.ad1d53535a3aap+5, 0x1.6130508ec260ap+6, +0x1.f8b691c7f16d2p+6, 0x1.98464a9b308c9p+5, 0x1.d4de213ba9bc4p+6, 0x1.f9a84b0bf3509p+6, +0x1.21ff8d9a43ff2p+5, 0x1.6e730b22dce61p+4, 0x1.5ad5c792b5ab9p+4, 0x1.66b20002cd64p-9, +0x1.04db4b1e09b69p+6, 0x1.76b13f9aed628p+5, 0x1.7c67c3b6f8cf8p+6, 0x1.00702e5200e06p+5, +0x1.fa436aebf486dp+5, 0x1.8d98ed9f1b31ep+6, 0x1.8d1b5c3f1a36cp+6, 0x1.678cb782cf197p+3, +0x1.bc00bd7378018p+5, 0x1.32ec53ba65d8ap+5, 0x1.1a40a14234814p+6, 0x1.da882d8fb5106p+6, +0x1.e45a31dbc8b46p+5, 0x1.80158777002b1p+6, 0x1.885c9ef310b94p+4, 0x1.4a4f8d7e949f2p+6, +0x1.58c895aeb1913p+6, 0x1.afc1566b5f82bp+6, 0x1.69a6b2d6d34d6p+6, 0x1.51792682a2f25p+4, +0x1.d8b2e673b165dp+6, 0x1.00d571f201aaep+4, 0x1.b58e9a2f6b1d3p+6, 0x1.d1697837a2d2fp+6, +0x1.0c5881ce18b1p+6, 0x1.8a6cbb6b14d97p+6, 0x1.cb11c33f96238p+6, 0x1.9d58489b3ab09p+6, +0x1.e6097e33cc13p+6, 0x1.0e39a9021c735p+3, 0x1.9d5b15ff3ab63p+6, 0x1.d5c9929bab932p+5, +0x1.ba3fa9db747f5p+5, 0x1.19c2d9b23385bp+6, 0x1.6b1ce076d639cp+6, 0x1.da418a63b4831p+6, +0x1.4eb78ea29d6f2p+5, 0x1.f070796be0e0fp+5, 0x1.ccc855039990bp+0, 0x1.855c260b0ab85p+6, +0x1.91ae6693235cdp+6, 0x1.2173c29642e78p+6, 0x1.5fe45396bfc8ap+6, 0x1.07b6fefa0f6ep+5, +0x1.4312941286253p+5, 0x1.c1fb7b5383f6fp+6, 0x1.ce2b0cfb9c562p+6, 0x1.fa51dfbbf4a3cp+6, +0x1.71bcd1bae379ap+6, 0x1.37d1bfd26fa38p+6, 0x1.3ac0a56275815p+4, 0x1.4a6fb82a94df7p+6, +0x1.78071c4ef00e4p+6, 0x1.0fb0e2021f61cp+0, 0x1.1bd9305e37b26p+6, 0x1.08bf3c32117e8p+5, +0x1.8eab7ef31d57p+6, 0x1.cdd5e7339babdp+5, 0x1.0dbf35821b7e7p+3, 0x1.74b4fd22e96ap+6, +0x1.08b228be11645p+6, 0x1.bf12fcb37e26p+6, 0x1.7e6719b2fcce3p+4, 0x1.e5d1fdabcba4p+6, +0x1.b1abacc363576p+5, 0x1.cab6a6e3956d5p+6, 0x1.c013880f80271p+6, 0x1.80319db300634p+6, +0x1.85ddc72b0bbb9p+5, 0x1.c746a9638e8d5p+6, 0x1.058dc3ba0b1b8p+6, 0x1.52752892a4ea5p+4, +0x1.d174d7eba2e9bp+5, 0x1.95c85d432b90cp+4, 0x1.b0f1934b61e32p+5, 0x1.8a43b60314877p+6, +0x1.3b6c950276d93p+3, 0x1.4d47ad3a9a8f6p+5, 0x1.849595bb092b3p+6, 0x1.992a645f3254dp+6, +0x1.de75966fbceb3p+6, 0x1.d345bf13a68b8p+6, 0x1.c734390b8e687p+5, 0x1.567cb2beacf96p+6, +0x1.d784829baf09p+6, 0x1.ff734ce7fee6ap+6, 0x1.dadc50d7b5b8ap+6, 0x1.6630018acc6p+6, +0x1.ccbc80fb9979p+5, 0x1.fc94378bf9287p+6, 0x1.b5c9fd536b94p+5, 0x1.ef10693bde20dp+6, +0x1.bba7343b774e7p+6, 0x1.3a7ec51674fd9p+6, 0x1.d4e266e7a9c4dp+6, 0x1.28fa153251f43p+5, +0x1.05356bfa0a6adp+6, 0x1.94f5eef329ebep+6, 0x1.4aea84c295d51p+2, 0x1.c8244f8f9048ap+6, +0x1.5c3c9852b8793p+6, 0x1.1a3c6c063478ep+6, 0x1.cc199b4398333p+2, 0x1.13dc111227b82p+4, +0x1.7fae8356ff5dp+6, 0x1.ea74c6b3d4e99p+5, 0x1.cf3aba479e757p+6, 0x1.a71c15fb4e383p+6, +0x1.9bde39f737bc7p+6, 0x1.53d04ffea7a0ap+6, 0x1.40467a56808cfp+6, 0x1.7a53d066f4a7ap+6, +0x1.27160f124e2c2p+6, 0x1.1f04b6c23e097p+3, 0x1.a1a1064343421p+5, 0x1.fd352353fa6a4p+5, +0x1.1a9f1de2353e4p+3, 0x1.5759a7eaaeb35p+5, 0x1.932a4cd32654ap+4, 0x1.09b2243e13645p+6, +0x1.508216faa1043p+5, 0x1.3faf91de7f5f2p+6, 0x1.f1851aebe30a3p+5, 0x1.8fa0fed31f42p+4, +0x1.e8b95bd3d172bp+4, 0x1.9b49e8b33693dp+5, 0x1.f0ca94a3e1953p+5, 0x1.7f63c2eefec78p+6, +0x1.8a6b8d2314d72p+4, 0x1.0d13f29e1a27ep+6, 0x1.4788127a8f102p+6, 0x1.bed77b9b7daefp+6, +0x1.3a82f5027505fp+3, 0x1.6449ac2ec8936p+6, 0x1.e73ff003ce7fep-1, 0x1.a6fee1fb4dfdcp+6, +0x1.66103e12cc208p+4, 0x1.d3093a27a6127p+6, 0x1.4e1af7f29c35fp+6, 0x1.f562497feac49p+6, +0x1.26d98a264db31p+6, 0x1.1cc2e48a3985dp+5, 0x1.6fb619e2df6c3p+6, 0x1.37be64d26f7cdp+4, +0x1.6484123ac9082p+5, 0x1.021a74020434fp+4, 0x1.4c8a2ade99145p+6, 0x1.ab2bd9bb5657bp+5, +0x1.d866e1ebb0cdcp+5, 0x1.b154be1362a98p+6, 0x1.df48111bbe902p+6, 0x1.94747c7728e9p+6, +0x1.e2089fe3c4114p+5, 0x1.b0153d1b602a8p+5, 0x1.f85cbc2bf0b98p+6, 0x1.6b32a6e6d6655p+6, +0x1.a5af92eb4b5f2p+6, 0x1.e1840cf3c3082p+5, 0x1.d52cd3a3aa59ap+5, 0x1.094ec602129d9p+1, +0x1.fdd5f917fbabfp+6, 0x1.90f3e24321e7cp+3, 0x1.c721f1cf8e43ep+6, 0x1.2932bdc252658p+3, +0x1.9668287b2cd05p+6, 0x1.caf071af95e0ep+6, 0x1.cc2539b3984a7p+6, 0x1.efec37ffdfd87p+6, +0x1.9df9abd33bf35p+6, 0x1.1a4031a234806p+6, 0x1.e54e817bca9dp+6, 0x1.89a66beb134cdp+5, +0x1.a8a1a3e751434p+6, 0x1.55049b5aaa093p+6, 0x1.12c2cf2a2585ap+6, 0x1.6b8eb402d71d7p+4, +0x1.958b385b2b167p+6, 0x1.7d33e822fa67dp+4, 0x1.307999de60f33p+6, 0x1.037d52a206faap+5, +0x1.0a1b81821437p+2, 0x1.0fc1aaf61f835p+6, 0x1.63325c42c664cp+2, 0x1.01a6080a034c1p+6, +0x1.e7cc4987cf989p+6, 0x1.d1fc3d83a3f88p+1, 0x1.b362bbb366c57p+4, 0x1.8d7bdc6f1af7cp+6, +0x1.fea3d0d3fd47ap+5, 0x1.576f18beaede3p+6, 0x1.95c6529f2b8cap+6, 0x1.fa4fc2fbf49f8p+5, +0x1.898d950b131b3p+6, 0x1.5ce8446ab9d09p+6, 0x1.224e3936449c7p+6, 0x1.1ff5bd823feb8p+6, +0x1.27d8b6164fb17p+6, 0x1.dce6e5cbb9cddp+5, 0x1.0fe1f57e1fc3fp+6, 0x1.8ba4c3d317498p+5, +0x1.167490822ce92p+1, 0x1.ea60edf3d4c1ep+5, 0x1.8aa597df154b3p+6, 0x1.b155486b62aa9p+6, +0x1.28d4494251a89p+4, 0x1.3ad0ce1275a1ap+5, 0x1.871ead830e3d6p+1, 0x1.dfc04aafbf809p+6, +0x1.f96ac223f2d58p+5, 0x1.3cb28f4a79652p+6, 0x1.85fbcff30bf7ap+4, 0x1.0d57192a1aae3p+6, +0x1.31d0e90263a1dp+4, 0x1.dec86703bd90dp+4, 0x1.dfa42683bf485p+1, 0x1.a2041e2344084p+3, +0x1.0c83f75a1907fp+5, 0x1.ef574083deae8p+4, 0x1.c1bc60338378cp+6, 0x1.8593e4170b27dp+6, +0x1.d344e8e3a689dp+6, 0x1.5782b2ceaf056p+6, 0x1.05778b2a0aef1p+5, 0x1.5cd27deab9a5p+6, +0x1.68d5ee72d1abep+5, 0x1.a509fecb4a14p+6, 0x1.f320eda3e641ep+4, 0x1.dc43ad4fb8876p+6, +0x1.26fae3624df5cp+5, 0x1.8caa30e719546p+6, 0x1.442c1e6a88584p+5, 0x1.38622c6a70c46p+5, +0x1.03b54fba076aap+5, 0x1.65dd38a2cbba7p+3, 0x1.36197a826c32fp+4, 0x1.981f7463303efp+5, +0x1.94481c3b28904p+5, 0x1.66fd5032cdfaap+4, 0x1.57a009baaf401p+5, 0x1.c6d96f2f8db2ep+6, +0x1.9671e3572ce3cp+6, 0x1.0d4ef8da1a9dfp+6, 0x1.a86110ab50c22p+5, 0x1.e2e61d97c5cc4p+6, +0x1.8501129b0a022p+6, 0x1.c65b53138cb6ap+5, 0x1.726a1582e4d43p+2, 0x1.6861c882d0c39p+1, +0x1.5f0379aebe06fp+6, 0x1.d8e3018bb1c6p+6, 0x1.90d6f25f21adep+6, 0x1.3248628e6490cp+6, +0x1.3065b45a60cb7p+6, 0x1.392b7f027257p+2, 0x1.1e35c0ea3c6b8p+5, 0x1.e4d0ab93c9a15p+6, +0x1.b89cb6bb71397p+6, 0x1.0be31bde17c63p+6, 0x1.c11458df8228bp+6, 0x1.3068a1a260d14p+4, +0x1.311a998262353p+5, 0x1.8ca9a05319534p+4, 0x1.d0967d43a12dp+5, 0x1.1a67f4a234cffp+6, +0x1.1fcc1e523f984p+5, 0x1.35d19d426ba34p+6, 0x1.e677aed3ccef6p+6, 0x1.5a0a1d46b4144p+6, +0x1.8f90f14f1f21ep+6, 0x1.248f675a491edp+5, 0x1.20e38c7241c72p+6, 0x1.2602d4a24c05bp+6, +0x1.9f96ac873f2d6p+6, 0x1.f51414c7ea283p+6, 0x1.08e8f23a11d1ep+6, 0x1.2497bf1e492f8p+6, +0x1.b0837ca36107p+5, 0x1.200f9392401f2p+6, 0x1.2fdacd625fb5ap+6, 0x1.ba29bfe374538p+3, +0x1.f1e52a3be3ca5p+5, 0x1.81637f7b02c7p+5, 0x1.698d9a8ad31b3p+6, 0x1.4ac24ba295849p+3, +0x1.a888ef5b5111ep+5, 0x1.f8a87afff150fp+6, 0x1.c51ea0838a3d4p+1, 0x1.19c25cd23384cp+5, +0x1.048b96da09173p+6, 0x1.cf3d4de39e7aap+6, 0x1.b1f6ada363ed6p+5, 0x1.9d18e39b3a31cp+6, +0x1.933dafa3267b6p+3, 0x1.c1469573828d3p+6, 0x1.6f01b072de036p+5, 0x1.849b8a3b09371p+5, +0x1.ee306563dc60dp+5, 0x1.3bf10e1277e22p+5, 0x1.c57e26038afc5p+2, 0x1.0d5247fa1aa49p+5, +0x1.30403ab660807p+6, 0x1.3d3b6ed27a76ep+6, 0x1.acabf8a35957fp+6, 0x1.9fadce733f5bap+5, +0x1.324f839a649fp+6, 0x1.6b29d5b2d653bp+5, 0x1.f46ea657e8dd5p+6, 0x1.52283d02a4508p+1, +0x1.d5a47e6bab49p+6, 0x1.244973ba4892ep+6, 0x1.0759e7920eb3dp+4, 0x1.9d2e270b3a5c5p+5, +0x1.e4fb3377c9f66p+6, 0x1.ab64146f56c83p+6, 0x1.efdeb9f3dfbd7p+5, 0x1.727f564ae4febp+5, +0x1.a40c8f6b48192p+6, 0x1.061851fe0c30ap+6, 0x1.4620d98e8c41bp+6, 0x1.51304c82a260ap+5, +0x1.aaab3fc355568p+5, 0x1.f1c305c3e3861p+2, 0x1.16c427622d885p+4, 0x1.07bd55d60f7abp+6, +0x1.e062c5d3c0c59p+6, 0x1.fa63c42bf4c79p+5, 0x1.ca0b1af794163p+6, 0x1.aef5f1035debep+5, +0x1.9b2a691f3654dp+6, 0x1.e662fd57ccc6p+6, 0x1.5e241c82bc484p+6, 0x1.96d547ab2daa9p+5, +0x1.239e6c2a473cep+6, 0x1.0ad0152215a03p+6, 0x1.9b418b0f36831p+6, 0x1.57b7bf02af6f8p+4, +0x1.c064fffb80cap+6, 0x1.8fb031671f606p+6, 0x1.81fcc6a303f99p+4, 0x1.96097e632c13p+6, +0x1.67f34a3acfe69p+5, 0x1.44ab571a8956bp+5, 0x1.928247a325049p+4, 0x1.31e9b12263d36p+5, +0x1.36e6ffe26dcep+4, 0x1.5c8feee2b91fep+6, 0x1.523483b6a469p+6, 0x1.f1c64f63e38cap+6, +0x1.8aa103831542p+4, 0x1.30aaba8261557p+5, 0x1.34bceb426979dp+5, 0x1.37fde0c26ffbcp+6, +0x1.6ee31b42ddc63p+5, 0x1.c01efef3803ep+5, 0x1.fdd9b4a3fbb37p+3, 0x1.2fa8a6e25f515p+5, +0x1.dd41618fba82cp+6, 0x1.38ca310271946p+1, 0x1.6f4f4bf2de9e9p+6, 0x1.786bcaaef0d79p+6, +0x1.f0294ee3e052ap+6, 0x1.9ae6d0e335cdap+5, 0x1.0f59ba021eb37p+4, 0x1.13c7bb0a278f7p+6, +0x1.d8437d93b087p+6, 0x1.df17f98fbe2ffp+6, 0x1.69b5aacad36b5p+6, 0x1.98a87d8b3151p+6, +0x1.6ec82af2dd905p+6, 0x1.ca34dc739469cp+6, 0x1.2eb1fbee5d63fp+6, 0x1.160e80622c1dp+3, +0x1.b22a1ff364544p+4, 0x1.93528dd726a52p+6, 0x1.776d5142eedaap+5, 0x1.74888feae9112p+5, +0x1.dfc4f96bbf89fp+5, 0x1.bd658a837acb1p+1, 0x1.58152eaab02a6p+5, 0x1.528abd96a5158p+6, +0x1.4c81133299022p+5, 0x1.46690cf68cd22p+6, 0x1.15113caa2a228p+5, 0x1.5db2173abb643p+6, +0x1.33c463626788cp+3, 0x1.9487a9db290f5p+5, 0x1.f5866aabeb0cdp+6, 0x1.dcf6fe03b9eep-1, +0x1.a8144ceb5028ap+5, 0x1.64d5b69ac9ab7p+6, 0x1.7c25b8aaf84b7p+6, 0x1.8866eaab10cddp+5, +0x1.9248f8632491fp+3, 0x1.bffc272b7ff85p+6, 0x1.d7fb305faff66p+6, 0x1.51939382a3272p+1, +0x1.9f1420b73e284p+6, 0x1.41b0db268361bp+6, 0x1.a3351a2b466a3p+6, 0x1.0ddc4baa1bb89p+6, +0x1.0be5b79617cb7p+6, 0x1.a3ce2c2b479c6p+5, 0x1.309e1bb6613c3p+6, 0x1.78703f92f0e08p+6, +0x1.94e68fa329cd2p+4, 0x1.ec54c457d8a99p+6, 0x1.95a43c232b488p+3, 0x1.551c209eaa384p+6, +0x1.fa3ff0aff47fep+6, 0x1.bd7e3db37afc8p+5, 0x1.4f4dbc6a9e9b8p+5, 0x1.4100f48a8201fp+5, +0x1.29415e625282cp+3, 0x1.322f7c8a645fp+6, 0x1.fe32917ffc652p+6, 0x1.2e82e0f25d05cp+4, +0x1.fc735177f8e6ap+6, 0x1.f3b8fc27e772p+6, 0x1.3d6a98e27ad53p+4, 0x1.a0faefdb41f5ep+5, +0x1.588eb2beb11d6p+6, 0x1.cb805ee39700cp+6, 0x1.94b0ed432961ep+6, 0x1.8ad7d1cb15afap+6, +0x1.8b7c860b16f91p+6, 0x1.6cac1da2d9584p+6, 0x1.95646e6b2ac8ep+6, 0x1.2a90a6be55215p+6, +0x1.5cb9f18ab973ep+5, 0x1.3899889271331p+6, 0x1.c367932386cf2p+3, 0x1.ba42b05f74856p+6, +0x1.5013d482a027bp+1, 0x1.690b0e1ed2162p+6, 0x1.32b2efee6565ep+6, 0x1.bee90a337dd21p+4, +0x1.555fd272aabfap+6, 0x1.65677776cacefp+6, 0x1.c4d6632b89accp+6, 0x1.4f9fc31e9f3f8p+6, +0x1.109a59322134bp+4, 0x1.b1f5057363ea1p+4, 0x1.f0203d63e0408p+6, 0x1.a53b08734a761p+4, +0x1.9eacbdeb3d598p+6, 0x1.ee52cedfdca5ap+6, 0x1.69def4b2d3bdfp+5, 0x1.9b200f5f36402p+6, +0x1.e20bcb03c4179p+6, 0x1.044a209208944p+6, 0x1.ae761d235cec4p+4, 0x1.3a9a7dc27535p+6, +0x1.9f94fee33f2ap+5, 0x1.39d2300273a46p-4, 0x1.8ae49f1315c94p+5, 0x1.6d1c15e2da383p+4, +0x1.6cfa922ed9f52p+6, 0x1.6b5af7c2d6b5fp+4, 0x1.85d7ac370baf6p+6, 0x1.b578af036af16p+2, +0x1.9370468326e09p+6, 0x1.be449e9f7c894p+6, 0x1.d59a3b4fab347p+6, 0x1.9df0e5273be1dp+6, +0x1.274facba4e9f6p+6, 0x1.084d2b3e109a5p+6, 0x1.b564f6036ac9fp+1, 0x1.f2bdfca3e57cp+4, +0x1.b6d28ac36da51p+4, 0x1.d2818adfa5031p+6, 0x1.cc4f424b989e8p+6, 0x1.63b671fac76cep+5, +0x1.f7f661c3efeccp+3, 0x1.bc6f7fab78dfp+6, 0x1.1b29fb1a3653fp+6, 0x1.ddab8a23bb571p+6, +0x1.aac24e8b5584ap+6, 0x1.d0197573a032fp+6, 0x1.78cb9982f1973p+6, 0x1.8cce198b199c3p+6, +0x1.a8c72c03518e6p+5, 0x1.e46920cbc8d24p+6, 0x1.8ed12e931da26p+5, 0x1.a42e1573485c3p+6, +0x1.e4b79557c96f3p+6, 0x1.8cdae6d719b5dp+6, 0x1.ff751aebfeea3p+6, 0x1.51b22782a3645p+6, +0x1.e7b1a4c7cf635p+6, 0x1.854cc7230a999p+6, 0x1.6d09b276da136p+6, 0x1.7b21eb4af643dp+6, +0x1.439165be8722dp+6, 0x1.42a3edc28547ep+6, 0x1.1912d06e3225ap+6, 0x1.ab8449d357089p+4, +0x1.2bc463f25788cp+4, 0x1.26bdf8224d7bfp+6, 0x1.cf21233b9e424p+5, 0x1.714b775ae296fp+5, +0x1.f27f05fbe4fe1p+5, 0x1.67bfa7cacf7f5p+5, 0x1.6a80f4aed501fp+6, 0x1.383e4f36707cap+6, +0x1.c13d4e43827aap+4, 0x1.0b55df8a16abcp+5, 0x1.15e9d95a2bd3bp+6, 0x1.b11a218362344p+2, +0x1.571194e2ae233p+4, 0x1.1d6ae5b23ad5dp+5, 0x1.a7dfbba34fbf7p+6, 0x1.2a27fb3a544ffp+6, +0x1.cc7a4e8398f4ap+4, 0x1.bd214bb37a429p+4, 0x1.9cac215b39584p+5, 0x1.5f58a3e2beb14p+4, +0x1.fc2339c3f8467p+6, 0x1.9b96572b372cbp+5, 0x1.a988507b5310ap+6, 0x1.e3d4de87c7a9cp+6, +0x1.4c5fcad298bf9p+4, 0x1.169202ee2d24p+6, 0x1.5ef6c9cebded9p+6, 0x1.96a958732d52bp+6, +0x1.64d7c2c2c9af8p+4, 0x1.e02668f3c04cdp+4, 0x1.8a6ae40314d5dp-2, 0x1.484e135a909c2p+5, +0x1.9ec7925f3d8f2p+6, 0x1.d235f90ba46bfp+5, 0x1.5cccc55eb9999p+6, 0x1.300e2ab2601c5p+5, +0x1.9cfad06b39f5ap+6, 0x1.8e9b74131d36fp+5, 0x1.d045648fa08adp+6, 0x1.a9447f035289p+1, +0x1.4cf8a9ce99f15p+6, 0x1.cc5e7bcb98bcfp+5, 0x1.42de308285bc6p+3, 0x1.a2bd0f07457a2p+6, +0x1.74e4b0bee9c96p+6, 0x1.d03b81b7a077p+6, 0x1.99ca148333943p+5, 0x1.e8034463d0069p+6, +0x1.fc1ea503f83d5p+3, 0x1.9b3b1aef36763p+6, 0x1.fecb6ac3fd96dp+3, 0x1.dd387303ba70ep+3, +0x1.a4191a0348323p+4, 0x1.e961bdd3d2c38p+6, 0x1.f7bece43ef7dap+2, 0x1.783c7272f078ep+5, +0x1.ffe78183ffcfp+5, 0x1.7e72b6b6fce57p+6, 0x1.4b1e46a2963c9p+4, 0x1.5929b172b2536p+6, +0x1.f67c50f3ecf8ap+6, 0x1.5147f242a28fep+4, 0x1.fd50bb1ffaa17p+6, 0x1.9543e34f2a87cp+6, +0x1.3d6cf9167ad9fp+6, 0x1.5a1d807ab43bp+6, 0x1.6a57c522d4af9p+3, 0x1.b4cf92fb699f2p+5, +0x1.0b59d40216b3bp+3, 0x1.fd905d33fb20cp+6, 0x1.cf63daf39ec7bp+5, 0x1.6e63e452dcc7dp+6, +0x1.c77f36338efe7p+5, 0x1.100db38a201b6p+6, 0x1.1120f3562241ep+6, 0x1.62912f52c5226p+4, +0x1.c0926a7b8124dp+5, 0x1.de05fd97bc0cp+6, 0x1.029e40d2053c8p+4, 0x1.1fcd09de3f9a1p+6, +0x1.79411882f2823p+6, 0x1.0101fb1a0203fp+5, 0x1.5b74183eb6e83p+6, 0x1.e2475f07c48ecp+6, +0x1.a78aed834f15ep+4, 0x1.7af00526f5e01p+6, 0x1.3ccb307a79966p+5, 0x1.69d67c22d3adp+6, +0x1.f2c577b3e58afp+5, 0x1.e25a53cbc4b4ap+5, 0x1.86005b230c00bp+5, 0x1.dfbe1993bf7c3p+5, +0x1.457f26768afe5p+6, 0x1.80a1d15b0143ap+5, 0x1.0a45e02a148bcp+5, 0x1.05d83f120bb08p+5, +0x1.a6e692834dcd2p+2, 0x1.64dbd172c9b7ap+5, 0x1.5d53e90abaa7dp+6, 0x1.decd1d43bd9a4p+3, +0x1.5ffc8bd2bff91p+5, 0x1.14175a02282ebp+4, 0x1.aa3d87fb547b1p+6, 0x1.93bde103277bcp+6, +0x1.55138a0aaa271p+6, 0x1.76bcf6a2ed79fp+5, 0x1.ec622cdbd8c46p+6, 0x1.aae5fa4355cbfp+3, +0x1.32c8f1ca6591ep+5, 0x1.684de862d09bdp+3, 0x1.5529c926aa539p+6, 0x1.2a59168254b23p+2, +0x1.5b15753ab62afp+5, 0x1.613bc2cac2778p+5, 0x1.f4ecf06fe9d9ep+6, 0x1.176d75fe2edafp+6, +0x1.5c6f3442b8de7p+3, 0x1.26a511524d4a2p+5, 0x1.0287e43a050fdp+5, 0x1.24f0a26249e14p+6, +0x1.847fb28f08ff6p+6, 0x1.44441fae88884p+6, 0x1.4cfaf28299f5ep+2, 0x1.93fdb20b27fb6p+5, +0x1.254216024a843p+0, 0x1.33e53e7a67ca8p+5, 0x1.4ceaf88e99d5fp+6, 0x1.f0371803e06e3p+2, +0x1.4c6087f698c11p+6, 0x1.547dc32aa8fb8p+5, 0x1.6b7454b2d6e8bp+4, 0x1.fc5ecddff8bdap+6, +0x1.de89702bbd12ep+5, 0x1.46a749028d4e9p+0, 0x1.901caee320396p+6, 0x1.1161088222c21p+4, +0x1.80f230eb01e46p+5, 0x1.7c7edbbaf8fdbp+6, 0x1.e6d405a3cda81p+4, 0x1.59dd915eb3bb2p+6, +0x1.a98898c753113p+6, 0x1.cedeca8f9dbd9p+6, 0x1.6c8322c6d9064p+6, 0x1.5c4d4d82b89aap+4, +0x1.fdf2afc3fbe56p+4, 0x1.61701332c2e02p+6, 0x1.6e80c95edd019p+6, 0x1.561524f2ac2a5p+5, +0x1.f4c29bdbe9853p+6, 0x1.efc4bb7bdf897p+6, 0x1.cffb34db9ff67p+6, 0x1.79424e66f284ap+6, +0x1.3408db266811bp+6, 0x1.e4cae403c995dp+6, 0x1.0d049da21a094p+4, 0x1.389de382713bcp+6, +0x1.faf60cf3f5ec2p+4, 0x1.902c1ffb20584p+6, 0x1.57a15502af42bp+6, 0x1.cb1e0b33963c1p+6, +0x1.d3580c63a6b02p+3, 0x1.b27e6a2f64fcdp+6, 0x1.c77cd9138ef9bp+6, 0x1.29afb9a6535f7p+6, +0x1.b79907576f321p+6, 0x1.579987f2af331p+6, 0x1.6e07fbc6dc0ffp+6, 0x1.e0487f23c091p+4, +0x1.a830c75350619p+5, 0x1.e7bcfd2fcf7ap+6, 0x1.d1efb127a3df6p+6, 0x1.f683f1b3ed07ep+4, +0x1.b69bc7bb6d379p+6, 0x1.3e72d3ea7ce5ap+6, 0x1.a9689fa352d14p+5, 0x1.b0c39d6361874p+3, +0x1.3fc5ce327f8bap+5, 0x1.0cd464b219a8dp+4, 0x1.c2460c4b848c2p+5, 0x1.294b05e252961p+5, +0x1.97cea5432f9d5p+3, 0x1.623c7602c478fp+5, 0x1.bcfa2b0379f45p+1, 0x1.6702afcece056p+6, +0x1.2bd23e0257a48p+5, 0x1.44a3e3028947cp+4, 0x1.3f41269a7e825p+5, 0x1.14a6a242294d4p+6, +0x1.e15518bbc2aa3p+6, 0x1.f741e853ee83dp+6, 0x1.bf895ae37f12bp+5, 0x1.bc01a48378035p+2, +0x1.a9c0527f5380ap+6, 0x1.4e830d029d062p+5, 0x1.456fd3ee8adfap+6, 0x1.615959d2c2b2bp+6, +0x1.fedb0e73fdb62p+6, 0x1.66ef9f62cddf4p+5, 0x1.d96b799fb2d6fp+6, 0x1.a5e6e4334bcddp+5, +0x1.366999ba6cd33p+5, 0x1.ab5b2ac356b65p+6, 0x1.50946e8aa128ep+6, 0x1.474252528e84ap+4, +0x1.d39bfd5ba738p+5, 0x1.2a45f2c2548bep+3, 0x1.0fd210821fa42p+5, 0x1.89b0e5c71361dp+6, +0x1.a1f75e1343eecp+4, 0x1.690c0e6ad2182p+6, 0x1.e5668b83cacd1p+2, 0x1.36ef585a6ddebp+5, +0x1.a2a4968345493p+2, 0x1.61f1d082c3e3ap+3, 0x1.3d2dfe027a5cp-1, 0x1.6026d0d2c04dap+5, +0x1.f59ccb43eb399p+4, 0x1.4435de92886bcp+5, 0x1.c4ba0aab89741p+6, 0x1.7af12e32f5e26p+4, +0x1.32b9af3265736p+5, 0x1.48fd703a91faep+5, 0x1.e9f19753d3e33p+4, 0x1.0c74a86218e95p+4, +0x1.4bc03e9e97808p+6, 0x1.bfec39c37fd87p+6, 0x1.a47683eb48edp+6, 0x1.4a9b4d129536ap+6, +0x1.cd9025c39b205p+4, 0x1.7de1fd86fbc4p+6, 0x1.d8ebf283b1d7ep+2, 0x1.0e98d64e1d31bp+6, +0x1.293d284a527a5p+6, 0x1.6e232db2dc466p+6, 0x1.60696ae2c0d2dp+6, 0x1.30b26f426164ep+2, +0x1.936bec0b26d7ep+6, 0x1.e8527327d0a4ep+6, 0x1.9cbc0cbb39782p+6, 0x1.fbe9c393f7d38p+6, +0x1.515e818ea2bdp+6, 0x1.bb1275737624fp+6, 0x1.2ec2df7a5d85cp+5, 0x1.6b88caf6d7119p+6, +0x1.e750af83cea16p+6, 0x1.33b79772676f3p+5, 0x1.b9c335c373867p+2, 0x1.92df895325bf1p+4, +0x1.3bf6bb0677ed7p+6, 0x1.e0563e0bc0ac8p+6, 0x1.86e85bc30dd0bp+5, 0x1.d553929faaa72p+6, +0x1.09a9ec4a1353ep+5, 0x1.3df093b67be12p+6, 0x1.870bcb430e179p+2, 0x1.d09534c3a12a7p+6, +0x1.fbb99aebf7733p+5, 0x1.bce740a379ce8p+6, 0x1.1b3081d23661p+6, 0x1.7140d6e6e281bp+6, +0x1.3ac93e2675928p+6, 0x1.38bf40fe717e8p+6, 0x1.ff66b4c3fecd7p+4, 0x1.901999b320333p+4, +0x1.4dc4dd5a9b89cp+5, 0x1.e0431813c0863p+6, 0x1.dc463583b88c7p+4, 0x1.d272d5c3a4e5bp+3, +0x1.c8958b37912b1p+6, 0x1.3cd9a1c279b34p+2, 0x1.b1c0f2436381ep+3, 0x1.19f40cc233e82p+6, +0x1.cee00f8f9dc02p+6, 0x1.9b331c0b36664p+5, 0x1.0af9af6a15f36p+5, 0x1.b630bf136c618p+6, +0x1.677559c2ceeabp+6, 0x1.4232162a84643p+5, 0x1.ae8a16435d143p+2, 0x1.46d8298a8db05p+5, +0x1.02de923a05bd2p+5, 0x1.bcb99e8b79734p+5, 0x1.e2fe9d83c5fd4p+4, 0x1.06443f420c888p+6, +0x1.c4d62f8389ac6p+2, 0x1.2260c83244c19p+5, 0x1.adb2e8035b65dp+5, 0x1.1a2a306e34546p+6, +0x1.385e92e270bd2p+4, 0x1.f209f5d7e413fp+6, 0x1.16d60ea22dac2p+5, 0x1.88e0e2df11c1cp+6, +0x1.2ac936d255927p+6, 0x1.0b44b48216897p+6, 0x1.ece7494fd9ce9p+6, 0x1.d1aba57fa3575p+6, +0x1.d70f9923ae1f3p+5, 0x1.8fe35ab31fc6bp+4, 0x1.7f400682fe801p+1, 0x1.683aaf92d0756p+5, +0x1.df19c323be338p+4, 0x1.08c879f21190fp+4, 0x1.ce11648b9c22dp+6, 0x1.1a9a01623534p+4, +0x1.0fcbac861f976p+6, 0x1.4e38f1029c71ep+4, 0x1.fcd73f6bf9ae8p+6, 0x1.dd041913ba083p+4, +0x1.e94e8eabd29d2p+5, 0x1.7bfe0cc2f7fc2p+2, 0x1.1aad1b0a355a3p+6, 0x1.76169072ec2d2p+6, +0x1.ec396023d872cp+5, 0x1.936cc26b26d98p+6, 0x1.f16b3ec3e2d68p+4, 0x1.126a130a24d42p+6, +0x1.24e9340249d27p+3, 0x1.533443b2a6688p+6, 0x1.64a21ba2c9443p+3, 0x1.cad32ce395a66p+4, +0x1.453e39868a7c7p+6, 0x1.6ffe958adffd3p+5, 0x1.fb95ae1bf72b6p+6, 0x1.c01dc153803b8p+4, +0x1.c343ff478688p+6, 0x1.e87cf767d0f9fp+6, 0x1.06cc57520d98bp+4, 0x1.5d9797aabb2f3p+5, +0x1.31d7384263ae7p+4, 0x1.36b458226d68bp+4, 0x1.62e9239ec5d24p+6, 0x1.88787dbb10f1p+5, +0x1.1fbe69123f7cdp+5, 0x1.30fa882a61f51p+6, 0x1.0ae2bf3615c58p+6, 0x1.9faae10f3f55cp+6, +0x1.8488c46b09119p+6, 0x1.07b9fe9e0f74p+6, 0x1.6ebe7502dd7cfp+2, 0x1.e4c02ef3c9806p+4, +0x1.1f79df6a3ef3cp+6, 0x1.3199025a6332p+6, 0x1.ef469c2fde8d4p+6, 0x1.5968f782b2d1fp+2, +0x1.8a0b898314171p+5, 0x1.ae85af735d0b6p+4, 0x1.2800a28250014p+6, 0x1.d345d68ba68bbp+5, +0x1.bed5af8f7dab6p+6, 0x1.5494e5f6a929dp+6, 0x1.5c57b67eb8af7p+6, 0x1.0413e9160827dp+6, +0x1.92861703250c3p+1, 0x1.57ed6496afdadp+6, 0x1.741b596ae836bp+6, 0x1.cfd82fff9fb06p+6, +0x1.406a5bfa80d4bp+6, 0x1.b5ce6f3f6b9cep+6, 0x1.fa8fef43f51fep+4, 0x1.8ce02a0f19c05p+6, +0x1.bdc2a4037b855p-1, 0x1.e18d1f73c31a4p+6, 0x1.4471a3a288e34p+4, 0x1.26b573a24d6aep+5, +0x1.1287a79a250f5p+6, 0x1.5bff281eb7fe5p+6, 0x1.982cd6e33059bp+3, 0x1.2e20d8025c41bp+5, +0x1.8ee49ae31dc93p+4, 0x1.27c608b24f8c1p+4, 0x1.104077be2080fp+6, 0x1.8333062306661p+6, +0x1.7b8a8486f7151p+6, 0x1.ff0e27d3fe1c5p+5, 0x1.98c9959b31933p+6, 0x1.0241251204825p+4, +0x1.6b287fc6d651p+6, 0x1.819470330328ep+5, 0x1.2a33348a54667p+6, 0x1.29fe2f5253fc6p+6, +0x1.55f1e0c2abe3cp+2, 0x1.0d15d6121a2bbp+5, 0x1.7090c322e1218p+3, 0x1.0f9a76221f34fp+3, +0x1.de784f9fbcf0ap+6, 0x1.a22d71d3445aep+6, 0x1.f1cb7ec3e397p+6, 0x1.1ee2ab9a3dc55p+6, +0x1.57fbe10eaff7cp+6, 0x1.c1bdea43837bdp+4, 0x1.5785ab4aaf0b5p+5, 0x1.5b776656b6eedp+6, +0x1.47f268028fe4dp+4, 0x1.f9be7d1bf37dp+5, 0x1.eed22027dda44p+6, 0x1.6484419ac9088p+6, +0x1.63799aa2c6f33p+4, 0x1.0ebdd8021d7bbp+3, 0x1.fb94ad9bf7296p+6, 0x1.792f1ac2f25e3p+5, +0x1.af24f4b35e49fp+4, 0x1.0bd5255617aa5p+6, 0x1.fe549c03fca94p+3, 0x1.e753c1b3cea78p+6, +0x1.6b872782d70e5p+1, 0x1.d894291bb1285p+6, 0x1.3f2057c27e40bp+3, 0x1.7684b902ed097p+6, +0x1.32bcc26265798p+5, 0x1.52173f82a42e8p+6, 0x1.4105d0aa820bap+5, 0x1.5d7afe7abaf6p+5, +0x1.d8a22a8bb1445p+6, 0x1.9d2a01733a54p+5, 0x1.a1619c0342c34p+5, 0x1.b71a7a2b6e34fp+6, +0x1.c309ca2386139p+4, 0x1.84f8998309f13p+5, 0x1.abfa4b8357f49p+5, 0x1.c8be539b917cap+6, +0x1.32ebc75265d79p+6, 0x1.81bffb67037ffp+6, 0x1.2435b9ee486b7p+6, 0x1.84e8615709d0cp+6, +0x1.fa7ce7c3f4f9dp+4, 0x1.1307da16260fbp+6, 0x1.d2d945dba5b29p+5, 0x1.aefb41335df68p+5, +0x1.34df951669bf3p+6, 0x1.ca02a11394054p+5, 0x1.94152dfb282a6p+6, 0x1.a0a8d2474151ap+6, +0x1.f0d675dfe1acfp+6, 0x1.d3dfc17ba7bf8p+6, 0x1.87fc93f70ff92p+6, 0x1.fc32af1ff8656p+6, +0x1.ac73ea9358e7dp+6, 0x1.afe09eef5fc14p+6, 0x1.72b7681ee56edp+6, 0x1.17492f022e926p+4, +0x1.01f7de7203efcp+6, 0x1.33a50702674a1p+2, 0x1.e91f95fbd23f3p+5, 0x1.b53411f36a682p+5, +0x1.c39ea25b873d4p+5, 0x1.c54098ff8a813p+6, 0x1.2369064246d21p+5, 0x1.5291c3b6a5238p+6, +0x1.0f79cb7a1ef39p+5, 0x1.67b1a8e2cf635p+6, 0x1.1b50174e36a03p+6, 0x1.baa8ad0f75516p+6, +0x1.d2e3488ba5c69p+5, 0x1.fc2e89e3f85d1p+3, 0x1.3f910e627f222p+6, 0x1.6810de36d021cp+6, +0x1.528dab52a51b5p+6, 0x1.47ed8a828fdb1p+3, 0x1.fc73f663f8e7fp+3, 0x1.0eda80ca1db5p+5, +0x1.0dff01da1bfep+6, 0x1.d3a3acc7a7476p+6, 0x1.40b0954281613p+3, 0x1.fdaaef6bfb55ep+5, +0x1.a7836e3f4f06ep+6, 0x1.b012a6a360255p+6, 0x1.f6104da3ec20ap+5, 0x1.53f758cea7eebp+6, +0x1.5ff3458ebfe69p+6, 0x1.b6fe3bc36dfc7p+4, 0x1.99c9a48f33935p+6, 0x1.87ac8ff30f592p+4, +0x1.01f3bec203e78p+5, 0x1.1cb2df123965cp+5, 0x1.3c852cfa790a6p+6, 0x1.62c9308ec5926p+6, +0x1.4e6822129cd04p+4, 0x1.ce39b01b9c736p+6, 0x1.6ab5e88ad56bdp+5, 0x1.b6addc836d5bcp+5, +0x1.35eb58fe6bd6bp+6, 0x1.d0ab0b93a1561p+6, 0x1.2bff36a257fe7p+5, 0x1.f5cfd403eb9fbp+2, +0x1.030dccc2061bap+2, 0x1.d590a9b3ab215p+6, 0x1.876ddb7b0edbbp+6, 0x1.62be881ec57d1p+6, +0x1.fe8e5b03fd1cbp+6, 0x1.c6fc5a478df8bp+6, 0x1.ea2bc887d4579p+6, 0x1.0c8d5cda191acp+6, +0x1.9aa0070f35401p+6, 0x1.241db2c2483b6p+2, 0x1.6c5a9202d8b52p+1, 0x1.4223754a8446fp+6, +0x1.c25481cf84a9p+6, 0x1.066afb620cd5fp+6, 0x1.2c359c32586b4p+5, 0x1.2247c75e448f9p+6, +0x1.742a8a52e8551p+6, 0x1.7f239522fe473p+3, 0x1.8432eb5b0865dp+6, 0x1.f52469b7ea48dp+6, +0x1.7c7bc462f8f79p+5, 0x1.817030a302e06p+5, 0x1.57ed9a42afdb3p+6, 0x1.11d7eab623afdp+6, +0x1.1de390da3bc72p+5, 0x1.a911d0835223ap+1, 0x1.ed2ed8fbda5dbp+6, 0x1.c4dd216b89ba4p+6, +0x1.ddf39a1bbbe73p+6, 0x1.065ce8920cb9dp+5, 0x1.e43a1eabc8744p+6, 0x1.ee2476e7dc48fp+6, +0x1.62fc77e2c5f8fp+4, 0x1.6ba7fa22d74ffp+6, 0x1.50e2ff06a1c6p+6, 0x1.5d35e3f2ba6bcp+4, +0x1.32a4546a6548bp+6, 0x1.3b0ec78a761d9p+6, 0x1.63dad5d6c7b5bp+6, 0x1.9a88b6eb35117p+5, +0x1.4d50a2b69aa14p+6, 0x1.6f3daa66de7b5p+6, 0x1.ecfa1783d9f43p+1, 0x1.0fa524861f4a5p+6, +0x1.d6a29723ad453p+4, 0x1.4b053daa960a8p+5, 0x1.8f675f031ececp+3, 0x1.e9d3301bd3a66p+6, +0x1.aace22fb559c4p+5, 0x1.b61fd73b6c3fbp+6, 0x1.def799cfbdef3p+6, 0x1.93a4f3af2749ep+6, +0x1.db5fbe33b6bf8p+4, 0x1.36e534126dca7p+6, 0x1.4af9bcc295f38p+5, 0x1.05c9b7fa0b937p+6, +0x1.442dc296885b8p+6, 0x1.25576eb24aaeep+5, 0x1.954db2c32a9b6p+5, 0x1.22215cae4442cp+6, +0x1.15da2ba22bb45p+6, 0x1.5dc1f012bb83ep+5, 0x1.1045d396208bap+6, 0x1.6e99499edd329p+6, +0x1.a88f22c3511e4p+2, 0x1.84a34a6309469p+4, 0x1.c5e6c29b8bcd8p+6, 0x1.4d2d46969a5a9p+6, +0x1.9c379a23386f3p+6, 0x1.29c1986e53833p+6, 0x1.a71a20834e344p+2, 0x1.d31079aba620fp+5, +0x1.31fe85aa63fd1p+5, 0x1.4ecb96229d973p+3, 0x1.f92d615bf25acp+6, 0x1.0ea7e89e1d4fdp+6, +0x1.9eb8233b3d704p+5, 0x1.58d269c2b1a4dp+3, 0x1.f0f6316be1ec6p+5, 0x1.a4c3231b49864p+6, +0x1.e13a2477c2745p+6, 0x1.aee5650b5dcadp+5, 0x1.386816c670d03p+6, 0x1.60485002c090ap+4, +0x1.cafcd28395f9ap+1, 0x1.dde4f527bbc9fp+6, 0x1.5ddbcbfabbb79p+6, 0x1.5285a92aa50b5p+6, +0x1.c242b20384856p+4, 0x1.44152ac2882a5p+3, 0x1.d29c1763a5383p+4, 0x1.866ad8230cd5bp+6, +0x1.aec73ac35d8e7p+5, 0x1.84ecd96f09d9bp+6, 0x1.ea08437bd4108p+5, 0x1.e3d91f1bc7b24p+5, +0x1.e615ac07cc2b6p+6, 0x1.75d5c8aaebab9p+5, 0x1.f8ceb103f19d6p+3, 0x1.824d4627049a9p+6, +0x1.e4ac7cc7c959p+6, 0x1.662de0a2cc5bcp+4, 0x1.af560be35eac1p+4, 0x1.f6aefe63ed5ep+4, +0x1.06c9d5e20d93bp+5, 0x1.940b915328172p+4, 0x1.8c53a83718a75p+6, 0x1.52c0fc8ea582p+6, +0x1.203a631a4074cp+5, 0x1.099d81d2133bp+5, 0x1.ef083f4bde108p+5, 0x1.c55d58038ababp+4, +0x1.5c41736eb882ep+6, 0x1.7f61b342fec36p+3, 0x1.92d2d40325a5bp+5, 0x1.6a995a02d532bp+6, +0x1.ba257183744aep+1, 0x1.3a29afc274536p+3, 0x1.7a3e065af47c1p+5, 0x1.f9876033f30ecp+4, +0x1.3f1f6d427e3eep+4, 0x1.31c60906638c1p+6, 0x1.332c0c0266582p+0, 0x1.272b78b64e56fp+6, +0x1.6d65c4e2dacb9p+5, 0x1.f3a1a3dbe7434p+5, 0x1.9180840323011p+2, 0x1.39911cea73224p+5, +0x1.b4bbb64769777p+6, 0x1.60c77992c18efp+4, 0x1.f15d4983e2ba9p+2, 0x1.9968330b32d06p+6, +0x1.637aad1ac6f56p+5, 0x1.15d6af222bad6p+5, 0x1.713f2a02e27e5p+2, 0x1.3522417e6a448p+6, +0x1.dfdc77cbbfb8fp+5, 0x1.a3679ad746cf3p+6, 0x1.0fc67c121f8dp+5, 0x1.800b6d770016ep+6, +0x1.41b2dde28365cp+3, 0x1.7f675daefececp+6, 0x1.f162c377e2c58p+6, 0x1.8477cf2f08efap+6, +0x1.af5394175ea73p+6, 0x1.75985af2eb30bp+5, 0x1.de22525bbc44ap+5, 0x1.bd24bfa77a498p+6, +0x1.c422c6e388459p+5, 0x1.ac302c5b58606p+6, 0x1.dc34bd83b8698p+3, 0x1.31d93ec663b28p+6, +0x1.bbec6abb77d8dp+5, 0x1.014d1f82029a4p+4, 0x1.6412dde2c825cp+4, 0x1.94a917cf29523p+6, +0x1.3a2419d274483p+6, 0x1.c872fee390e6p+4, 0x1.8b8d3203171a6p+3, 0x1.ddbfa02bbb7f4p+5, +0x1.949d3c3b293a8p+5, 0x1.421deb62843bdp+4, 0x1.1090063a21201p+5, 0x1.7c0bf4aef817fp+6, +0x1.b6e5a4db6dcb5p+5, 0x1.3eb7eb7a7d6fdp+5, 0x1.625c6c52c4b8ep+5, 0x1.cb610e5396c22p+6, +0x1.0b0e4242161c8p+4, 0x1.391174367222fp+6, 0x1.4b6c7bc696d8fp+6, 0x1.abe7b13357cf6p+4, +0x1.70f1a3c2e1e34p+5, 0x1.3ccf3f3e799e8p+6, 0x1.ef71bb7bdee37p+6, 0x1.9f3197e33e633p+4, +0x1.f79b6cb7ef36ep+6, 0x1.bd05c9537a0b9p+5, 0x1.27892ce24f126p+3, 0x1.b359a04b66b34p+5, +0x1.156622022acc4p+5, 0x1.81def53303bdfp+4, 0x1.70c1dd02e183cp+1, 0x1.68a94662d1529p+6, +0x1.41960a62832c1p+5, 0x1.922b198324563p+4, 0x1.faa4bc5bf5498p+5, 0x1.daef1f03b5de4p+6, +0x1.ad4f0c3b5a9e2p+5, 0x1.2ec404725d881p+6, 0x1.939dde2b273bcp+5, 0x1.a0f6243b41ec5p+6, +0x1.7f4b7f4afe97p+6, 0x1.5216f232a42dep+6, 0x1.1d0218e63a043p+6, 0x1.6af946d2d5f29p+4, +0x1.f172e7efe2e5dp+6, 0x1.ce304f139c60ap+6, 0x1.30fb004261f6p+3, 0x1.a1b3c3e343678p+3, +0x1.0741c3460e838p+6, 0x1.718bdbcee317bp+6, 0x1.3e60c9927cc19p+5, 0x1.bfba95277f753p+6, +0x1.5cb63612b96c7p+5, 0x1.1d44408a3a888p+5, 0x1.3c37d8e2786fbp+3, 0x1.4bed0f7a97da2p+5, +0x1.6d2504eeda4a1p+6, 0x1.31e082e263c1p+4, 0x1.7fa357e6ff46bp+6, 0x1.f7d815efefb03p+6, +0x1.59dfbc12b3bf8p+5, 0x1.8b2966cf1652dp+6, 0x1.60815c4ec102cp+6, 0x1.4dbae33a9b75cp+6, +0x1.efb42d33df686p+6, 0x1.774ee9f2ee9ddp+4, 0x1.28aa023a5154p+6, 0x1.8cb7669b196edp+5, +0x1.8c97beef192f8p+6, 0x1.f278f14fe4f1ep+6, 0x1.9d475e133a8ecp+4, 0x1.0be33e3617c68p+6, +0x1.448fe37e891fcp+6, 0x1.8453f06f08a7ep+6, 0x1.66a18feecd432p+6, 0x1.3602cb6a6c059p+6, +0x1.52843f7ea5088p+6, 0x1.8cc0eff71981ep+6, 0x1.6a3943e6d4728p+6, 0x1.67180b02ce301p+4, +0x1.fc999783f9333p+5, 0x1.2d3515825a6a3p+1, 0x1.98097e433013p+2, 0x1.aca7e6cf594fdp+6, +0x1.301791e2602f2p+5, 0x1.041e4c12083cap+4, 0x1.4a79ba2294f37p+4, 0x1.4c3377029866fp+0, +0x1.1aff677a35fedp+5, 0x1.d241c66fa4839p+6, 0x1.fd08e3cffa11cp+6, 0x1.3a6f91c674df2p+6, +0x1.5d6b2d3ebad66p+6, 0x1.5d8a401abb148p+6, 0x1.1054e9fa20a9dp+5, 0x1.4d1f5a6e9a3ebp+6, +0x1.bb5dfa9776bbfp+6, 0x1.b0d4773761a8fp+6, 0x1.37b0db826f61bp+2, 0x1.47f5b9828feb7p+6, +0x1.a34d6883469adp+6, 0x1.eb3394f3d6673p+4, 0x1.4f63dee29ec7cp+4, 0x1.cfba97fb9f753p+5, +0x1.ff20d5abfe41bp+6, 0x1.ba7a87a774f51p+6, 0x1.de017643bc02fp+2, 0x1.51a51526a34a3p+6, +0x1.473b779a8e76fp+6, 0x1.88195b4b1032bp+6, 0x1.ab6b17e756d63p+6, 0x1.16210d622c422p+4, +0x1.918303fb2306p+6, 0x1.c4ebafcf89d76p+6, 0x1.f2302a27e4605p+6, 0x1.4c76674298ecdp+3, +0x1.7cd0b402f9a17p+0, 0x1.133a62c22674cp+4, 0x1.75fcd642ebf9bp+3, 0x1.26e5ed1a4dcbep+5, +0x1.7105f1c2e20bep+2, 0x1.5e43f4a2bc87fp+3, 0x1.cde288579bc51p+6, 0x1.747b8c5ae8f72p+6, +0x1.8952beaf12a58p+6, 0x1.5833f542b067fp+4, 0x1.8335cd8b066bap+5, 0x1.44b0b94689617p+6, +0x1.b85d220370ba4p+0, 0x1.aa2be8fb5457dp+5, 0x1.194ce58a3299dp+5, 0x1.aa2edd0b545dcp+6, +0x1.4fe2d9be9fc5bp+6, 0x1.c0fed4fb81fdbp+5, 0x1.241852124830ap+5, 0x1.4f03af669e076p+6, +0x1.35f3e4426be7dp+5, 0x1.5fd880dabfb1p+5, 0x1.4151891a82a31p+5, 0x1.e23569bbc46adp+6, +0x1.c02cddc38059cp+3, 0x1.304f71c2609eep+4, 0x1.3ded68a27bdadp+3, 0x1.c9889fb393114p+6, +0x1.0ff8c3c21ff18p+2, 0x1.9edd73833dbaep+2, 0x1.f3176c9be62eep+6, 0x1.6f2cf0c2de59ep+2, +0x1.7af1bfa2f5e38p+4, 0x1.0eb83b021d707p+3, 0x1.54cb8b3aa9971p+5, 0x1.d7333c23ae668p+4, +0x1.367e17d26cfc3p+4, 0x1.e12137c3c2427p+4, 0x1.ea485b63d490bp+6, 0x1.d6f244a7ade49p+6, +0x1.9caa968339553p+5, 0x1.57c68452af8d1p+5, 0x1.1ba2fdea3746p+6, 0x1.aa6d7f9354dbp+5, +0x1.80f936a701f27p+6, 0x1.a84970af5092ep+6, 0x1.fd967353fb2cep+4, 0x1.a1b820c343704p+5, +0x1.1191b65a23237p+5, 0x1.1171c5de22e39p+6, 0x1.fdfbfc83fbf8p+2, 0x1.23c2cd4e4785ap+6, +0x1.c15e064b82bc1p+6, 0x1.811108ab02221p+5, 0x1.05f8370a0bf07p+6, 0x1.f963a203f2c74p+6, +0x1.0c9c60c61938cp+6, 0x1.2db5e41e5b6bdp+6, 0x1.c2ec41b385d88p+6, 0x1.1d9bed063b37ep+6, +0x1.47a3bb568f477p+6, 0x1.b603ae4f6c076p+6, 0x1.348ebc12691d8p+6, 0x1.a6602b434cc05p+6, +0x1.d7dab5afafb57p+6, 0x1.def481afbde9p+6, 0x1.c2cfa483859f5p+2, 0x1.2bd1dd2257a3cp+3, +0x1.5cf33e72b9e68p+4, 0x1.9d556a033aaadp+0, 0x1.fc6c804bf8d9p+6, 0x1.25921ae24b243p+6, +0x1.64b12fa2c9626p+5, 0x1.180f7e32301fp+6, 0x1.fac8daabf591bp+6, 0x1.9a8e73c3351cep+3, +0x1.80b1ddbb0163cp+5, 0x1.e8b9ddf3d173cp+4, 0x1.042ddeda085bcp+6, 0x1.4921ca0a92439p+6, +0x1.8ba03d5b17408p+6, 0x1.240d9ea2481b4p+6, 0x1.b3925d636724cp+4, 0x1.4cfe43a699fc8p+6, +0x1.e49622f7c92c4p+6, 0x1.72dcce62e5b9ap+6, 0x1.4661e5a68cc3dp+6, 0x1.e265077bc4ca1p+5, +0x1.412564fa824adp+5, 0x1.094e275a129c5p+6, 0x1.d9ce1803b39c3p+1, 0x1.e8366dd3d06cep+6, +0x1.7ea3ab4afd475p+5, 0x1.435d2cd286ba6p+6, 0x1.8e9699131d2d3p+6, 0x1.2e5916a25cb23p+5, +0x1.2251ae8244a36p+6, 0x1.aac3935b55872p+6, 0x1.794d8deaf29b2p+5, 0x1.798e7e1ef31dp+6, +0x1.b138e9076271dp+6, 0x1.72268e7ae44d2p+5, 0x1.3e4131fa7c826p+5, 0x1.8e4603531c8cp+4, +0x1.d122c56fa2459p+6, 0x1.33d2e75267a5dp+5, 0x1.2dc69e9a5b8d4p+5, 0x1.22f7689a45eedp+5, +0x1.1417eb26282fdp+6, 0x1.9b112e2b36226p+6, 0x1.da9d7e57b53bp+6, 0x1.3f7051027ee0ap+5, +0x1.7e3d9992fc7b3p+5, 0x1.1e0856b23c10bp+4, 0x1.ecb66c27d96cep+6, 0x1.4769df828ed3cp+5, +0x1.ba5ee40f74bddp+6, 0x1.331851ca6630ap+6, 0x1.94e7737f29ceep+6, 0x1.6bc65a22d78cbp+4, +0x1.e333c903c6679p+3, 0x1.a3b5e43f476bdp+6, 0x1.0ca0117219402p+4, 0x1.f7709d8beee14p+5, +0x1.ce26221b9c4c4p+5, 0x1.d1be9d6fa37d4p+6, 0x1.92e4da1b25c9bp+6, 0x1.2c97f182592fep+1, +0x1.7c8230caf9046p+6, 0x1.3e2e84327c5d1p+4, 0x1.82f33daf05e68p+6, 0x1.2dbb19ce5b763p+6, +0x1.089ee84e113ddp+6, 0x1.109eb542213d7p+3, 0x1.914c9aa322993p+6, 0x1.b3835b736706bp+5, +0x1.77fa94a2eff53p+5, 0x1.417f4f8282feap+3, 0x1.6b3d6206d67acp+6, 0x1.d015357ba02a7p+6, +0x1.c341181b86823p+6, 0x1.45dae05e8bb5cp+6, 0x1.bf3577e37e6afp+4, 0x1.04bfc9c2097f9p+5, +0x1.8d5cf60b1ab9fp+6, 0x1.720f2872e41e5p+4, 0x1.2614d4a24c29bp+6, 0x1.47bbda1a8f77bp+6, +0x1.8f9c1be71f383p+6, 0x1.75f8903aebf12p+5, 0x1.a2ad70a3455aep+6, 0x1.cc02950b98053p+6, +0x1.7ac8b162f5916p+4, 0x1.e5d574ffcbaafp+6, 0x1.8f75c79b1eeb9p+5, 0x1.45c53d6a8b8a8p+6, +0x1.b794126f6f282p+6, 0x1.6a7ef792d4fdfp+4, 0x1.4f29fcf69e54p+6, 0x1.34164336682c8p+6, +0x1.5456bdeaa8ad8p+5, 0x1.a43a75434874fp+5, 0x1.874574030e8afp+4, 0x1.b2ca474365949p+6, +0x1.e862229bd0c44p+5, 0x1.f31df7a3e63bfp+6, 0x1.1917e9f2322fdp+5, 0x1.b02e5b9f605cbp+6, +0x1.b4de190369bc3p+2, 0x1.f7c95703ef92bp+6, 0x1.8043911700872p+6, 0x1.de8ef9abbd1dfp+6, +0x1.3da4375e7b487p+6, 0x1.f010ef0fe021ep+6, 0x1.83bb7a330776fp+4, 0x1.96025acb2c04bp+5, +0x1.3252e4a264a5dp+4, 0x1.8703b32f0e076p+6, 0x1.2bd077c257a0fp+2, 0x1.dc30d513b861bp+6, +0x1.07ffed320fffep+4, 0x1.b56a78236ad4fp+6, 0x1.a8336a1b5066dp+6, 0x1.41644f4a82c8ap+5, +0x1.9b3fed1f367fep+6, 0x1.bfb937937f727p+4, 0x1.e677650fcceedp+6, 0x1.52d3ff8aa5a8p+6, +0x1.951c179b2a383p+5, 0x1.35a162066b42cp+6, 0x1.0dd4857a1ba91p+5, 0x1.74b96ac2e972dp+6, +0x1.efa72903df4e5p+0, 0x1.d1773f7ba2ee8p+5, 0x1.2783b2024f076p+6, 0x1.f7df5be3efbebp+5, +0x1.b7b32ec36f666p+5, 0x1.b40fa6fb681f5p+6, 0x1.583c1322b0782p+5, 0x1.ee4ef1e3dc9dep+5, +0x1.abd8fdfb57b2p+6, 0x1.630cd522c619bp+3, 0x1.ab6ce53b56d9dp+5, 0x1.d2fa6aaba5f4dp+5, +0x1.c7289b438e513p+2, 0x1.36a5512a6d4aap+6, 0x1.b47e62bf68fccp+6, 0x1.a41d0b73483a1p+4, +0x1.7b5208aaf6a41p+5, 0x1.c73b6a3b8e76dp+6, 0x1.14e05fb229c0cp+4, 0x1.ff51ff43fea4p+5, +0x1.7ca5e25af94bcp+6, 0x1.ed6b8207dad7p+6, 0x1.a05b274b40b65p+6, 0x1.17e5cf7a2fcbap+6, +0x1.75673fb2eace8p+4, 0x1.86d28c570da52p+6, 0x1.aae73c0355ce8p+4, 0x1.27e7dbba4fcfbp+6, +0x1.78e7dcb2f1cfcp+5, 0x1.e3482383c6904p+5, 0x1.39428cf272852p+5, 0x1.8865160310ca3p+5, +0x1.da5fb17fb4bf6p+6, 0x1.c424f87b8849fp+6, 0x1.c02238f380447p+6, 0x1.6c7291bad8e52p+5, +0x1.78349f72f0694p+6, 0x1.b1010a0362021p+4, 0x1.ad60c1d35ac18p+6, 0x1.240d9d6e481b4p+6, +0x1.3143ba5262877p+5, 0x1.062e68da0c5cdp+5, 0x1.b15a580362b4bp+1, 0x1.6a28cdbad451ap+5, +0x1.b9bc859773791p+6, 0x1.c209357f84127p+6, 0x1.1e1ba9ba3c375p+6, 0x1.dd9627a3bb2c5p+4, +0x1.89449fbb12894p+6, 0x1.6353c1aac6a78p+6, 0x1.770e898eee1d1p+6, 0x1.05ea82120bd5p+6, +0x1.50bf43aea17e8p+6, 0x1.1769b0d62ed36p+6, 0x1.dd051883ba0a3p+2, 0x1.ae19139b5c322p+6, +0x1.3c787a5278f0fp+5, 0x1.1114411a22288p+5, 0x1.ac01dea35803cp+5, 0x1.5ab02b86b5605p+6, +0x1.7a2e324ef45c6p+6, 0x1.72a235cae5447p+6, 0x1.ee2b6843dc56dp+2, 0x1.548de3caa91bcp+6, +0x1.36c72e426d8e6p+6, 0x1.df04ef77be09ep+6, 0x1.58e59502b1cb3p+1, 0x1.5df79b6abbef3p+5, +0x1.2d14c7e25a299p+4, 0x1.b827ee7b704fep+6, 0x1.d3096b23a612dp+6, 0x1.c7ce1e438f9c4p+5, +}; + diff --git a/babl/babl-sampling.c b/babl/babl-sampling.c new file mode 100644 index 0000000..15b6532 --- /dev/null +++ b/babl/babl-sampling.c @@ -0,0 +1,81 @@ +/* babl - dynamically extendable universal pixel conversion library. + * Copyright (C) 2005, Øyvind Kolås. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, see + * . + */ + +#define HORIZONTAL_MIN 1 +#define HORIZONTAL_MAX 4 +#define VERTICAL_MIN 1 +#define VERTICAL_MAX 4 + +#include "config.h" +#include "babl-internal.h" + +static BablSampling sampling_db[(HORIZONTAL_MAX - HORIZONTAL_MIN + 1) * + (VERTICAL_MAX - VERTICAL_MIN + 1)]; + +const Babl * +babl_sampling (int horizontal, + int vertical) +{ + if (vertical >= 1 && + vertical <= 4 && + horizontal >= 1 && + horizontal <= 4) + return (Babl *) &sampling_db [ (vertical - 1) * 4 + (horizontal - 1)]; + else + babl_log ("babl_samping(%i,%i): arguments out of bounds", + horizontal, vertical); + return NULL; +} + +void +babl_sampling_class_for_each (BablEachFunction each_fun, + void *user_data) +{ + int horizontal; + int vertical; + + for (horizontal = HORIZONTAL_MIN; horizontal <= HORIZONTAL_MAX; horizontal++) + for (vertical = VERTICAL_MIN; vertical <= VERTICAL_MAX; vertical++) + { + int index = (vertical - VERTICAL_MIN) * VERTICAL_MAX + (horizontal - HORIZONTAL_MIN); + if (each_fun (BABL (&sampling_db[index]), user_data)) + return; + } +} + +void +babl_sampling_class_init (void) +{ + int horizontal; + int vertical; + + for (horizontal = HORIZONTAL_MIN; horizontal <= HORIZONTAL_MAX; horizontal++) + for (vertical = VERTICAL_MIN; vertical <= VERTICAL_MAX; vertical++) + { + int index = (vertical - VERTICAL_MIN) * VERTICAL_MAX + (horizontal - HORIZONTAL_MIN); + sampling_db[index].instance.class_type = BABL_SAMPLING; + sampling_db[index].instance.id = 0; + sampling_db[index].horizontal = horizontal; + sampling_db[index].vertical = vertical; + sampling_db[index].instance.name = sampling_db[index].name; + sampling_db[index].name[0] = '0' + horizontal; + sampling_db[index].name[1] = ':'; + sampling_db[index].name[2] = '0' + vertical; + sampling_db[index].name[3] = '\0'; + } +} diff --git a/babl/babl-sampling.h b/babl/babl-sampling.h new file mode 100644 index 0000000..82e6d15 --- /dev/null +++ b/babl/babl-sampling.h @@ -0,0 +1,35 @@ +/* babl - dynamically extendable universal pixel conversion library. + * Copyright (C) 2005-2008, Øyvind Kolås and others. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, see + * . + */ + +#ifndef _BABL_SAMPLING_H +#define _BABL_SAMPLING_H + +BABL_CLASS_DECLARE (sampling); + +typedef struct +{ + BablInstance instance; + int horizontal; + int vertical; + char name[4]; +} BablSampling; + +void +babl_sampling_class_init (void); + +#endif diff --git a/babl/babl-sanity.c b/babl/babl-sanity.c new file mode 100644 index 0000000..5eb74b4 --- /dev/null +++ b/babl/babl-sanity.c @@ -0,0 +1,137 @@ +/* babl - dynamically extendable universal pixel conversion library. + * Copyright (C) 2005, Øyvind Kolås. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, see + * . + */ + +#include "config.h" +#include "babl-internal.h" + +static int OK; + +static int +foo (Babl *babl, + void *user_data) +{ +/* babl_log ("%s", babl->instance.name);*/ + return 0; +} + +static Babl *babl_conversion_destination (Babl *babl); + +static int +type_sanity (Babl *babl, + void *user_data) +{ + /* ensure that every type has reference conversions to + * and from double */ + int ok, i; + BablList *list; + + ok = 0; + list = babl->type.from_list; + if (list) + { + for (i = 0; i < babl_list_size (list); i++) + { + if (babl_conversion_destination ((Babl *) list->items[i]) == babl_type_from_id (BABL_DOUBLE)) + { + ok = 1; + break; + } + } + } + if (!ok) + { + OK = 0; + babl_log ("lack of sanity! type '%s' has no conversion to double", + babl->instance.name); + } + + return 0; +} + + +static int +model_sanity (Babl *babl, + void *user_data) +{ + /* ensure that every type has reference conversions to + * and from rgba */ + int ok, i; + BablList *list; + + ok = 0; + list = babl->model.from_list; + if (list) + { + for (i = 0; i < babl_list_size (list); i++) + { + if (babl_conversion_destination ((Babl *) list->items[i]) == babl_model_from_id (BABL_RGBA)) + { + ok = 1; + break; + } + } + } + if (!ok) + { + OK = 0; + babl_log ("lack of sanity! model '%s' has no conversion to 'rgba'", + babl->instance.name); + } + + return 0; +} + +static int +id_sanity (Babl *babl, + void *user_data) +{ + if (0 && 0 == babl->instance.id && + babl->instance.creator && + !strcmp (BABL (babl->instance.creator)->instance.name, "BablBase")) + { + OK = 0; + babl_log ("%s\t'%s' has id==0", + babl_class_name (babl->class_type), babl->instance.name); + } + return 0; +} + +int +babl_sanity (void) +{ + OK=1; + + babl_type_class_for_each (id_sanity, NULL); + babl_component_class_for_each (id_sanity, NULL); + babl_model_class_for_each (id_sanity, NULL); + babl_format_class_for_each (id_sanity, NULL); + + babl_type_class_for_each (type_sanity, NULL); + babl_sampling_class_for_each (foo, NULL); + babl_component_class_for_each (foo, NULL); + babl_model_class_for_each (model_sanity, NULL); + babl_format_class_for_each (foo, NULL); + babl_conversion_class_for_each (foo, NULL); + + return OK; +} + +static Babl *babl_conversion_destination (Babl *babl) +{ + return (Babl *)babl->conversion.destination; +} diff --git a/babl/babl-type.c b/babl/babl-type.c new file mode 100644 index 0000000..f99c9d1 --- /dev/null +++ b/babl/babl-type.c @@ -0,0 +1,241 @@ +/* babl - dynamically extendable universal pixel conversion library. + * Copyright (C) 2005, Øyvind Kolås. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, see + * . + */ + +#include "config.h" +#include +#include +#include + +#define NEEDS_BABL_DB +#include "babl-internal.h" +#include "babl-db.h" +#include "babl-ref-pixels.h" + +static int +babl_type_destroy (void *data) +{ + Babl *babl = data; + if (babl->type.from_list) + babl_free (babl->type.from_list); + return 0; +} + +static Babl * +type_new (const char *name, + int id, + int bits) +{ + Babl *babl; + + babl_assert (bits != 0); + babl_assert (bits % 8 == 0); + + babl = babl_malloc (sizeof (BablType) + strlen (name) + 1); + babl_set_destructor (babl, babl_type_destroy); + babl->instance.name = (void *) ((char *) babl + sizeof (BablType)); + babl->class_type = BABL_TYPE; + babl->instance.id = id; + strcpy (babl->instance.name, name); + babl->type.bits = bits; + babl->type.from_list = NULL; + + return babl; +} + +static int +is_type_duplicate (Babl *babl, int bits) +{ + if (babl->type.bits != bits) + return 0; + + return 1; +} + +const Babl * +babl_type_new (void *first_arg, + ...) +{ + va_list varg; + Babl *babl; + int id = 0; + int bits = 0; + const char *name = first_arg; + const char *arg; + + va_start (varg, first_arg); + + while (1) + { + arg = va_arg (varg, char *); + if (!arg) + break; + + /* first, we assume arguments to be strings */ + else if (!strcmp (arg, "id")) + { + id = va_arg (varg, int); + } + + else if (!strcmp (arg, "bits")) + { + bits = va_arg (varg, int); + } + else if (!strcmp (arg, "integer")) + { + (void) va_arg (varg, int); + } + else if (!strcmp (arg, "min")) + { + (void) va_arg (varg, long); + } + else if (!strcmp (arg, "max")) + { + (void) va_arg (varg, long); + } + else if (!strcmp (arg, "min_val")) + { + (void) va_arg (varg, double); + } + else if (!strcmp (arg, "max_val")) + { + (void) va_arg (varg, double); + } + + /* if we didn't point to a known string, we assume argument to be babl */ + else if (BABL_IS_BABL (arg)) + { +#ifdef BABL_LOG + Babl *babl = (Babl *) arg; + + babl_log ("%s unexpected", babl_class_name (babl->class_type)); +#endif + } + else + { + babl_fatal ("unhandled argument '%s' for format '%s'", arg, name); + } + } + + va_end (varg); + + babl = babl_db_exist (db, id, name); + if (id && !babl && babl_db_exist (db, 0, name)) + babl_fatal ("Trying to reregister BablType '%s' with different id!", name); + + if (babl) + { + /* There is an instance already registered by the required id/name, + * returning the preexistent one instead if it doesn't differ. + */ + if (!is_type_duplicate (babl, bits)) + babl_fatal ("BablType '%s' already registered " + "as different type!", name); + + return babl; + } + + babl = type_new (name, id, bits); + + /* Since there is not an already registered instance by the required + * id/name, inserting newly created class into database. + */ + babl_db_insert (db, babl); + return babl; +} + + +#define TOLERANCE 0.000000001 + +static const Babl *double_vector_format (void) +{ + static const Babl *self = NULL; + + if (!self) + self = babl_format_new ( + babl_model ("Y"), + babl_type ("double"), + babl_component ("Y"), + NULL); + return self; +} + +int +babl_type_is_symmetric (const Babl *babl) +{ + int is_symmetrical = 1; + void *original; + double *clipped; + void *destination; + double *transformed; + + const Babl *ref_fmt; + const Babl *fmt; + Babl *fish_to; + Babl *fish_from; + + const int samples = babl_get_num_type_test_pixels (); + const double *test_pixels = babl_get_type_test_pixels (); + + ref_fmt = double_vector_format (); + fmt = babl_format_new (babl_model ("Y"), + babl, + babl_component ("Y"), + NULL); + fish_to = babl_fish_reference (ref_fmt, fmt); + fish_from = babl_fish_reference (fmt, ref_fmt); + + original = babl_calloc (1, babl->type.bits / 8 * samples); + clipped = babl_calloc (1, 64 / 8 * samples); + destination = babl_calloc (1, babl->type.bits / 8 * samples); + transformed = babl_calloc (1, 64 / 8 * samples); + + babl_process (fish_to, test_pixels, original, samples); + babl_process (fish_from, original, clipped, samples); + babl_process (fish_to, clipped, destination, samples); + babl_process (fish_from, destination, transformed, samples); + + fish_from->fish.processings -= 2; + fish_to->fish.processings -= 2; + fish_from->fish.pixels -= samples * 2; + fish_to->fish.pixels -= samples * 2; + + { + int cnt = 0; + int i; + for (i = 0; i < samples; i++) + { + if (fabs (clipped[i] - transformed[i]) > TOLERANCE) + { + if (cnt++ < 4) + babl_log ("%s: %f %f %f)", + babl->instance.name, test_pixels[i], clipped[i], transformed[i] + ); + is_symmetrical = 0; + } + } + } + + babl_free (original); + babl_free (clipped); + babl_free (destination); + babl_free (transformed); + + return is_symmetrical; +} + +BABL_CLASS_IMPLEMENT (type) diff --git a/babl/babl-type.h b/babl/babl-type.h new file mode 100644 index 0000000..8030fe5 --- /dev/null +++ b/babl/babl-type.h @@ -0,0 +1,50 @@ +/* babl - dynamically extendable universal pixel conversion library. + * Copyright (C) 2005-2008, Øyvind Kolås and others. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, see + * . + */ + +#ifndef _BABL_TYPE_H +#define _BABL_TYPE_H + +BABL_CLASS_DECLARE (type); + +typedef struct +{ + BablInstance instance; + BablList *from_list; + int bits; /*< number of bits used to represent the data type + (initially restricted to a multiple of 8) */ + double min_val; + double max_val; +} BablType; + +typedef struct +{ + BablType type; + int is_signed; + long max; + long min; +} BablTypeInteger; + +typedef struct +{ + BablType type; + /* sign + * biased_exponent + * mantissa */ +} BablTypeFloat; + +#endif diff --git a/babl/babl-types.h b/babl/babl-types.h new file mode 100644 index 0000000..252a382 --- /dev/null +++ b/babl/babl-types.h @@ -0,0 +1,54 @@ +/* babl - dynamically extendable universal pixel conversion library. + * Copyright (C) 2005-2008, Øyvind Kolås and others. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, see + * . + */ + +#ifndef _BABL_TYPES_H +#define _BABL_TYPES_H + +#if !defined(BABL_INSIDE_BABL_H) && !defined(BABL_IS_BEING_COMPILED) +#error "babl-version.h must not be included directly, include babl.h instead." +#endif + +/** + * Babl: + * + * The babl API is based around polymorphism and almost everything is + * a Babl object. + * + * Rename to: Object + **/ +typedef union _Babl Babl; + +/* Conversion function between linear data of a either a data types or + * color formats. + */ +typedef long (*BablFuncLinear) (const char *src, + char *dst, + long n, + void *user_data); + +/* TypePlanar,ModelPlanar and FormatPlanar */ +typedef long (*BablFuncPlanar) (int src_bands, + const char *src[], + int src_pitch[], + int dst_bands, + char *dst[], + int dst_pitch[], + long n, + void *user_data); + +#endif diff --git a/babl/babl-util.c b/babl/babl-util.c new file mode 100644 index 0000000..f68a684 --- /dev/null +++ b/babl/babl-util.c @@ -0,0 +1,108 @@ +/* babl - dynamically extendable universal pixel conversion library. + * Copyright (C) 2005, Øyvind Kolås. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, see + * . + */ + +#include "config.h" +#include +#include "babl-internal.h" + +#ifdef __WIN32__ +#include +#else +#include +#include +#endif + +#ifdef __WIN32__ +static LARGE_INTEGER start_time; +static LARGE_INTEGER timer_freq; + +static void +init_ticks (void) +{ + static int done = 0; + + if (done) + return; + done = 1; + + QueryPerformanceCounter(&start_time); + QueryPerformanceFrequency(&timer_freq); +} + +long +babl_ticks (void) +{ + LARGE_INTEGER end_time; + + init_ticks (); + + QueryPerformanceCounter(&end_time); + return (end_time.QuadPart - start_time.QuadPart) * (1000000.0 / timer_freq.QuadPart); +} +#else +static struct timeval start_time; + +#define usecs(time) ((time.tv_sec - start_time.tv_sec) * 1000000 + time.tv_usec) + +static void +init_ticks (void) +{ + static int done = 0; + + if (done) + return; + done = 1; + gettimeofday (&start_time, NULL); +} + +long +babl_ticks (void) +{ + struct timeval measure_time; + init_ticks (); + gettimeofday (&measure_time, NULL); + return usecs (measure_time) - usecs (start_time); +} +#endif + +long +babl_process_cost (long ticks_start, + long ticks_end) +{ + return (ticks_end - ticks_start) * 10 + 1; +} + +double +babl_rel_avg_error (const double *imgA, + const double *imgB, + long samples) +{ + double error = 0.0; + long i; + + for (i = 0; i < samples; i++) + error += fabs (imgA[i] - imgB[i]); + + if (error >= 0.000001) + error /= samples; + else + error = 0.0; + + return error; +} + diff --git a/babl/babl-util.h b/babl/babl-util.h new file mode 100644 index 0000000..e04120e --- /dev/null +++ b/babl/babl-util.h @@ -0,0 +1,33 @@ +/* babl - dynamically extendable universal pixel conversion library. + * Copyright (C) 2005, Øyvind Kolås. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, see + * . + */ + +#ifndef _BABL_UTIL_H +#define _BABL_UTIL_H + +long +babl_ticks (void); + +long +babl_process_cost (long ticks_start, + long ticks_end); + +double +babl_rel_avg_error (const double *imgA, + const double *imgB, + long samples); +#endif diff --git a/babl/babl-version.c b/babl/babl-version.c new file mode 100644 index 0000000..81e4efd --- /dev/null +++ b/babl/babl-version.c @@ -0,0 +1,36 @@ +/* babl - dynamically extendable universal pixel conversion library. + * Copyright (C) 2005-2008, Øyvind Kolås and others. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, see + * . + */ + +#include "config.h" +#include "babl-internal.h" + + +void +babl_get_version (int *major, + int *minor, + int *micro) +{ + if (major != NULL) + *major = BABL_MAJOR_VERSION; + + if (minor != NULL) + *minor = BABL_MINOR_VERSION; + + if (micro != NULL) + *micro = BABL_MICRO_VERSION; +} diff --git a/babl/babl-version.h b/babl/babl-version.h new file mode 100644 index 0000000..29afa86 --- /dev/null +++ b/babl/babl-version.h @@ -0,0 +1,44 @@ +/* babl - dynamically extendable universal pixel conversion library. + * Copyright (C) 2005-2008, Øyvind Kolås and others. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, see + * . + */ + +#ifndef _BABL_VERSION_H +#define _BABL_VERSION_H + +#if !defined(BABL_INSIDE_BABL_H) && !defined(BABL_IS_BEING_COMPILED) +#error "babl-version.h must not be included directly, include babl.h instead." +#endif + + +/*** + * babl version information + * + * These macros tell the version of babl you are compiling against. + * babl's version number consists of three parts: major, minor and + * micro. + */ + +#define BABL_MAJOR_VERSION 0 +#define BABL_MINOR_VERSION 1 +#define BABL_MICRO_VERSION 18 + +/** Get the version information on the babl library */ +void babl_get_version (int *major, + int *minor, + int *micro); + +#endif diff --git a/babl/babl-version.h.in b/babl/babl-version.h.in new file mode 100644 index 0000000..ab00824 --- /dev/null +++ b/babl/babl-version.h.in @@ -0,0 +1,44 @@ +/* babl - dynamically extendable universal pixel conversion library. + * Copyright (C) 2005-2008, Øyvind Kolås and others. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, see + * . + */ + +#ifndef _BABL_VERSION_H +#define _BABL_VERSION_H + +#if !defined(BABL_INSIDE_BABL_H) && !defined(BABL_IS_BEING_COMPILED) +#error "babl-version.h must not be included directly, include babl.h instead." +#endif + + +/*** + * babl version information + * + * These macros tell the version of babl you are compiling against. + * babl's version number consists of three parts: major, minor and + * micro. + */ + +#define BABL_MAJOR_VERSION @BABL_MAJOR_VERSION@ +#define BABL_MINOR_VERSION @BABL_MINOR_VERSION@ +#define BABL_MICRO_VERSION @BABL_MICRO_VERSION@ + +/** Get the version information on the babl library */ +void babl_get_version (int *major, + int *minor, + int *micro); + +#endif diff --git a/babl/babl.c b/babl/babl.c new file mode 100644 index 0000000..0484d30 --- /dev/null +++ b/babl/babl.c @@ -0,0 +1,187 @@ +/* babl - dynamically extendable universal pixel conversion library. + * Copyright (C) 2005, Øyvind Kolås. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, see + * . + */ + +#include "config.h" +#include "babl-internal.h" + +static int ref_count = 0; + +#ifdef _WIN32 +static HMODULE libbabl_dll = NULL; + +/* Minimal DllMain that just stores the handle to this DLL */ + +BOOL WINAPI /* Avoid silly "no previous prototype" gcc warning */ +DllMain (HINSTANCE hinstDLL, + DWORD fdwReason, + LPVOID lpvReserved); + +BOOL WINAPI +DllMain (HINSTANCE hinstDLL, + DWORD fdwReason, + LPVOID lpvReserved) +{ + switch (fdwReason) + { + case DLL_PROCESS_ATTACH: + libbabl_dll = hinstDLL; + break; + } + + return TRUE; +} + +#else +#define BABL_PATH LIBDIR BABL_DIR_SEPARATOR BABL_LIBRARY +#endif /* _WIN32 */ + +/* + * Returns a list of directories if the environment variable $BABL_PATH + * is set, or the installation library directory by default. + * This directory will be based on the compilation-time prefix for UNIX + * and an actual DLL path for Windows. + * + * Returns: a string which must be freed after usage. + */ +static char * +babl_dir_list (void) +{ + char *ret; + + ret = getenv ("BABL_PATH"); + if (!ret) + { +#ifdef _WIN32 + /* Figure it out from the location of this DLL */ + char *filename; + int filename_size; + char *sep1, *sep2; + + wchar_t w_filename[MAX_PATH]; + DWORD nSize = sizeof (w_filename) / sizeof ((w_filename)[0]); + + if (GetModuleFileNameW (libbabl_dll, w_filename, nSize) == 0) + babl_fatal ("GetModuleFilenameW failed"); + + filename_size = WideCharToMultiByte (CP_UTF8, 0, w_filename, -1, NULL, 0, + NULL, NULL); + filename = babl_malloc (sizeof (char) * filename_size); + if (!WideCharToMultiByte (CP_UTF8, 0, w_filename, -1, + filename, filename_size, NULL, NULL)) + babl_fatal ("Converting module filename to UTF-8 failed"); + + /* If the DLL file name is of the format + * \bin\*.dll, use \lib\{BABL_LIBRARY}. + * Otherwise, use the directory where the DLL is. + */ + + sep1 = strrchr (filename, BABL_DIR_SEPARATOR[0]); + *sep1 = '\0'; + + sep2 = strrchr (filename, BABL_DIR_SEPARATOR[0]); + if (sep2 != NULL) + { + if (strcasecmp (sep2 + 1, "bin") == 0) + { + char* filename_tmp; + *(++sep2) = '\0'; + filename_tmp = babl_malloc (sizeof (char) * (strlen (filename) + + strlen (BABL_DIR_SEPARATOR BABL_LIBRARY) + 4)); + strcpy (filename_tmp, filename); + babl_free (filename); + strcat (filename_tmp, "lib" BABL_DIR_SEPARATOR BABL_LIBRARY); + filename = filename_tmp; + } + } + + ret = filename; +#else + ret = babl_malloc (sizeof (char) * (strlen (BABL_PATH) + 1)); + strcpy (ret, BABL_PATH); +#endif + } + else + { + char* ret_tmp = babl_malloc (sizeof (char) * (strlen (ret) + 1)); + strcpy (ret_tmp, ret); + ret = ret_tmp; + } + return ret; +} + +void +babl_init (void) +{ + babl_cpu_accel_set_use (1); + + if (ref_count++ == 0) + { + char * dir_list; + + babl_internal_init (); + babl_sampling_class_init (); + babl_type_db (); + babl_component_db (); + babl_model_db (); + babl_format_db (); + babl_conversion_db (); + babl_extension_db (); + babl_fish_db (); + babl_core_init (); + babl_sanity (); + babl_extension_base (); + babl_sanity (); + + dir_list = babl_dir_list (); + babl_extension_load_dir_list (dir_list); + babl_free (dir_list); + } +} + +void +babl_exit (void) +{ + if (!-- ref_count) + { + if (getenv ("BABL_STATS")) + { + char logfile_name[] = "/tmp/babl-stats.html"; + FILE *logfile; + logfile = fopen (logfile_name, "w"); + if (logfile) + { + babl_fish_stats (logfile); + fclose (logfile); + } + } + + babl_extension_deinit (); + babl_free (babl_extension_db ());; + babl_free (babl_fish_db ());; + babl_free (babl_conversion_db ());; + babl_free (babl_format_db ());; + babl_free (babl_model_db ());; + babl_free (babl_component_db ());; + babl_free (babl_type_db ());; + + babl_internal_destroy (); +#if BABL_DEBUG_MEM + babl_memory_sanity (); +#endif + } +} diff --git a/babl/babl.h b/babl/babl.h new file mode 100644 index 0000000..546fad6 --- /dev/null +++ b/babl/babl.h @@ -0,0 +1,329 @@ +/* babl - dynamically extendable universal pixel conversion library. + * Copyright (C) 2005-2008, Øyvind Kolås. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, see + * . + */ + +#ifndef _BABL_H +#define _BABL_H + +#ifdef __cplusplus +extern "C" { +#endif + +#define BABL_INSIDE_BABL_H +#include +#include +#include +#undef BABL_INSIDE_BABL_H + + +/** + * babl_init: + * + * Initializes the babl library. + */ +void babl_init (void); + +/** + * babl_exit: + * + * Deinitializes the babl library and frees any resources used when + * matched with the number of calls to babl_init(). + */ +void babl_exit (void); + +/** + * babl_type: + * + * Returns the babl object representing the data type given by @name + * such as for example "u8", "u16" or "float". + */ +const Babl * babl_type (const char *name); + +/** + * babl_sampling: + * + * Returns the babl object representing the @horizontal and @vertical + * sampling such as for example 2, 2 for the chroma components in + * YCbCr. + */ +const Babl * babl_sampling (int horizontal, + int vertical); + +/** + * babl_component: + * + * Returns the babl object representing the color component given by + * @name such as for example "R", "cyan" or "CIE L". + */ +const Babl * babl_component (const char *name); + +/** + * babl_model: + * + * Returns the babl object representing the color model given by @name + * such as for example "RGB", "CMYK" or "CIE Lab". + */ +const Babl * babl_model (const char *name); + +/** + * babl_format: + * + * Returns the babl object representing the color format given by + * @name such as for example "RGB u8", "CMYK float" or "CIE Lab u16". + */ +const Babl * babl_format (const char *name); + +/** + * babl_fish: + * + * Create a babl fish capable of converting from source_format to + * destination_format, source and destination can be either strings + * with the names of the formats or Babl-format objects. + */ +const Babl * babl_fish (const void *source_format, + const void *destination_format); + +/** + * babl_process: + * + * Process n pixels from source to destination using babl_fish, + * returns number of pixels converted. + */ +long babl_process (const Babl *babl_fish, + const void *source, + void *destination, + long n); + + +/** + * babl_get_name: + * + * Returns a string decsribing a Babl object. + */ +const char * babl_get_name (const Babl *babl); + +/** + * babl_format_has_alpha: + * + * Returns whether the @format has an alpha channel. + */ +int babl_format_has_alpha (const Babl *format); + +/** + * babl_format_get_bytes_per_pixel: + * + * Returns the bytes per pixel for a babl color format. + */ +int babl_format_get_bytes_per_pixel (const Babl *format); + +/** + * babl_format_get_model: + * + * Return the model used for constructing the format. + */ +const Babl * babl_format_get_model (const Babl *format); + +/** + * babl_format_get_n_components: + * + * Returns the number of components for the given @format. + */ +int babl_format_get_n_components (const Babl *format); + +/** + * babl_format_get_type: + * + * Returns the type in the given @format for the given + * @component_index. + */ +const Babl * babl_format_get_type (const Babl *format, + int component_index); + + +/** + * babl_type_new: + * + * Defines a new data type in babl. A data type that babl can have in + * its buffers requires conversions to and from "double" to be + * registered before passing sanity. + * + * babl_type_new (const char *name, + * "bits", int bits, + * ["min_val", double min_val,] + * ["max_val", double max_val,] + * NULL); + */ +const Babl * babl_type_new (void *first_arg, + ...) BABL_ARG_NULL_TERMINATED; + +/** + * babl_component_new: + * + * Defines a new color component with babl. + * + * babl_component_new (const char *name, + * NULL); + */ +const Babl * babl_component_new (void *first_arg, + ...) BABL_ARG_NULL_TERMINATED; + +/** + * babl_model_new: + * + * Defines a new color model in babl. If no name is provided a name is + * generated by concatenating the name of all the involved components. + * + * babl_model_new (["name", const char *name,] + * BablComponent *component1, + * [BablComponent *componentN, ...] + * NULL); + */ +const Babl * babl_model_new (void *first_arg, + ...) BABL_ARG_NULL_TERMINATED; + +/** + * babl_format_new: + * + * Defines a new pixel format in babl. Provided BablType and|or + * BablSampling is valid for the following components as well. If no + * name is provided a (long) descriptive name is used. + * + * babl_format_new (["name", const char *name,] + * BablModel *model, + * [BablType *type,] + * [BablSampling, *sampling,] + * BablComponent *component1, + * [[BablType *type,] + * [BablSampling *sampling,] + * BablComponent *componentN, + * ...] + * ["planar",] + * NULL); + */ +const Babl * babl_format_new (const void *first_arg, + ...) BABL_ARG_NULL_TERMINATED; + +/* + * babl_format_n: + * + * Defines a new pixel format in babl. With the specified data storage + * type and the given number of components. At the moment behavior of + * conversions are only well defined to other babl_format_n derived formats + * with the same number of components. + */ +const Babl * +babl_format_n (const Babl *type, + int components); + +/** + * babl_format_is_format_n: + * + * Returns whether the @format is a format_n type. + */ +int babl_format_is_format_n (const Babl *format); + +/** + * babl_conversion_new: + * + * Defines a new conversion between either two formats, two models or + * two types in babl. + * + * babl_conversion_new (, + * <"linear"|"planar">, conv_func, + * NULL); + */ +const Babl * babl_conversion_new (const void *first_arg, + ...) BABL_ARG_NULL_TERMINATED; + + +/** + * babl_new_palette: + * + * create a new palette based format, name is optional pass in NULL to get + * an anonymous format. If you pass in with_alpha the format also gets + * an 8bit alpha channel. Returns the BablModel of the color model. If + * you pass in the same name the previous formats will be provided + * again. + */ +const Babl *babl_new_palette (const char *name, + const Babl **format_u8, + const Babl **format_u8_with_alpha); + +/** + * babl_format_is_palette: + * + * check whether a format is a palette backed format. + */ +int babl_format_is_palette (const Babl *format); + +/** + * babl_palette_set_palette: + * + * Assign a palette to a palette format, the data is a single span of pixels + * representing the colors of the palette. + */ +void babl_palette_set_palette (const Babl *babl, + const Babl *format, + void *data, + int count); + +/** + * babl_palette_reset: + * + * reset a palette to initial state, frees up some caches that optimize + * conversions. + */ +void babl_palette_reset (const Babl *babl); + + + +/** + * babl_set_user_data: (skip) + * + * associate a data pointer with a format/model, this data can be accessed and + * used from the conversion functions, encoding color profiles, palettes or + * similar with the data, perhaps this should be made internal API, not + * accesible at all from + */ +void babl_set_user_data (const Babl *babl, void *data); + +/** + * babl_get_user_data: (skip) + * + * Get data set with babl_set_user_data + */ +void * babl_get_user_data (const Babl *babl); + + + +/* + * Backwards compatibility stuff + * + * NOTE: will most likely be removed in the first stable release! + */ +#ifndef BABL_DISABLE_DEPRECATED +#define babl_destroy babl_exit +#endif + + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/babl/base/Makefile.am b/babl/base/Makefile.am new file mode 100644 index 0000000..5b92521 --- /dev/null +++ b/babl/base/Makefile.am @@ -0,0 +1,29 @@ + +h_sources = \ + babl-base.h + +c_sources = \ + babl-base.c \ + formats.c \ + pow-24.c \ + type-float.c \ + type-half.c \ + type-u8.c \ + type-u15.c \ + type-u16.c \ + type-u32.c \ + model-rgb.c \ + model-gray.c \ + model-ycbcr.c + +AM_CPPFLAGS = -I$(top_srcdir) -I$(top_srcdir)/babl + +noinst_LTLIBRARIES= libbase.la +libbase_la_SOURCES= $(h_sources) $(c_sources) +libbase_la_LIBADD = $(MATH_LIB) + +EXTRA_DIST = \ + rgb-constants.h \ + util.h \ + pow-24.h + diff --git a/babl/base/Makefile.in b/babl/base/Makefile.in new file mode 100644 index 0000000..f73a3f1 --- /dev/null +++ b/babl/base/Makefile.in @@ -0,0 +1,656 @@ +# Makefile.in generated by automake 1.15 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2014 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +VPATH = @srcdir@ +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +subdir = babl/base +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(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)/acinclude.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +LTLIBRARIES = $(noinst_LTLIBRARIES) +am__DEPENDENCIES_1 = +libbase_la_DEPENDENCIES = $(am__DEPENDENCIES_1) +am__objects_1 = +am__objects_2 = babl-base.lo formats.lo pow-24.lo type-float.lo \ + type-half.lo type-u8.lo type-u15.lo type-u16.lo type-u32.lo \ + model-rgb.lo model-gray.lo model-ycbcr.lo +am_libbase_la_OBJECTS = $(am__objects_1) $(am__objects_2) +libbase_la_OBJECTS = $(am_libbase_la_OBJECTS) +AM_V_lt = $(am__v_lt_@AM_V@) +am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) +am__v_lt_0 = --silent +am__v_lt_1 = +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_@AM_V@) +am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) +am__v_CC_0 = @echo " CC " $@; +am__v_CC_1 = +CCLD = $(CC) +LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_@AM_V@) +am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) +am__v_CCLD_0 = @echo " CCLD " $@; +am__v_CCLD_1 = +SOURCES = $(libbase_la_SOURCES) +DIST_SOURCES = $(libbase_la_SOURCES) +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +ETAGS = etags +CTAGS = ctags +am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALTIVEC_EXTRA_CFLAGS = @ALTIVEC_EXTRA_CFLAGS@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BABL_API_VERSION = @BABL_API_VERSION@ +BABL_BINARY_AGE = @BABL_BINARY_AGE@ +BABL_CURRENT_MINUS_AGE = @BABL_CURRENT_MINUS_AGE@ +BABL_INTERFACE_AGE = @BABL_INTERFACE_AGE@ +BABL_LIBRARY_VERSION = @BABL_LIBRARY_VERSION@ +BABL_MAJOR_VERSION = @BABL_MAJOR_VERSION@ +BABL_MICRO_VERSION = @BABL_MICRO_VERSION@ +BABL_MINOR_VERSION = @BABL_MINOR_VERSION@ +BABL_REAL_VERSION = @BABL_REAL_VERSION@ +BABL_RELEASE = @BABL_RELEASE@ +BABL_UNSTABLE = @BABL_UNSTABLE@ +BABL_VERSION = @BABL_VERSION@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DIR_SEP = @DIR_SEP@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F16C_EXTRA_CFLAGS = @F16C_EXTRA_CFLAGS@ +FGREP = @FGREP@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MATH_LIB = @MATH_LIB@ +MKDIR_P = @MKDIR_P@ +MMX_EXTRA_CFLAGS = @MMX_EXTRA_CFLAGS@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEP = @PATH_SEP@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +RANLIB = @RANLIB@ +RSVG = @RSVG@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHREXT = @SHREXT@ +SSE2_EXTRA_CFLAGS = @SSE2_EXTRA_CFLAGS@ +SSE4_1_EXTRA_CFLAGS = @SSE4_1_EXTRA_CFLAGS@ +SSE_EXTRA_CFLAGS = @SSE_EXTRA_CFLAGS@ +STRIP = @STRIP@ +THREAD_LIB = @THREAD_LIB@ +VERSION = @VERSION@ +W3M = @W3M@ +WEBSITE_HOST = @WEBSITE_HOST@ +WEBSITE_LOCATION = @WEBSITE_LOCATION@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +h_sources = \ + babl-base.h + +c_sources = \ + babl-base.c \ + formats.c \ + pow-24.c \ + type-float.c \ + type-half.c \ + type-u8.c \ + type-u15.c \ + type-u16.c \ + type-u32.c \ + model-rgb.c \ + model-gray.c \ + model-ycbcr.c + +AM_CPPFLAGS = -I$(top_srcdir) -I$(top_srcdir)/babl +noinst_LTLIBRARIES = libbase.la +libbase_la_SOURCES = $(h_sources) $(c_sources) +libbase_la_LIBADD = $(MATH_LIB) +EXTRA_DIST = \ + rgb-constants.h \ + util.h \ + pow-24.h + +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign babl/base/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign babl/base/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +clean-noinstLTLIBRARIES: + -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) + @list='$(noinst_LTLIBRARIES)'; \ + locs=`for p in $$list; do echo $$p; done | \ + sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ + sort -u`; \ + test -z "$$locs" || { \ + echo rm -f $${locs}; \ + rm -f $${locs}; \ + } + +libbase.la: $(libbase_la_OBJECTS) $(libbase_la_DEPENDENCIES) $(EXTRA_libbase_la_DEPENDENCIES) + $(AM_V_CCLD)$(LINK) $(libbase_la_OBJECTS) $(libbase_la_LIBADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/babl-base.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/formats.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/model-gray.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/model-rgb.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/model-ycbcr.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pow-24.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/type-float.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/type-half.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/type-u15.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/type-u16.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/type-u32.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/type-u8.Plo@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< + +.c.obj: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-am +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ + here=`pwd`; \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: ctags-am + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscopelist: cscopelist-am + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(LTLIBRARIES) +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ + mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ + clean-libtool clean-noinstLTLIBRARIES cscopelist-am ctags \ + ctags-am distclean distclean-compile distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags tags-am uninstall uninstall-am + +.PRECIOUS: Makefile + + +# 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. +.NOEXPORT: diff --git a/babl/base/babl-base.c b/babl/base/babl-base.c new file mode 100644 index 0000000..3fe3cfc --- /dev/null +++ b/babl/base/babl-base.c @@ -0,0 +1,74 @@ +/* babl - dynamically extendable universal pixel conversion library. + * Copyright (C) 2005, Øyvind Kolås. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, see + * . + */ + +#include "config.h" +#include "babl-base.h" + +extern int babl_hmpf_on_name_lookups; + +static void types (void); +static void models (void); + +void +babl_base_init (void) +{ + babl_hmpf_on_name_lookups++; + + types (); + models (); + babl_formats_init (); + + babl_hmpf_on_name_lookups--; +} + +void +babl_base_destroy (void) +{ + /* done by the destruction of the elemental babl clases */ +} + +/* + * types + */ + + +static void +types (void) +{ + babl_base_type_u15 (); + babl_base_type_half (); + babl_base_type_float (); + babl_base_type_u8 (); + babl_base_type_u16 (); + babl_base_type_u32 (); +} + +/* + * models + */ + + +static void +models (void) +{ + babl_hmpf_on_name_lookups--; + babl_base_model_rgb (); + babl_base_model_gray (); + babl_hmpf_on_name_lookups++; + babl_base_model_ycbcr (); +} diff --git a/babl/base/babl-base.h b/babl/base/babl-base.h new file mode 100644 index 0000000..588e2f1 --- /dev/null +++ b/babl/base/babl-base.h @@ -0,0 +1,38 @@ +/* babl - dynamically extendable universal pixel conversion library. + * Copyright (C) 2005, Øyvind Kolås. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, see + * . + */ + +#ifndef _BABL_BASE_H +#define _BABL_BASE_H + +void babl_base_init (void); +void babl_base_destroy (void); +void babl_formats_init (void); + +void babl_base_type_half (void); +void babl_base_type_float (void); +void babl_base_type_u8 (void); +void babl_base_type_u16 (void); +void babl_base_type_u15 (void); +void babl_base_type_u32 (void); + +void babl_base_model_pal (void); +void babl_base_model_rgb (void); +void babl_base_model_gray (void); +void babl_base_model_ycbcr (void); + +#endif diff --git a/babl/base/formats.c b/babl/base/formats.c new file mode 100644 index 0000000..65b3d77 --- /dev/null +++ b/babl/base/formats.c @@ -0,0 +1,338 @@ +/* babl - dynamically extendable universal pixel conversion library. + * Copyright (C) 2006, Øyvind Kolås. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, see + * . + */ + +#include "config.h" +#include + +#include "babl-classes.h" +#include "babl.h" +#include "babl-ids.h" +#include "babl-base.h" + +void +babl_formats_init (void) +{ + babl_format_new ( + babl_model_from_id (BABL_RGBA_GAMMA_2_2), + babl_type_from_id (BABL_DOUBLE), + babl_component_from_id (BABL_RED_GAMMA_2_2), + babl_component_from_id (BABL_GREEN_GAMMA_2_2), + babl_component_from_id (BABL_BLUE_GAMMA_2_2), + babl_component_from_id (BABL_ALPHA), + NULL); + babl_format_new ( + babl_model_from_id (BABL_RGBA_GAMMA_2_2), + babl_type_from_id (BABL_FLOAT), + babl_component_from_id (BABL_RED_GAMMA_2_2), + babl_component_from_id (BABL_GREEN_GAMMA_2_2), + babl_component_from_id (BABL_BLUE_GAMMA_2_2), + babl_component_from_id (BABL_ALPHA), + NULL); + babl_format_new ( + babl_model_from_id (BABL_RGBA_GAMMA_2_2), + babl_type_from_id (BABL_U16), + babl_component_from_id (BABL_RED_GAMMA_2_2), + babl_component_from_id (BABL_GREEN_GAMMA_2_2), + babl_component_from_id (BABL_BLUE_GAMMA_2_2), + babl_component_from_id (BABL_ALPHA), + NULL); + babl_format_new ( + babl_model_from_id (BABL_RGBA_GAMMA_2_2), + babl_type_from_id (BABL_U8), + babl_component_from_id (BABL_RED_GAMMA_2_2), + babl_component_from_id (BABL_GREEN_GAMMA_2_2), + babl_component_from_id (BABL_BLUE_GAMMA_2_2), + babl_component_from_id (BABL_ALPHA), + NULL); + babl_format_new ( + babl_model_from_id (BABL_RGBA_GAMMA_2_2_PREMULTIPLIED), + babl_type_from_id (BABL_FLOAT), + babl_component_from_id (BABL_RED_GAMMA_2_2_MUL_ALPHA), + babl_component_from_id (BABL_GREEN_GAMMA_2_2_MUL_ALPHA), + babl_component_from_id (BABL_BLUE_GAMMA_2_2_MUL_ALPHA), + babl_component_from_id (BABL_ALPHA), + NULL); + babl_format_new ( + babl_model_from_id (BABL_RGBA_GAMMA_2_2_PREMULTIPLIED), + babl_type_from_id (BABL_U16), + babl_component_from_id (BABL_RED_GAMMA_2_2_MUL_ALPHA), + babl_component_from_id (BABL_GREEN_GAMMA_2_2_MUL_ALPHA), + babl_component_from_id (BABL_BLUE_GAMMA_2_2_MUL_ALPHA), + babl_component_from_id (BABL_ALPHA), + NULL); + babl_format_new ( + babl_model_from_id (BABL_RGBA_GAMMA_2_2_PREMULTIPLIED), + babl_type_from_id (BABL_U8), + babl_component_from_id (BABL_RED_GAMMA_2_2_MUL_ALPHA), + babl_component_from_id (BABL_GREEN_GAMMA_2_2_MUL_ALPHA), + babl_component_from_id (BABL_BLUE_GAMMA_2_2_MUL_ALPHA), + babl_component_from_id (BABL_ALPHA), + NULL); + babl_format_new ( + babl_model_from_id (BABL_RGB_GAMMA_2_2), + babl_type_from_id (BABL_FLOAT), + babl_component_from_id (BABL_RED_GAMMA_2_2), + babl_component_from_id (BABL_GREEN_GAMMA_2_2), + babl_component_from_id (BABL_BLUE_GAMMA_2_2), + NULL); + babl_format_new ( + babl_model_from_id (BABL_RGB_GAMMA_2_2), + babl_type_from_id (BABL_U16), + babl_component_from_id (BABL_RED_GAMMA_2_2), + babl_component_from_id (BABL_GREEN_GAMMA_2_2), + babl_component_from_id (BABL_BLUE_GAMMA_2_2), + NULL); + babl_format_new ( + babl_model_from_id (BABL_RGB_GAMMA_2_2), + babl_type_from_id (BABL_U8), + babl_component_from_id (BABL_RED_GAMMA_2_2), + babl_component_from_id (BABL_GREEN_GAMMA_2_2), + babl_component_from_id (BABL_BLUE_GAMMA_2_2), + NULL); + babl_format_new ( + babl_model_from_id (BABL_GRAY_GAMMA_2_2_ALPHA), + babl_type_from_id (BABL_FLOAT), + babl_component_from_id (BABL_LUMA), + babl_component_from_id (BABL_ALPHA), + NULL); + babl_format_new ( + babl_model_from_id (BABL_GRAY_GAMMA_2_2_ALPHA_PREMULTIPLIED), + babl_type_from_id (BABL_FLOAT), + babl_component_from_id (BABL_LUMA_MUL_ALPHA), + babl_component_from_id (BABL_ALPHA), + NULL); + babl_format_new ( + babl_model_from_id (BABL_GRAY_GAMMA_2_2), + babl_type_from_id (BABL_FLOAT), + babl_component_from_id (BABL_LUMA), + NULL); + babl_format_new ( + babl_model_from_id (BABL_GRAY_GAMMA_2_2_ALPHA), + babl_type_from_id (BABL_U16), + babl_component_from_id (BABL_LUMA), + babl_component_from_id (BABL_ALPHA), + NULL); + babl_format_new ( + babl_model_from_id (BABL_GRAY_GAMMA_2_2_ALPHA_PREMULTIPLIED), + babl_type_from_id (BABL_U16), + babl_component_from_id (BABL_LUMA_MUL_ALPHA), + babl_component_from_id (BABL_ALPHA), + NULL); + babl_format_new ( + babl_model_from_id (BABL_GRAY_GAMMA_2_2), + babl_type_from_id (BABL_U16), + babl_component_from_id (BABL_LUMA), + NULL); + babl_format_new ( + babl_model_from_id (BABL_GRAY_GAMMA_2_2_ALPHA), + babl_type_from_id (BABL_U8), + babl_component_from_id (BABL_LUMA), + babl_component_from_id (BABL_ALPHA), + NULL); + babl_format_new ( + babl_model_from_id (BABL_GRAY_GAMMA_2_2_ALPHA_PREMULTIPLIED), + babl_type_from_id (BABL_U8), + babl_component_from_id (BABL_LUMA_MUL_ALPHA), + babl_component_from_id (BABL_ALPHA), + NULL); + babl_format_new ( + babl_model_from_id (BABL_GRAY_GAMMA_2_2), + babl_type_from_id (BABL_U8), + babl_component_from_id (BABL_LUMA), + NULL); + + /* overriding name, since the generated name would be wrong due + * to differing types + */ + babl_format_new ( + "name", "Y'CbCr u8", + "planar", + babl_model_from_id (BABL_YCBCR), + babl_type_from_id (BABL_U8_LUMA), + babl_sampling (1, 1), + babl_component_from_id (BABL_LUMA), + babl_type_from_id (BABL_U8_CHROMA), + babl_sampling (2, 2), + babl_component_from_id (BABL_CB), + babl_sampling (2, 2), + babl_component_from_id (BABL_CR), + NULL); + babl_format_new ( + babl_model_from_id (BABL_YCBCR), + babl_type_from_id (BABL_FLOAT), + babl_component_from_id (BABL_LUMA), + babl_type_from_id (BABL_FLOAT), + babl_component_from_id (BABL_CB), + babl_component_from_id (BABL_CR), + NULL); + babl_format_new ( + babl_model_from_id (BABL_YCBCR_ALPHA), + babl_type_from_id (BABL_FLOAT), + babl_component_from_id (BABL_LUMA), + babl_type_from_id (BABL_FLOAT), + babl_component_from_id (BABL_CB), + babl_component_from_id (BABL_CR), + babl_component_from_id (BABL_ALPHA), + NULL); + babl_format_new ( + babl_model_from_id (BABL_RGBA), + babl_type_from_id (BABL_FLOAT), + babl_component_from_id (BABL_RED), + babl_component_from_id (BABL_GREEN), + babl_component_from_id (BABL_BLUE), + babl_component_from_id (BABL_ALPHA), + NULL); + babl_format_new ( + babl_model_from_id (BABL_RGBA), + babl_type_from_id (BABL_U16), + babl_component_from_id (BABL_RED), + babl_component_from_id (BABL_GREEN), + babl_component_from_id (BABL_BLUE), + babl_component_from_id (BABL_ALPHA), + NULL); + babl_format_new ( + babl_model_from_id (BABL_RGBA), + babl_type_from_id (BABL_DOUBLE), + babl_component_from_id (BABL_RED), + babl_component_from_id (BABL_GREEN), + babl_component_from_id (BABL_BLUE), + babl_component_from_id (BABL_ALPHA), + NULL); + babl_format_new ( + babl_model_from_id (BABL_RGBA), + babl_type_from_id (BABL_U8), + babl_component_from_id (BABL_RED), + babl_component_from_id (BABL_GREEN), + babl_component_from_id (BABL_BLUE), + babl_component_from_id (BABL_ALPHA), + NULL); + babl_format_new ( + babl_model_from_id (BABL_RGBA_PREMULTIPLIED), + babl_type_from_id (BABL_FLOAT), + babl_component_from_id (BABL_RED_MUL_ALPHA), + babl_component_from_id (BABL_GREEN_MUL_ALPHA), + babl_component_from_id (BABL_BLUE_MUL_ALPHA), + babl_component_from_id (BABL_ALPHA), + NULL); + babl_format_new ( + babl_model_from_id (BABL_RGBA_PREMULTIPLIED), + babl_type_from_id (BABL_U16), + babl_component_from_id (BABL_RED_MUL_ALPHA), + babl_component_from_id (BABL_GREEN_MUL_ALPHA), + babl_component_from_id (BABL_BLUE_MUL_ALPHA), + babl_component_from_id (BABL_ALPHA), + NULL); + babl_format_new ( + babl_model_from_id (BABL_RGBA_PREMULTIPLIED), + babl_type_from_id (BABL_U8), + babl_component_from_id (BABL_RED_MUL_ALPHA), + babl_component_from_id (BABL_GREEN_MUL_ALPHA), + babl_component_from_id (BABL_BLUE_MUL_ALPHA), + babl_component_from_id (BABL_ALPHA), + NULL); + babl_format_new ( + babl_model_from_id (BABL_RGB), + babl_type_from_id (BABL_FLOAT), + babl_component_from_id (BABL_RED), + babl_component_from_id (BABL_GREEN), + babl_component_from_id (BABL_BLUE), + NULL); + babl_format_new ( + babl_model_from_id (BABL_RGB), + babl_type_from_id (BABL_U16), + babl_component_from_id (BABL_RED), + babl_component_from_id (BABL_GREEN), + babl_component_from_id (BABL_BLUE), + NULL); + babl_format_new ( + babl_model_from_id (BABL_RGB), + babl_type_from_id (BABL_U8), + babl_component_from_id (BABL_RED), + babl_component_from_id (BABL_GREEN), + babl_component_from_id (BABL_BLUE), + NULL); + babl_format_new ( + babl_model_from_id (BABL_GRAY_ALPHA), + babl_type_from_id (BABL_FLOAT), + babl_component_from_id (BABL_LUMINANCE), + babl_component_from_id (BABL_ALPHA), + NULL); + babl_format_new ( + babl_model_from_id (BABL_GRAY_ALPHA_PREMULTIPLIED), + babl_type_from_id (BABL_FLOAT), + babl_component_from_id (BABL_LUMINANCE_MUL_ALPHA), + babl_component_from_id (BABL_ALPHA), + NULL); + babl_format_new ( + babl_model_from_id (BABL_GRAY), + babl_type_from_id (BABL_FLOAT), + babl_component_from_id (BABL_LUMINANCE), + NULL); + babl_format_new ( + babl_model_from_id (BABL_GRAY_ALPHA), + babl_type_from_id (BABL_U16), + babl_component_from_id (BABL_LUMINANCE), + babl_component_from_id (BABL_ALPHA), + NULL); + babl_format_new ( + babl_model_from_id (BABL_GRAY_ALPHA_PREMULTIPLIED), + babl_type_from_id (BABL_U16), + babl_component_from_id (BABL_LUMINANCE_MUL_ALPHA), + babl_component_from_id (BABL_ALPHA), + NULL); + babl_format_new ( + babl_model_from_id (BABL_GRAY), + babl_type_from_id (BABL_U16), + babl_component_from_id (BABL_LUMINANCE), + NULL); + babl_format_new ( + babl_model_from_id (BABL_GRAY_ALPHA), + babl_type_from_id (BABL_U8), + babl_component_from_id (BABL_LUMINANCE), + babl_component_from_id (BABL_ALPHA), + NULL); + babl_format_new ( + babl_model_from_id (BABL_GRAY_ALPHA_PREMULTIPLIED), + babl_type_from_id (BABL_U8), + babl_component_from_id (BABL_LUMINANCE_MUL_ALPHA), + babl_component_from_id (BABL_ALPHA), + NULL); + babl_format_new ( + babl_model_from_id (BABL_GRAY), + babl_type_from_id (BABL_U8), + babl_component_from_id (BABL_LUMINANCE), + NULL); + + babl_format_new ( + babl_model_from_id (BABL_YCBCR), + babl_type_from_id (BABL_FLOAT), + babl_component_from_id (BABL_LUMA), + babl_type_from_id (BABL_FLOAT), + babl_component_from_id (BABL_CB), + babl_component_from_id (BABL_CR), + NULL); + babl_format_new ( + babl_model_from_id (BABL_YCBCR_ALPHA), + babl_type_from_id (BABL_FLOAT), + babl_component_from_id (BABL_LUMA), + babl_type_from_id (BABL_FLOAT), + babl_component_from_id (BABL_CB), + babl_component_from_id (BABL_CR), + babl_component_from_id (BABL_ALPHA), + NULL); +} diff --git a/babl/base/model-gray.c b/babl/base/model-gray.c new file mode 100644 index 0000000..239333e --- /dev/null +++ b/babl/base/model-gray.c @@ -0,0 +1,699 @@ +/* babl - dynamically extendable universal pixel conversion library. + * Copyright (C) 2005, Øyvind Kolås. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, see + * . + */ + +#include "config.h" +#include + +#include "babl-classes.h" +#include "babl.h" +#include "babl-ids.h" +#include "util.h" +#include "rgb-constants.h" +#include "math.h" +#include "babl-base.h" + +static void components (void); +static void models (void); +static void conversions (void); +static void formats (void); + +void babl_base_model_gray (void) +{ + components (); + models (); + conversions (); + formats (); +} + +static void +components (void) +{ + babl_component_new ( + "Y", + "id", BABL_LUMINANCE, + "luma", + NULL); + + babl_component_new ( + "Ya", + "id", BABL_LUMINANCE_MUL_ALPHA, + "luma", + NULL); + + babl_component_new ( + "Y'", + "id", BABL_LUMA, + "luma", + NULL); + + babl_component_new ( + "Y'a", + "id", BABL_LUMA_MUL_ALPHA, + "luma", + NULL); +} + +static void +models (void) +{ + babl_model_new ( + "id", BABL_GRAY, + babl_component_from_id (BABL_LUMINANCE), + NULL); + + + babl_model_new ( + "id", BABL_GRAY_ALPHA, + babl_component_from_id (BABL_LUMINANCE), + babl_component_from_id (BABL_ALPHA), + NULL); + + babl_model_new ( + "id", BABL_GRAY_ALPHA_PREMULTIPLIED, + babl_component_from_id (BABL_LUMINANCE_MUL_ALPHA), + babl_component_from_id (BABL_ALPHA), + NULL); + + + babl_model_new ( + "id", BABL_GRAY_GAMMA_2_2, + babl_component_from_id (BABL_LUMA), + NULL); + + babl_model_new ( + "id", BABL_GRAY_GAMMA_2_2_ALPHA, + babl_component_from_id (BABL_LUMA), + babl_component_from_id (BABL_ALPHA), + NULL); + + babl_model_new ( + "id", BABL_GRAY_GAMMA_2_2_ALPHA_PREMULTIPLIED, + babl_component_from_id (BABL_LUMA_MUL_ALPHA), + babl_component_from_id (BABL_ALPHA), + NULL); +} + + +static long +rgba_to_graya (char *src, + char *dst, + long n) +{ + while (n--) + { + double red, green, blue; + double luminance, alpha; + + red = ((double *) src)[0]; + green = ((double *) src)[1]; + blue = ((double *) src)[2]; + alpha = ((double *) src)[3]; + + luminance = red * RGB_LUMINANCE_RED + + green * RGB_LUMINANCE_GREEN + + blue * RGB_LUMINANCE_BLUE; + + ((double *) dst)[0] = luminance; + ((double *) dst)[1] = alpha; + + src += sizeof (double) * 4; + dst += sizeof (double) * 2; + } + return n; +} + +static long +rgba_to_gray (char *src, + char *dst, + long n) +{ + while (n--) + { + double red, green, blue; + double luminance; + + red = ((double *) src)[0]; + green = ((double *) src)[1]; + blue = ((double *) src)[2]; + + luminance = red * RGB_LUMINANCE_RED + + green * RGB_LUMINANCE_GREEN + + blue * RGB_LUMINANCE_BLUE; + + ((double *) dst)[0] = luminance; + + src += sizeof (double) * 4; + dst += sizeof (double) * 1; + } + return n; +} + + +static long +rgb_to_gray_2_2 (int src_bands, + char **src, + int *src_pitch, + int dst_bands, + char **dst, + int *dst_pitch, + long n) +{ + BABL_PLANAR_SANITY + while (n--) + { + double red, green, blue; + double luminance, alpha; + + red = *(double *) src[0]; + green = *(double *) src[1]; + blue = *(double *) src[2]; + if (src_bands > 3) + alpha = *(double *) src[3]; + else + alpha = 1.0; + + luminance = red * RGB_LUMINANCE_RED + + green * RGB_LUMINANCE_GREEN + + blue * RGB_LUMINANCE_BLUE; + *(double *) dst[0] = linear_to_gamma_2_2 (luminance); + + if (dst_bands == 2) + *(double *) dst[1] = alpha; + + BABL_PLANAR_STEP + } + return n; +} + + +static long +gray_2_2_to_rgb (int src_bands, + char **src, + int *src_pitch, + int dst_bands, + char **dst, + int *dst_pitch, + long n) +{ + BABL_PLANAR_SANITY + while (n--) + { + double luminance; + double red, green, blue; + double alpha; + + luminance = gamma_2_2_to_linear (*(double *) src[0]); + red = luminance; + green = luminance; + blue = luminance; + if (src_bands > 1) + alpha = *(double *) src[1]; + else + alpha = 1.0; + + *(double *) dst[0] = red; + *(double *) dst[1] = green; + *(double *) dst[2] = blue; + + if (dst_bands > 3) + *(double *) dst[3] = alpha; + + BABL_PLANAR_STEP + } + return n; +} + + + +static long +graya_to_rgba (char *src, + char *dst, + long n) +{ + while (n--) + { + double luminance; + double red, green, blue; + double alpha; + + luminance = ((double *) src)[0]; + alpha = ((double *) src)[1]; + red = luminance; + green = luminance; + blue = luminance; + + ((double *) dst)[0] = red; + ((double *) dst)[1] = green; + ((double *) dst)[2] = blue; + ((double *) dst)[3] = alpha; + + src += sizeof (double) * 2; + dst += sizeof (double) * 4; + } + return n; +} + + +static long +gray_to_rgba (char *src, + char *dst, + long n) +{ + while (n--) + { + double luminance; + double red, green, blue; + + luminance = ((double *) src)[0]; + red = luminance; + green = luminance; + blue = luminance; + + ((double *) dst)[0] = red; + ((double *) dst)[1] = green; + ((double *) dst)[2] = blue; + ((double *) dst)[3] = 1.0; + + src += sizeof (double) * 1; + dst += sizeof (double) * 4; + } + return n; +} + +static long +gray_alpha_premultiplied_to_rgba (int src_bands, + char **src, + int *src_pitch, + int dst_bands, + char **dst, + int *dst_pitch, + long n) +{ + BABL_PLANAR_SANITY + assert (src_bands == 2); + assert (dst_bands == 4); + + while (n--) + { + double luminance = *(double *) src[0]; + double alpha = *(double *) src[1]; + + if (alpha > BABL_ALPHA_THRESHOLD) + { + luminance = luminance / alpha; + } + else + { + luminance = 0.0; + } + + *(double *) dst[0] = luminance; + *(double *) dst[1] = luminance; + *(double *) dst[2] = luminance; + *(double *) dst[3] = alpha; + BABL_PLANAR_STEP + } + return n; +} + + +static long +rgba_to_gray_alpha_premultiplied (int src_bands, + char **src, + int *src_pitch, + int dst_bands, + char **dst, + int *dst_pitch, + long n) +{ + BABL_PLANAR_SANITY; + assert (src_bands == 4); + assert (dst_bands == 2); + + while (n--) + { + double red = *(double *) src[0]; + double green = *(double *) src[1]; + double blue = *(double *) src[2]; + double alpha = *(double *) src[3]; + double luminance; + + luminance = red * RGB_LUMINANCE_RED + + green * RGB_LUMINANCE_GREEN + + blue * RGB_LUMINANCE_BLUE; + + luminance *= alpha; + + *(double *) dst[0] = luminance; + *(double *) dst[1] = alpha; + BABL_PLANAR_STEP + } + return n; +} + +static long +non_premultiplied_to_premultiplied (int src_bands, + char **src, + int *src_pitch, + int dst_bands, + char **dst, + int *dst_pitch, + long n) +{ + BABL_PLANAR_SANITY + + while (n--) + { + double alpha; + int band; + + alpha = *(double *) src[src_bands - 1]; + for (band = 0; band < src_bands - 1; band++) + { + *(double *) dst[band] = *(double *) src[band] * alpha; + } + *(double *) dst[dst_bands - 1] = alpha; + + BABL_PLANAR_STEP + } + return n; +} + +static long +premultiplied_to_non_premultiplied (int src_bands, + char **src, + int *src_pitch, + int dst_bands, + char **dst, + int *dst_pitch, + long n) +{ + BABL_PLANAR_SANITY + + while (n--) + { + double alpha; + int band; + + alpha = *(double *) src[src_bands - 1]; + for (band = 0; band < src_bands - 1; band++) + { + if (alpha > BABL_ALPHA_THRESHOLD) + { + *(double *) dst[band] = *(double *) src[band] / alpha; + } + else + { + *(double *) dst[band] = 0.0; + } + } + *(double *) dst[dst_bands - 1] = alpha; + + BABL_PLANAR_STEP + } + return n; +} + +static long +rgba2gray_gamma_2_2_premultiplied (char *src, + char *dst, + long n) +{ + while (n--) + { + double red = ((double *) src)[0]; + double green = ((double *) src)[1]; + double blue = ((double *) src)[2]; + double alpha = ((double *) src)[3]; + + double luminance; + double luma; + + luminance = red * RGB_LUMINANCE_RED + + green * RGB_LUMINANCE_GREEN + + blue * RGB_LUMINANCE_BLUE; + luma = linear_to_gamma_2_2 (luminance); + + ((double *) dst)[0] = luma * alpha; + ((double *) dst)[1] = alpha; + + src += 4 * sizeof (double); + dst += 2 * sizeof (double); + } + return n; +} + + +static long +gray_gamma_2_2_premultiplied2rgba (char *src, + char *dst, + long n) +{ + while (n--) + { + double luma = ((double *) src)[0]; + double alpha = ((double *) src)[1]; + double luminance; + + luma = luma / alpha; + luminance = gamma_2_2_to_linear (luma); + + ((double *) dst)[0] = luminance; + ((double *) dst)[1] = luminance; + ((double *) dst)[2] = luminance; + ((double *) dst)[3] = alpha; + + src += 2 * sizeof (double); + dst += 4 * sizeof (double); + } + return n; +} + + +static void +conversions (void) +{ + babl_conversion_new ( + babl_model_from_id (BABL_GRAY_GAMMA_2_2), + babl_model_from_id (BABL_RGBA), + "planar", gray_2_2_to_rgb, + NULL + ); + + babl_conversion_new ( + babl_model_from_id (BABL_RGBA), + babl_model_from_id (BABL_GRAY_GAMMA_2_2), + "planar", rgb_to_gray_2_2, + NULL + ); + + babl_conversion_new ( + babl_model_from_id (BABL_GRAY_GAMMA_2_2_ALPHA), + babl_model_from_id (BABL_RGBA), + "planar", gray_2_2_to_rgb, + NULL + ); + + babl_conversion_new ( + babl_model_from_id (BABL_RGBA), + babl_model_from_id (BABL_GRAY_GAMMA_2_2_ALPHA), + "planar", rgb_to_gray_2_2, + NULL + ); + + + babl_conversion_new ( + babl_model_from_id (BABL_GRAY_GAMMA_2_2_ALPHA_PREMULTIPLIED), + babl_model_from_id (BABL_RGBA), + "linear", gray_gamma_2_2_premultiplied2rgba, + NULL + ); + + babl_conversion_new ( + babl_model_from_id (BABL_RGBA), + babl_model_from_id (BABL_GRAY_GAMMA_2_2_ALPHA_PREMULTIPLIED), + "linear", rgba2gray_gamma_2_2_premultiplied, + NULL + ); + + babl_conversion_new ( + babl_model_from_id (BABL_GRAY), + babl_model_from_id (BABL_RGBA), + "linear", gray_to_rgba, + NULL + ); + + babl_conversion_new ( + babl_model_from_id (BABL_GRAY_ALPHA), + babl_model_from_id (BABL_RGBA), + "linear", graya_to_rgba, + NULL + ); + + babl_conversion_new ( + babl_model_from_id (BABL_RGBA), + babl_model_from_id (BABL_GRAY_ALPHA), + "linear", rgba_to_graya, + NULL + ); + + babl_conversion_new ( + babl_model_from_id (BABL_RGBA), + babl_model_from_id (BABL_GRAY), + "linear", rgba_to_gray, + NULL + ); + + babl_conversion_new ( + babl_model_from_id (BABL_GRAY_ALPHA), + babl_model_from_id (BABL_GRAY_ALPHA_PREMULTIPLIED), + "planar", non_premultiplied_to_premultiplied, + NULL + ); + + babl_conversion_new ( + babl_model_from_id (BABL_GRAY_ALPHA_PREMULTIPLIED), + babl_model_from_id (BABL_GRAY_ALPHA), + "planar", premultiplied_to_non_premultiplied, + NULL + ); + + babl_conversion_new ( + babl_model_from_id (BABL_GRAY_ALPHA_PREMULTIPLIED), + babl_model_from_id (BABL_RGBA), + "planar", gray_alpha_premultiplied_to_rgba, + NULL + ); + + babl_conversion_new ( + babl_model_from_id (BABL_RGBA), + babl_model_from_id (BABL_GRAY_ALPHA_PREMULTIPLIED), + "planar", rgba_to_gray_alpha_premultiplied, + NULL + ); +} + +static void +formats (void) +{ + babl_format_new ( + babl_model_from_id (BABL_GRAY_ALPHA), + babl_type_from_id (BABL_HALF), + babl_component_from_id (BABL_LUMINANCE), + babl_component_from_id (BABL_ALPHA), + NULL); + babl_format_new ( + babl_model_from_id (BABL_GRAY_ALPHA_PREMULTIPLIED), + babl_type_from_id (BABL_HALF), + babl_component_from_id (BABL_LUMINANCE_MUL_ALPHA), + babl_component_from_id (BABL_ALPHA), + NULL); + babl_format_new ( + babl_model_from_id (BABL_GRAY), + babl_type_from_id (BABL_HALF), + babl_component_from_id (BABL_LUMINANCE), + NULL); + babl_format_new ( + babl_model_from_id (BABL_GRAY_GAMMA_2_2_ALPHA), + babl_type_from_id (BABL_HALF), + babl_component_from_id (BABL_LUMA), + babl_component_from_id (BABL_ALPHA), + NULL); + babl_format_new ( + babl_model_from_id (BABL_GRAY_GAMMA_2_2_ALPHA_PREMULTIPLIED), + babl_type_from_id (BABL_HALF), + babl_component_from_id (BABL_LUMA_MUL_ALPHA), + babl_component_from_id (BABL_ALPHA), + NULL); + babl_format_new ( + babl_model_from_id (BABL_GRAY_GAMMA_2_2), + babl_type_from_id (BABL_HALF), + babl_component_from_id (BABL_LUMA), + NULL); + /***********/ + + babl_format_new ( + babl_model_from_id (BABL_GRAY_ALPHA), + babl_type ("u15"), + babl_component_from_id (BABL_LUMINANCE), + babl_component_from_id (BABL_ALPHA), + NULL); + babl_format_new ( + babl_model_from_id (BABL_GRAY_ALPHA_PREMULTIPLIED), + babl_type ("u15"), + babl_component_from_id (BABL_LUMINANCE_MUL_ALPHA), + babl_component_from_id (BABL_ALPHA), + NULL); + babl_format_new ( + babl_model_from_id (BABL_GRAY), + babl_type ("u15"), + babl_component_from_id (BABL_LUMINANCE), + NULL); + babl_format_new ( + babl_model_from_id (BABL_GRAY_GAMMA_2_2_ALPHA), + babl_type ("u15"), + babl_component_from_id (BABL_LUMA), + babl_component_from_id (BABL_ALPHA), + NULL); + babl_format_new ( + babl_model_from_id (BABL_GRAY_GAMMA_2_2_ALPHA_PREMULTIPLIED), + babl_type ("u15"), + babl_component_from_id (BABL_LUMA_MUL_ALPHA), + babl_component_from_id (BABL_ALPHA), + NULL); + babl_format_new ( + babl_model_from_id (BABL_GRAY_GAMMA_2_2), + babl_type ("u15"), + babl_component_from_id (BABL_LUMA), + NULL); + + babl_format_new ( + babl_model_from_id (BABL_GRAY_ALPHA), + babl_type_from_id (BABL_U32), + babl_component_from_id (BABL_LUMINANCE), + babl_component_from_id (BABL_ALPHA), + NULL); + babl_format_new ( + babl_model_from_id (BABL_GRAY_ALPHA_PREMULTIPLIED), + babl_type_from_id (BABL_U32), + babl_component_from_id (BABL_LUMINANCE_MUL_ALPHA), + babl_component_from_id (BABL_ALPHA), + NULL); + babl_format_new ( + babl_model_from_id (BABL_GRAY), + babl_type_from_id (BABL_U32), + babl_component_from_id (BABL_LUMINANCE), + NULL); + babl_format_new ( + babl_model_from_id (BABL_GRAY_GAMMA_2_2_ALPHA), + babl_type_from_id (BABL_U32), + babl_component_from_id (BABL_LUMA), + babl_component_from_id (BABL_ALPHA), + NULL); + babl_format_new ( + babl_model_from_id (BABL_GRAY_GAMMA_2_2_ALPHA_PREMULTIPLIED), + babl_type_from_id (BABL_U32), + babl_component_from_id (BABL_LUMA_MUL_ALPHA), + babl_component_from_id (BABL_ALPHA), + NULL); + babl_format_new ( + babl_model_from_id (BABL_GRAY_GAMMA_2_2), + babl_type_from_id (BABL_U32), + babl_component_from_id (BABL_LUMA), + NULL); +} diff --git a/babl/base/model-rgb.c b/babl/base/model-rgb.c new file mode 100644 index 0000000..4ba6f7d --- /dev/null +++ b/babl/base/model-rgb.c @@ -0,0 +1,690 @@ +/* babl - dynamically extendable universal pixel conversion library. + * Copyright (C) 2005, Øyvind Kolås. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, see + * . + */ + +#include "config.h" +#include +#include + +#include "babl.h" +#include "babl-classes.h" +#include "babl-ids.h" +#include "util.h" +#include "babl-base.h" + +static void models (void); +static void components (void); +static void conversions (void); +static void formats (void); + +void +babl_base_model_rgb (void) +{ + components (); + models (); + conversions (); + formats (); +} + +static void +components (void) +{ + babl_component_new ( + "Ra", + "id", BABL_RED_MUL_ALPHA, + "luma", + "chroma", + "alpha", + NULL); + babl_component_new ( + "Ga", + "id", BABL_GREEN_MUL_ALPHA, + "luma", + "chroma", + "alpha", + NULL); + babl_component_new ( + "Ba", + "id", BABL_BLUE_MUL_ALPHA, + "luma", + "chroma", + "alpha", + NULL); + + babl_component_new ( + "R'", + "id", BABL_RED_GAMMA_2_2, + "luma", + "chroma", + NULL); + + babl_component_new ( + "G'", + "id", BABL_GREEN_GAMMA_2_2, + "luma", + "chroma", + NULL); + + babl_component_new ( + "B'", + "id", BABL_BLUE_GAMMA_2_2, + "luma", + "chroma", + NULL); + + babl_component_new ( + "R'a", + "id", BABL_RED_GAMMA_2_2_MUL_ALPHA, + "luma", + "chroma", + NULL); + + babl_component_new ( + "G'a", + "id", BABL_GREEN_GAMMA_2_2_MUL_ALPHA, + "luma", + "chroma", + NULL); + + babl_component_new ( + "B'a", + "id", BABL_BLUE_GAMMA_2_2_MUL_ALPHA, + "luma", + "chroma", + NULL); +} + +static void +models (void) +{ + babl_model_new ( + "id", BABL_RGB, + babl_component_from_id (BABL_RED), + babl_component_from_id (BABL_GREEN), + babl_component_from_id (BABL_BLUE), + NULL); + + babl_model_new ( + "id", BABL_RGBA_PREMULTIPLIED, + babl_component_from_id (BABL_RED_MUL_ALPHA), + babl_component_from_id (BABL_GREEN_MUL_ALPHA), + babl_component_from_id (BABL_BLUE_MUL_ALPHA), + babl_component_from_id (BABL_ALPHA), + NULL); + + babl_model_new ( + "id", BABL_RGB_GAMMA_2_2, + babl_component_from_id (BABL_RED_GAMMA_2_2), + babl_component_from_id (BABL_GREEN_GAMMA_2_2), + babl_component_from_id (BABL_BLUE_GAMMA_2_2), + NULL); + + babl_model_new ( + "id", BABL_RGBA_GAMMA_2_2, + babl_component_from_id (BABL_RED_GAMMA_2_2), + babl_component_from_id (BABL_GREEN_GAMMA_2_2), + babl_component_from_id (BABL_BLUE_GAMMA_2_2), + babl_component_from_id (BABL_ALPHA), + NULL); + + babl_model_new ( + "id", BABL_RGBA_GAMMA_2_2_PREMULTIPLIED, + babl_component_from_id (BABL_RED_GAMMA_2_2_MUL_ALPHA), + babl_component_from_id (BABL_GREEN_GAMMA_2_2_MUL_ALPHA), + babl_component_from_id (BABL_BLUE_GAMMA_2_2_MUL_ALPHA), + babl_component_from_id (BABL_ALPHA), + NULL); +} + +static long +copy_strip_1 (int src_bands, + char **src, + int *src_pitch, + int dst_bands, + char **dst, + int *dst_pitch, + long samples) +{ + long n = samples; + + BABL_PLANAR_SANITY + while (n--) + { + int i; + + for (i = 0; i < dst_bands; i++) + { + double foo; + if (i < src_bands) + foo = *(double *) src[i]; + else + foo = 1.0; + *(double *) dst[i] = foo; + } + + BABL_PLANAR_STEP + } + return samples; +} + +static long +g3_gamma_2_2 (int src_bands, + char **src, + int *src_pitch, + int dst_bands, + char **dst, + int *dst_pitch, + long samples) +{ + long n = samples; + + BABL_PLANAR_SANITY + while (n--) + { + int band; + for (band = 0; band < 3; band++) + *(double *) dst[band] = linear_to_gamma_2_2 (*(double *) src[band]); + for (; band < dst_bands; band++) + *(double *) dst[band] = *(double *) src[band]; + + BABL_PLANAR_STEP + } + return samples; +} + + +static long +g3_inv_gamma_2_2 (int src_bands, + char **src, + int *src_pitch, + int dst_bands, + char **dst, + int *dst_pitch, + long samples) +{ + long n = samples; + + BABL_PLANAR_SANITY + while (n--) + { + int band; + for (band = 0; band < 3; band++) + { + *(double *) dst[band] = gamma_2_2_to_linear (*(double *) src[band]); + } + for (; band < dst_bands; band++) + { + if (band < src_bands) + *(double *) dst[band] = *(double *) src[band]; + else + *(double *) dst[band] = 1.0; + } + BABL_PLANAR_STEP + } + return samples; +} + +static long +non_premultiplied_to_premultiplied (int src_bands, + char **src, + int *src_pitch, + int dst_bands, + char **dst, + int *dst_pitch, + long samples) +{ + long n = samples; + + BABL_PLANAR_SANITY + while (n--) + { + double alpha; + int band; + + alpha = *(double *) src[src_bands - 1]; + for (band = 0; band < src_bands - 1; band++) + { + *(double *) dst[band] = *(double *) src[band] * alpha; + } + *(double *) dst[dst_bands - 1] = alpha; + + BABL_PLANAR_STEP + } + return samples; +} + +static long +premultiplied_to_non_premultiplied (int src_bands, + char **src, + int *src_pitch, + int dst_bands, + char **dst, + int *dst_pitch, + long samples) +{ + long n = samples; + + BABL_PLANAR_SANITY + while (n--) + { + double alpha; + int band; + + alpha = *(double *) src[src_bands - 1]; + if (alpha > BABL_ALPHA_THRESHOLD) + { + double recip_alpha = 1.0 / alpha; + for (band = 0; band < src_bands - 1; band++) + *(double *) dst[band] = *(double *) src[band] * recip_alpha; + } + else + { + for (band = 0; band < src_bands - 1; band++) + *(double *) dst[band] = 0.0; + } + *(double *) dst[dst_bands - 1] = alpha; + + BABL_PLANAR_STEP + } + return samples; +} + + + +static long +rgba2rgba_gamma_2_2_premultiplied (char *src, + char *dst, + long samples) +{ + long n = samples; + + while (n--) + { + double alpha = ((double *) src)[3]; + ((double *) dst)[0] = linear_to_gamma_2_2 (((double *) src)[0]) * alpha; + ((double *) dst)[1] = linear_to_gamma_2_2 (((double *) src)[1]) * alpha; + ((double *) dst)[2] = linear_to_gamma_2_2 (((double *) src)[2]) * alpha; + ((double *) dst)[3] = alpha; + src += 4 * sizeof (double); + dst += 4 * sizeof (double); + } + return samples; +} + + +static long +rgba_gamma_2_2_premultiplied2rgba (char *src, + char *dst, + long samples) +{ + long n = samples; + + while (n--) + { + double alpha = ((double *) src)[3]; + if (alpha > BABL_ALPHA_THRESHOLD) + { + ((double *) dst)[0] = gamma_2_2_to_linear (((double *) src)[0] / alpha); + ((double *) dst)[1] = gamma_2_2_to_linear (((double *) src)[1] / alpha); + ((double *) dst)[2] = gamma_2_2_to_linear (((double *) src)[2] / alpha); + } + else + { + ((double *) dst)[0] = 0.0; + ((double *) dst)[1] = 0.0; + ((double *) dst)[2] = 0.0; + } + ((double *) dst)[3] = alpha; + + src += 4 * sizeof (double); + dst += 4 * sizeof (double); + } + return samples; +} + + +static long +rgba2rgba_gamma_2_2 (char *src, + char *dst, + long samples) +{ + long n = samples; + + while (n--) + { + double alpha = ((double *) src)[3]; + ((double *) dst)[0] = linear_to_gamma_2_2 (((double *) src)[0]); + ((double *) dst)[1] = linear_to_gamma_2_2 (((double *) src)[1]); + ((double *) dst)[2] = linear_to_gamma_2_2 (((double *) src)[2]); + ((double *) dst)[3] = alpha; + src += 4 * sizeof (double); + dst += 4 * sizeof (double); + } + return samples; +} + + +static long +rgba_gamma_2_22rgba (char *src, + char *dst, + long samples) +{ + long n = samples; + + while (n--) + { + double alpha = ((double *) src)[3]; + ((double *) dst)[0] = gamma_2_2_to_linear (((double *) src)[0]); + ((double *) dst)[1] = gamma_2_2_to_linear (((double *) src)[1]); + ((double *) dst)[2] = gamma_2_2_to_linear (((double *) src)[2]); + ((double *) dst)[3] = alpha; + + src += 4 * sizeof (double); + dst += 4 * sizeof (double); + } + return samples; +} + +static void +conversions (void) +{ + babl_conversion_new ( + babl_model_from_id (BABL_RGBA), + babl_model_from_id (BABL_RGBA), + "planar", copy_strip_1, + NULL + ); + + + babl_conversion_new ( + babl_model_from_id (BABL_RGB), + babl_model_from_id (BABL_RGBA), + "planar", copy_strip_1, + NULL + ); + + babl_conversion_new ( + babl_model_from_id (BABL_RGBA), + babl_model_from_id (BABL_RGB), + "planar", copy_strip_1, + NULL + ); + + babl_conversion_new ( + babl_model_from_id (BABL_RGBA), + babl_model_from_id (BABL_RGBA_PREMULTIPLIED), + "planar", non_premultiplied_to_premultiplied, + NULL + ); + + babl_conversion_new ( + babl_model_from_id (BABL_RGBA_PREMULTIPLIED), + babl_model_from_id (BABL_RGBA), + "planar", premultiplied_to_non_premultiplied, + NULL + ); + + babl_conversion_new ( + babl_model_from_id (BABL_RGBA), + babl_model_from_id (BABL_RGB_GAMMA_2_2), + "planar", g3_gamma_2_2, + NULL + ); + babl_conversion_new ( + babl_model_from_id (BABL_RGB_GAMMA_2_2), + babl_model_from_id (BABL_RGBA), + "planar", g3_inv_gamma_2_2, + NULL + ); + + babl_conversion_new ( + babl_model_from_id (BABL_RGBA), + babl_model_from_id (BABL_RGBA_GAMMA_2_2), + "linear", rgba2rgba_gamma_2_2, + NULL); + babl_conversion_new ( + babl_model_from_id (BABL_RGBA_GAMMA_2_2), + babl_model_from_id (BABL_RGBA), + "linear", rgba_gamma_2_22rgba, + NULL); + + babl_conversion_new ( + babl_model_from_id (BABL_RGBA), + babl_model_from_id (BABL_RGBA_GAMMA_2_2_PREMULTIPLIED), + "linear", rgba2rgba_gamma_2_2_premultiplied, + NULL); + babl_conversion_new ( + babl_model_from_id (BABL_RGBA_GAMMA_2_2_PREMULTIPLIED), + babl_model_from_id (BABL_RGBA), + "linear", rgba_gamma_2_2_premultiplied2rgba, + NULL); +} + +static void +formats (void) +{ + babl_format_new ( + /*"name", "srgb",*/ + "id", BABL_SRGB, + babl_model_from_id (BABL_RGB_GAMMA_2_2), + babl_type_from_id (BABL_U8), + babl_component_from_id (BABL_RED_GAMMA_2_2), + babl_component_from_id (BABL_GREEN_GAMMA_2_2), + babl_component_from_id (BABL_BLUE_GAMMA_2_2), + NULL); + + babl_format_new ( + "id", BABL_SRGBA, + babl_model_from_id (BABL_RGBA_GAMMA_2_2), + babl_type_from_id (BABL_U8), + babl_component_from_id (BABL_RED_GAMMA_2_2), + babl_component_from_id (BABL_GREEN_GAMMA_2_2), + babl_component_from_id (BABL_BLUE_GAMMA_2_2), + babl_component_from_id (BABL_ALPHA), + NULL); + + babl_format_new ( + "id", BABL_RGBA_FLOAT, + babl_model_from_id (BABL_RGBA), + babl_type_from_id (BABL_FLOAT), + babl_component_from_id (BABL_RED), + babl_component_from_id (BABL_GREEN), + babl_component_from_id (BABL_BLUE), + babl_component_from_id (BABL_ALPHA), + NULL); + + babl_format_new ( + "id", BABL_RGB_FLOAT, + babl_model_from_id (BABL_RGB), + babl_type_from_id (BABL_FLOAT), + babl_component_from_id (BABL_RED), + babl_component_from_id (BABL_GREEN), + babl_component_from_id (BABL_BLUE), + NULL); + + babl_format_new ( + "id", BABL_RGB_HALF, + babl_model_from_id (BABL_RGB), + babl_type_from_id (BABL_HALF), + babl_component_from_id (BABL_RED), + babl_component_from_id (BABL_GREEN), + babl_component_from_id (BABL_BLUE), + NULL); + + babl_format_new ( + "id", BABL_RGBA_HALF, + babl_model_from_id (BABL_RGBA), + babl_type_from_id (BABL_HALF), + babl_component_from_id (BABL_RED), + babl_component_from_id (BABL_GREEN), + babl_component_from_id (BABL_BLUE), + babl_component_from_id (BABL_ALPHA), + NULL); + + babl_format_new ( + babl_model_from_id (BABL_RGBA_PREMULTIPLIED), + babl_type_from_id (BABL_HALF), + babl_component_from_id (BABL_RED_MUL_ALPHA), + babl_component_from_id (BABL_GREEN_MUL_ALPHA), + babl_component_from_id (BABL_BLUE_MUL_ALPHA), + babl_component_from_id (BABL_ALPHA), + NULL); + + babl_format_new ( + babl_model_from_id (BABL_RGB_GAMMA_2_2), + babl_type_from_id (BABL_HALF), + babl_component_from_id (BABL_RED_GAMMA_2_2), + babl_component_from_id (BABL_GREEN_GAMMA_2_2), + babl_component_from_id (BABL_BLUE_GAMMA_2_2), + NULL); + + babl_format_new ( + babl_model_from_id (BABL_RGBA_GAMMA_2_2), + babl_type_from_id (BABL_HALF), + babl_component_from_id (BABL_RED_GAMMA_2_2), + babl_component_from_id (BABL_GREEN_GAMMA_2_2), + babl_component_from_id (BABL_BLUE_GAMMA_2_2), + babl_component_from_id (BABL_ALPHA), + NULL); + + babl_format_new ( + babl_model_from_id (BABL_RGBA_GAMMA_2_2_PREMULTIPLIED), + babl_type_from_id (BABL_HALF), + babl_component_from_id (BABL_RED_GAMMA_2_2_MUL_ALPHA), + babl_component_from_id (BABL_GREEN_GAMMA_2_2_MUL_ALPHA), + babl_component_from_id (BABL_BLUE_GAMMA_2_2_MUL_ALPHA), + babl_component_from_id (BABL_ALPHA), + NULL); + + /******/ + babl_format_new ( + babl_model_from_id (BABL_RGB), + babl_type ("u15"), + babl_component_from_id (BABL_RED), + babl_component_from_id (BABL_GREEN), + babl_component_from_id (BABL_BLUE), + NULL); + + babl_format_new ( + babl_model_from_id (BABL_RGBA), + babl_type ("u15"), + babl_component_from_id (BABL_RED), + babl_component_from_id (BABL_GREEN), + babl_component_from_id (BABL_BLUE), + babl_component_from_id (BABL_ALPHA), + NULL); + + babl_format_new ( + babl_model_from_id (BABL_RGBA_PREMULTIPLIED), + babl_type ("u15"), + babl_component_from_id (BABL_RED_MUL_ALPHA), + babl_component_from_id (BABL_GREEN_MUL_ALPHA), + babl_component_from_id (BABL_BLUE_MUL_ALPHA), + babl_component_from_id (BABL_ALPHA), + NULL); + + babl_format_new ( + babl_model_from_id (BABL_RGB_GAMMA_2_2), + babl_type ("u15"), + babl_component_from_id (BABL_RED_GAMMA_2_2), + babl_component_from_id (BABL_GREEN_GAMMA_2_2), + babl_component_from_id (BABL_BLUE_GAMMA_2_2), + NULL); + + babl_format_new ( + babl_model_from_id (BABL_RGBA_GAMMA_2_2), + babl_type ("u15"), + babl_component_from_id (BABL_RED_GAMMA_2_2), + babl_component_from_id (BABL_GREEN_GAMMA_2_2), + babl_component_from_id (BABL_BLUE_GAMMA_2_2), + babl_component_from_id (BABL_ALPHA), + NULL); + + babl_format_new ( + babl_model_from_id (BABL_RGBA_GAMMA_2_2_PREMULTIPLIED), + babl_type ("u15"), + babl_component_from_id (BABL_RED_GAMMA_2_2_MUL_ALPHA), + babl_component_from_id (BABL_GREEN_GAMMA_2_2_MUL_ALPHA), + babl_component_from_id (BABL_BLUE_GAMMA_2_2_MUL_ALPHA), + babl_component_from_id (BABL_ALPHA), + NULL); + + + babl_format_new ( + babl_model_from_id (BABL_RGB), + babl_type_from_id (BABL_U32), + babl_component_from_id (BABL_RED), + babl_component_from_id (BABL_GREEN), + babl_component_from_id (BABL_BLUE), + NULL); + + babl_format_new ( + babl_model_from_id (BABL_RGBA), + babl_type_from_id (BABL_U32), + babl_component_from_id (BABL_RED), + babl_component_from_id (BABL_GREEN), + babl_component_from_id (BABL_BLUE), + babl_component_from_id (BABL_ALPHA), + NULL); + + babl_format_new ( + babl_model_from_id (BABL_RGBA_PREMULTIPLIED), + babl_type_from_id (BABL_U32), + babl_component_from_id (BABL_RED_MUL_ALPHA), + babl_component_from_id (BABL_GREEN_MUL_ALPHA), + babl_component_from_id (BABL_BLUE_MUL_ALPHA), + babl_component_from_id (BABL_ALPHA), + NULL); + + babl_format_new ( + babl_model_from_id (BABL_RGB_GAMMA_2_2), + babl_type_from_id (BABL_U32), + babl_component_from_id (BABL_RED_GAMMA_2_2), + babl_component_from_id (BABL_GREEN_GAMMA_2_2), + babl_component_from_id (BABL_BLUE_GAMMA_2_2), + NULL); + + babl_format_new ( + babl_model_from_id (BABL_RGBA_GAMMA_2_2), + babl_type_from_id (BABL_U32), + babl_component_from_id (BABL_RED_GAMMA_2_2), + babl_component_from_id (BABL_GREEN_GAMMA_2_2), + babl_component_from_id (BABL_BLUE_GAMMA_2_2), + babl_component_from_id (BABL_ALPHA), + NULL); + + babl_format_new ( + babl_model_from_id (BABL_RGBA_GAMMA_2_2_PREMULTIPLIED), + babl_type_from_id (BABL_U32), + babl_component_from_id (BABL_RED_GAMMA_2_2_MUL_ALPHA), + babl_component_from_id (BABL_GREEN_GAMMA_2_2_MUL_ALPHA), + babl_component_from_id (BABL_BLUE_GAMMA_2_2_MUL_ALPHA), + babl_component_from_id (BABL_ALPHA), + NULL); + +#ifdef XXXX + babl_format_new ( + "id", BABL_RGB565, + babl_model_from_id (BABL_RGB), + babl_component_from_id (BABL_RED), + babl_component_from_id (BABL_GREEN), + babl_component_from_id (BABL_BLUE), + + ); +#endif +} + diff --git a/babl/base/model-ycbcr.c b/babl/base/model-ycbcr.c new file mode 100644 index 0000000..6a6370e --- /dev/null +++ b/babl/base/model-ycbcr.c @@ -0,0 +1,306 @@ +/* babl - dynamically extendable universal pixel conversion library. + * Copyright (C) 2005, Øyvind Kolås. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, see + * . + */ + +#include "config.h" +#include +#include +#include + +#include "babl.h" +#include "babl-classes.h" +#include "babl-ids.h" +#include "babl-base.h" + +#include "util.h" + +static void components (void); +static void models (void); +static void conversions (void); +static void formats (void); + +void +babl_base_model_ycbcr (void) +{ + components (); + models (); + conversions (); + formats (); +} + +static void +components (void) +{ + babl_component_new ( + "Cb", + "id", BABL_CB, + "chroma", + NULL); + + babl_component_new ( + "Cr", + "id", BABL_CR, + "chroma", + NULL); +} + +static void +models (void) +{ + babl_model_new ( + "id", BABL_YCBCR, + babl_component_from_id (BABL_LUMA), + babl_component_from_id (BABL_CB), + babl_component_from_id (BABL_CR), + NULL); + + babl_model_new ( + "id", BABL_YCBCR_ALPHA, + babl_component_from_id (BABL_LUMA), + babl_component_from_id (BABL_CB), + babl_component_from_id (BABL_CR), + babl_component_from_id (BABL_ALPHA), + NULL); +} + +static long +rgba_to_ycbcra (char *src, + char *dst, + long n) +{ + while (n--) + { + double red = ((double *) src)[0]; + double green = ((double *) src)[1]; + double blue = ((double *) src)[2]; + double alpha = ((double *) src)[3]; + + double luminance, cb, cr; + + red = linear_to_gamma_2_2 (red); + green = linear_to_gamma_2_2 (green); + blue = linear_to_gamma_2_2 (blue); + + luminance = 0.299 * red + 0.587 * green + 0.114 * blue; + cb = -0.168736 * red - 0.331264 * green + 0.5 * blue; + cr = 0.5 * red - 0.418688 * green - 0.081312 * blue; + + ((double *) dst)[0] = luminance; + ((double *) dst)[1] = cb; + ((double *) dst)[2] = cr; + ((double *) dst)[3] = alpha; + + src += sizeof (double) * 4; + dst += sizeof (double) * 4; + } + return n; +} + + +static long +rgba_to_ycbcr (char *src, + char *dst, + long n) +{ + while (n--) + { + double red = ((double *) src)[0]; + double green = ((double *) src)[1]; + double blue = ((double *) src)[2]; + + double luminance, cb, cr; + + red = linear_to_gamma_2_2 (red); + green = linear_to_gamma_2_2 (green); + blue = linear_to_gamma_2_2 (blue); + + luminance = 0.299 * red + 0.587 * green + 0.114 * blue; + cb = -0.168736 * red - 0.331264 * green + 0.5 * blue; + cr = 0.5 * red - 0.418688 * green - 0.081312 * blue; + + ((double *) dst)[0] = luminance; + ((double *) dst)[1] = cb; + ((double *) dst)[2] = cr; + + src += sizeof (double) * 4; + dst += sizeof (double) * 3; + } + return n; +} + +static long +ycbcra_to_rgba (char *src, + char *dst, + long n) +{ + while (n--) + { + double luminance = ((double *) src)[0]; + double cb = ((double *) src)[1]; + double cr = ((double *) src)[2]; + double alpha = ((double *) src)[3]; + + double red, green, blue; + + red = 1.0 * luminance + 0.0 * cb + 1.40200 * cr; + green = 1.0 * luminance - 0.344136 * cb - 0.71414136 * cr; + blue = 1.0 * luminance + 1.772 * cb + 0.0 * cr; + + red = gamma_2_2_to_linear (red); + green = gamma_2_2_to_linear (green); + blue = gamma_2_2_to_linear (blue); + + ((double *) dst)[0] = red; + ((double *) dst)[1] = green; + ((double *) dst)[2] = blue; + ((double *) dst)[3] = alpha; + + src += sizeof (double) * 4; + dst += sizeof (double) * 4; + } + return n; +} + + +static long +ycbcr_to_rgba (char *src, + char *dst, + long n) +{ + while (n--) + { + double luminance = ((double *) src)[0]; + double cb = ((double *) src)[1]; + double cr = ((double *) src)[2]; + + double red, green, blue; + + red = 1.0 * luminance + 0.0 * cb + 1.40200 * cr; + green = 1.0 * luminance - 0.344136 * cb - 0.71414136 * cr; + blue = 1.0 * luminance + 1.772 * cb + 0.0 * cr; + + red = gamma_2_2_to_linear (red); + green = gamma_2_2_to_linear (green); + blue = gamma_2_2_to_linear (blue); + + ((double *) dst)[0] = red; + ((double *) dst)[1] = green; + ((double *) dst)[2] = blue; + ((double *) dst)[3] = 1.0; + + src += sizeof (double) * 3; + dst += sizeof (double) * 4; + } + return n; +} + +static void +conversions (void) +{ + babl_conversion_new ( + babl_model_from_id (BABL_RGBA), + babl_model_from_id (BABL_YCBCR), + "linear", rgba_to_ycbcr, + NULL + ); + babl_conversion_new ( + babl_model_from_id (BABL_YCBCR), + babl_model_from_id (BABL_RGBA), + "linear", ycbcr_to_rgba, + NULL + ); + babl_conversion_new ( + babl_model_from_id (BABL_RGBA), + babl_model_from_id (BABL_YCBCR_ALPHA), + "linear", rgba_to_ycbcra, + NULL + ); + babl_conversion_new ( + babl_model_from_id (BABL_YCBCR_ALPHA), + babl_model_from_id (BABL_RGBA), + "linear", ycbcra_to_rgba, + NULL + ); +} + +static void +formats (void) +{ + babl_format_new ( + "name", "Y'CbCr u8", + "planar", + babl_model_from_id (BABL_YCBCR), + babl_type_from_id (BABL_U8_LUMA), + babl_sampling (1, 1), + babl_component_from_id (BABL_LUMA), + babl_type_from_id (BABL_U8_CHROMA), + babl_sampling (2, 2), + babl_component_from_id (BABL_CB), + babl_sampling (2, 2), + babl_component_from_id (BABL_CR), + NULL); + +/* deactivate these for now */ +if (0) +{ + babl_format_new ( + "name", "y'cbcr420", + "id", BABL_YCBCR420, + "planar", + babl_model_from_id (BABL_YCBCR), + babl_type_from_id (BABL_U8_LUMA), + babl_sampling (1, 1), + babl_component_from_id (BABL_LUMA), + babl_type_from_id (BABL_U8_CHROMA), + babl_sampling (2, 2), + babl_component_from_id (BABL_CB), + babl_sampling (2, 2), + babl_component_from_id (BABL_CR), + NULL); + + + babl_format_new ( + "name", "y'cbcr422", + "id", BABL_YCBCR422, + "planar", + babl_model_from_id (BABL_YCBCR), + babl_type_from_id (BABL_U8_LUMA), + babl_sampling (1, 1), + babl_component_from_id (BABL_LUMA), + babl_type_from_id (BABL_U8_CHROMA), + babl_sampling (2, 1), + babl_component_from_id (BABL_CB), + babl_sampling (2, 1), + babl_component_from_id (BABL_CR), + NULL); + + babl_format_new ( + "name", "y'cbcr411", + "id", BABL_YCBCR411, + "planar", + babl_model_from_id (BABL_YCBCR), + babl_type_from_id (BABL_U8_LUMA), + babl_sampling (1, 1), + babl_component_from_id (BABL_LUMA), + babl_type_from_id (BABL_U8_CHROMA), + babl_sampling (4, 1), + babl_component_from_id (BABL_CB), + babl_sampling (4, 1), + babl_component_from_id (BABL_CR), + NULL); +} +} diff --git a/babl/base/pow-24.c b/babl/base/pow-24.c new file mode 100644 index 0000000..a3bb36e --- /dev/null +++ b/babl/base/pow-24.c @@ -0,0 +1,73 @@ +/* babl - dynamically extendable universal pixel conversion library. + * Copyright (C) 2013 Loren Merritt + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, see + * . + */ + +#include +#include "util.h" + +/* a^b = exp(b*log(a)) + * + * Extracting the exponent from a float gives us an approximate log. + * Or better yet, reinterpret the bitpattern of the whole float as an int. + * + * However, the output values of 12throot vary by less than a factor of 2 + * over the domain we care about, so we only get log() that way, not exp(). + * + * Approximate exp() with a low-degree polynomial; not exactly equal to the + * Taylor series since we're minimizing maximum error over a certain finite + * domain. It's not worthwhile to use lots of terms, since Newton's method + * has a better convergence rate once you get reasonably close to the answer. + */ +static inline double +init_newton (double x, double exponent, double c0, double c1, double c2) +{ + int iexp; + double y = frexp(x, &iexp); + y = 2*y+(iexp-2); + c1 *= M_LN2*exponent; + c2 *= M_LN2*M_LN2*exponent*exponent; + return y = c0 + c1*y + c2*y*y; +} + +/* Returns x^2.4 == (x*(x^(-1/5)))^3, using Newton's method for x^(-1/5). + */ +double +babl_pow_24 (double x) +{ + double y = init_newton (x, -1./5, 0.9953189663, 0.9594345146, 0.6742970332); + int i; + for (i = 0; i < 3; i++) + y = (1.+1./5)*y - ((1./5)*x*(y*y))*((y*y)*(y*y)); + x *= y; + return x*x*x; +} + +/* Returns x^(1/2.4) == x*((x^(-1/6))^(1/2))^7, using Newton's method for x^(-1/6). + */ +double +babl_pow_1_24 (double x) +{ + double y = init_newton (x, -1./12, 0.9976800269, 0.9885126933, 0.5908575383); + int i; + double z; + x = sqrt (x); + /* newton's method for x^(-1/6) */ + z = (1./6.) * x; + for (i = 0; i < 3; i++) + y = (7./6.) * y - z * ((y*y)*(y*y)*(y*y*y)); + return x*y; +} diff --git a/babl/base/pow-24.h b/babl/base/pow-24.h new file mode 100644 index 0000000..e822297 --- /dev/null +++ b/babl/base/pow-24.h @@ -0,0 +1,25 @@ +/* babl - dynamically extendable universal pixel conversion library. + * Copyright (C) 2005, Øyvind Kolås. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, see + * . + */ + +#ifndef _BASE_POW_24_H +#define _BASE_POW_24_H + +extern double babl_pow_1_24 (double x); +extern double babl_pow_24 (double x); + +#endif diff --git a/babl/base/rgb-constants.h b/babl/base/rgb-constants.h new file mode 100644 index 0000000..03810d6 --- /dev/null +++ b/babl/base/rgb-constants.h @@ -0,0 +1,32 @@ +/* babl - dynamically extendable universal pixel conversion library. + * Copyright (C) 2005, Øyvind Kolås. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, see + * . + */ + +/* + * These sRGB Y values have been adapted to the ICC spec D50 illuminant. + * They match the Y values in the GEGL and GIMP built-in sRGB profiles, + * which match the Y values in the ArgyllCMS sRGB.icm profile. + * + * For more information, see this thread and these bug reports: + * https://mail.gnome.org/archives/gimp-developer-list/2013-September/msg00113.html + * https://bugzilla.gnome.org/show_bug.cgi?id=723787 + * https://bugzilla.gnome.org/show_bug.cgi?id=724822 + */ + +#define RGB_LUMINANCE_RED (0.22248840) +#define RGB_LUMINANCE_GREEN (0.71690369) +#define RGB_LUMINANCE_BLUE (0.06060791) diff --git a/babl/base/type-float.c b/babl/base/type-float.c new file mode 100644 index 0000000..ce7e407 --- /dev/null +++ b/babl/base/type-float.c @@ -0,0 +1,82 @@ +/* babl - dynamically extendable universal pixel conversion library. + * Copyright (C) 2005, Øyvind Kolås. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, see + * . + */ + +#include "config.h" +#include +#include + +#include "babl.h" +#include "babl-classes.h" +#include "babl-ids.h" +#include "babl-base.h" + +static long +convert_double_float (char *src, + char *dst, + int src_pitch, + int dst_pitch, + long n) +{ + while (n--) + { + (*(float *) dst) = (*(double *) src); + dst += dst_pitch; + src += src_pitch; + } + return n; +} + +static long +convert_float_double (char *src, + char *dst, + int src_pitch, + int dst_pitch, + long n) +{ + while (n--) + { + (*(double *) dst) = (*(float *) src); + dst += dst_pitch; + src += src_pitch; + } + return n; +} + +void +babl_base_type_float (void) +{ + babl_type_new ( + "float", + "id", BABL_FLOAT, + "bits", 32, + NULL); + + babl_conversion_new ( + babl_type_from_id (BABL_FLOAT), + babl_type_from_id (BABL_DOUBLE), + "plane", convert_float_double, + NULL + ); + + babl_conversion_new ( + babl_type_from_id (BABL_DOUBLE), + babl_type_from_id (BABL_FLOAT), + "plane", convert_double_float, + NULL + ); +} diff --git a/babl/base/type-half.c b/babl/base/type-half.c new file mode 100644 index 0000000..61a63ca --- /dev/null +++ b/babl/base/type-half.c @@ -0,0 +1,240 @@ +/* babl - dynamically extendable universal pixel conversion library. + * Copyright (C) 2012, Øyvind Kolås. + * + * MATLAB (R) is a trademark of The Mathworks (R) Corporation + * + * Function: halfprecision + * Filename: halfprecision.c + * Programmer: James Tursa + * Version: 1.0 + * Date: March 3, 2009 + * Copyright: (c) 2009 by James Tursa, All Rights Reserved + * + * This code uses the BSD License: + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the distribution + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + * halfprecision converts the input argument to/from a half precision floating + * point bit pattern corresponding to IEEE 754r. The bit pattern is stored in a + * uint16 class variable. Please note that halfprecision is *not* a class. That + * is, you cannot do any arithmetic with the half precision bit patterns. + * halfprecision is simply a function that converts the IEEE 754r half precision + * bit pattern to/from other numeric MATLAB variables. You can, however, take + * the half precision bit patterns, convert them to single or double, do the + * operation, and then convert the result back manually. + * + * 1 bit sign bit + * 5 bits exponent, biased by 15 + * 10 bits mantissa, hidden leading bit, normalized to 1.0 + * + * Special floating point bit patterns recognized and supported: + * + * All exponent bits zero: + * - If all mantissa bits are zero, then number is zero (possibly signed) + * - Otherwise, number is a denormalized bit pattern + * + * All exponent bits set to 1: + * - If all mantissa bits are zero, then number is +Infinity or -Infinity + * - Otherwise, number is NaN (Not a Number) + */ + +#include "config.h" +#include +#include +#include + +#include "babl.h" +#include "babl-classes.h" +#include "babl-ids.h" +#include "babl-base.h" + +static int next = 1; /* should be 0 for big endian */ + +//----------------------------------------------------------------------------- + +static void doubles2halfp(void *target, void *source, long numel) +{ + uint16_t *hp = (uint16_t *) target; // Type pun output as an unsigned 16-bit int + uint32_t *xp = (uint32_t *) source; // Type pun input as an unsigned 32-bit int + uint16_t hs, he, hm; + uint32_t x, xs, xe, xm; + int hes; + + xp += next; // Little Endian adjustment if necessary + + if( source == NULL || target == NULL ) { // Nothing to convert (e.g., imag part of pure real) + return; + } + while( numel-- ) { + x = *xp++; xp++; // The extra xp++ is to skip over the remaining 32 bits of the mantissa + if( (x & 0x7FFFFFFFu) == 0 ) { // Signed zero + *hp++ = (uint16_t) (x >> 16); // Return the signed zero + } else { // Not zero + xs = x & 0x80000000u; // Pick off sign bit + xe = x & 0x7FF00000u; // Pick off exponent bits + xm = x & 0x000FFFFFu; // Pick off mantissa bits + if( xe == 0 ) { // Denormal will underflow, return a signed zero + *hp++ = (uint16_t) (xs >> 16); + } else if( xe == 0x7FF00000u ) { // Inf or NaN (all the exponent bits are set) + if( xm == 0 ) { // If mantissa is zero ... + *hp++ = (uint16_t) ((xs >> 16) | 0x7C00u); // Signed Inf + } else { + *hp++ = (uint16_t) 0xFE00u; // NaN, only 1st mantissa bit set + } + } else { // Normalized number + hs = (uint16_t) (xs >> 16); // Sign bit + hes = ((int)(xe >> 20)) - 1023 + 15; // Exponent unbias the double, then bias the halfp + if( hes >= 0x1F ) { // Overflow + *hp++ = (uint16_t) ((xs >> 16) | 0x7C00u); // Signed Inf + } else if( hes <= 0 ) { // Underflow + if( (10 - hes) > 21 ) { // Mantissa shifted all the way off & no rounding possibility + hm = (uint16_t) 0u; // Set mantissa to zero + } else { + xm |= 0x00100000u; // Add the hidden leading bit + hm = (uint16_t) (xm >> (11 - hes)); // Mantissa + if( (xm >> (10 - hes)) & 0x00000001u ) // Check for rounding + hm += (uint16_t) 1u; // Round, might overflow into exp bit, but this is OK + } + *hp++ = (hs | hm); // Combine sign bit and mantissa bits, biased exponent is zero + } else { + he = (uint16_t) (hes << 10); // Exponent + hm = (uint16_t) (xm >> 10); // Mantissa + if( xm & 0x00000200u ) // Check for rounding + *hp++ = (hs | he | hm) + (uint16_t) 1u; // Round, might overflow to inf, this is OK + else + *hp++ = (hs | he | hm); // No rounding + } + } + } + } +} + +static void halfp2doubles(void *target, void *source, long numel) +{ + uint16_t *hp = (uint16_t *) source; // Type pun input as an unsigned 16-bit int + uint32_t *xp = (uint32_t *) target; // Type pun output as an unsigned 32-bit int + uint16_t h, hs, he, hm; + uint32_t xs, xe, xm; + int32_t xes; + int e; + + if( source == NULL || target == NULL ) // Nothing to convert (e.g., imag part of pure real) + return; + while( numel-- ) { + uint32_t x; + + h = *hp++; + if( (h & 0x7FFFu) == 0 ) { // Signed zero + x = ((uint32_t) h) << 16; // Return the signed zero + } else { // Not zero + hs = h & 0x8000u; // Pick off sign bit + he = h & 0x7C00u; // Pick off exponent bits + hm = h & 0x03FFu; // Pick off mantissa bits + if( he == 0 ) { // Denormal will convert to normalized + e = -1; // The following loop figures out how much extra to adjust the exponent + do { + e++; + hm <<= 1; + } while( (hm & 0x0400u) == 0 ); // Shift until leading bit overflows into exponent bit + xs = ((uint32_t) hs) << 16; // Sign bit + xes = ((int32_t) (he >> 10)) - 15 + 1023 - e; // Exponent unbias the halfp, then bias the double + xe = (uint32_t) (xes << 20); // Exponent + xm = ((uint32_t) (hm & 0x03FFu)) << 10; // Mantissa + x = (xs | xe | xm); // Combine sign bit, exponent bits, and mantissa bits + } else if( he == 0x7C00u ) { // Inf or NaN (all the exponent bits are set) + if( hm == 0 ) { // If mantissa is zero ... + x = (((uint32_t) hs) << 16) | ((uint32_t) 0x7FF00000u); // Signed Inf + } else { + x = (uint32_t) 0xFFF80000u; // NaN, only the 1st mantissa bit set + } + } else { + xs = ((uint32_t) hs) << 16; // Sign bit + xes = ((int32_t) (he >> 10)) - 15 + 1023; // Exponent unbias the halfp, then bias the double + xe = (uint32_t) (xes << 20); // Exponent + xm = ((uint32_t) hm) << 10; // Mantissa + x = (xs | xe | xm); // Combine sign bit, exponent bits, and mantissa bits + } + } + + xp[1 - next] = 0; + xp[next] = x; + + xp += 2; + } +} + +static long +convert_double_half (char *src, + char *dst, + int src_pitch, + int dst_pitch, + long n) +{ + while (n--) + { + doubles2halfp (dst, src, 1); + dst += dst_pitch; + src += src_pitch; + } + return n; +} + +static long +convert_half_double (char *src, + char *dst, + int src_pitch, + int dst_pitch, + long n) +{ + while (n--) + { + halfp2doubles (dst, src, 1); + dst += dst_pitch; + src += src_pitch; + } + return n; +} + +void +babl_base_type_half (void) +{ + babl_type_new ( + "half", + "id", BABL_HALF, + "bits", 16, + NULL); + + babl_conversion_new ( + babl_type_from_id (BABL_HALF), + babl_type_from_id (BABL_DOUBLE), + "plane", convert_half_double, + NULL + ); + + babl_conversion_new ( + babl_type_from_id (BABL_DOUBLE), + babl_type_from_id (BABL_HALF), + "plane", convert_double_half, + NULL + ); +} diff --git a/babl/base/type-u15.c b/babl/base/type-u15.c new file mode 100644 index 0000000..47e3878 --- /dev/null +++ b/babl/base/type-u15.c @@ -0,0 +1,136 @@ +/* babl - dynamically extendable universal pixel conversion library. + * Copyright (C) 2005, Øyvind Kolås. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, see + * . + */ + +#include "config.h" +#include +#include +#include +#include + +#include "babl-internal.h" +#include "babl-base.h" + + +static inline long +convert_double_u15_scaled (double min_val, + double max_val, + uint16_t min, + uint16_t max, + char *src, + char *dst, + int src_pitch, + int dst_pitch, + long n) +{ + while (n--) + { + double dval = *(double *) src; + uint16_t u15val; + + if (dval < min_val) + u15val = min; + else if (dval > max_val) + u15val = max; + else + u15val = rint ((dval - min_val) / (max_val - min_val) * (max - min) + min); + + *(uint16_t *) dst = u15val; + dst += dst_pitch; + src += src_pitch; + } + return n; +} + +static inline long +convert_u15_double_scaled (double min_val, + double max_val, + uint16_t min, + uint16_t max, + char *src, + char *dst, + int src_pitch, + int dst_pitch, + long n) +{ + while (n--) + { + int u15val = *(uint16_t *) src; + double dval; + + if (u15val < min) + dval = min_val; + else if (u15val > max) + dval = max_val; + else + dval = (u15val - min) / (double) (max - min) * (max_val - min_val) + min_val; + + (*(double *) dst) = dval; + dst += dst_pitch; + src += src_pitch; + } + return n; +} + +#define MAKE_CONVERSIONS(name, min_val, max_val, min, max) \ + static long \ + convert_ ## name ## _double (void *src, \ + void *dst, \ + int src_pitch, \ + int dst_pitch, \ + long n) \ + { \ + return convert_u15_double_scaled (min_val, max_val, min, max, \ + src, dst, src_pitch, dst_pitch, n); \ + } \ + static long \ + convert_double_ ## name (void *src, \ + void *dst, \ + int src_pitch, \ + int dst_pitch, \ + long n) \ + { \ + return convert_double_u15_scaled (min_val, max_val, min, max, \ + src, dst, src_pitch, dst_pitch, n); \ + } + +MAKE_CONVERSIONS (u15, 0.0, 1.0, 0, (1<<15)) + +void +babl_base_type_u15 (void) +{ + babl_hmpf_on_name_lookups--; + babl_type_new ( + "u15", + "bits", 16, + NULL); + + babl_conversion_new ( + babl_type ("u15"), + babl_type_from_id (BABL_DOUBLE), + "plane", convert_u15_double, + NULL + ); + + babl_conversion_new ( + babl_type_from_id (BABL_DOUBLE), + babl_type ("u15"), + "plane", convert_double_u15, + NULL + ); + babl_hmpf_on_name_lookups++; +} diff --git a/babl/base/type-u16.c b/babl/base/type-u16.c new file mode 100644 index 0000000..9fcad8b --- /dev/null +++ b/babl/base/type-u16.c @@ -0,0 +1,135 @@ +/* babl - dynamically extendable universal pixel conversion library. + * Copyright (C) 2005, Øyvind Kolås. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, see + * . + */ + +#include "config.h" +#include +#include +#include +#include + +#include "babl-internal.h" +#include "babl-base.h" + + +static inline long +convert_double_u16_scaled (double min_val, + double max_val, + uint16_t min, + uint16_t max, + char *src, + char *dst, + int src_pitch, + int dst_pitch, + long n) +{ + while (n--) + { + double dval = *(double *) src; + uint16_t u16val; + + if (dval < min_val) + u16val = min; + else if (dval > max_val) + u16val = max; + else + u16val = rint ((dval - min_val) / (max_val - min_val) * (max - min) + min); + + *(uint16_t *) dst = u16val; + dst += dst_pitch; + src += src_pitch; + } + return n; +} + +static inline long +convert_u16_double_scaled (double min_val, + double max_val, + uint16_t min, + uint16_t max, + char *src, + char *dst, + int src_pitch, + int dst_pitch, + long n) +{ + while (n--) + { + int u16val = *(uint16_t *) src; + double dval; + + if (u16val < min) + dval = min_val; + else if (u16val > max) + dval = max_val; + else + dval = (u16val - min) / (double) (max - min) * (max_val - min_val) + min_val; + + (*(double *) dst) = dval; + dst += dst_pitch; + src += src_pitch; + } + return n; +} + +#define MAKE_CONVERSIONS(name, min_val, max_val, min, max) \ + static long \ + convert_ ## name ## _double (void *src, \ + void *dst, \ + int src_pitch, \ + int dst_pitch, \ + long n) \ + { \ + return convert_u16_double_scaled (min_val, max_val, min, max, \ + src, dst, src_pitch, dst_pitch, n); \ + } \ + static long \ + convert_double_ ## name (void *src, \ + void *dst, \ + int src_pitch, \ + int dst_pitch, \ + long n) \ + { \ + return convert_double_u16_scaled (min_val, max_val, min, max, \ + src, dst, src_pitch, dst_pitch, n); \ + } + +MAKE_CONVERSIONS (u16, 0.0, 1.0, 0, UINT16_MAX) + +void +babl_base_type_u16 (void) +{ + babl_type_new ( + "u16", + "id", BABL_U16, + "bits", 16, + NULL); + + babl_conversion_new ( + babl_type_from_id (BABL_U16), + babl_type_from_id (BABL_DOUBLE), + "plane", convert_u16_double, + NULL + ); + + babl_conversion_new ( + babl_type_from_id (BABL_DOUBLE), + babl_type_from_id (BABL_U16), + "plane", convert_double_u16, + NULL + ); +} diff --git a/babl/base/type-u32.c b/babl/base/type-u32.c new file mode 100644 index 0000000..fc38a01 --- /dev/null +++ b/babl/base/type-u32.c @@ -0,0 +1,134 @@ +/* babl - dynamically extendable universal pixel conversion library. + * Copyright (C) 2005, Øyvind Kolås. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, see + * . + */ + +#include "config.h" +#include +#include +#include +#include + +#include "babl-internal.h" +#include "babl-base.h" + +static inline long +convert_double_u32_scaled (double min_val, + double max_val, + uint32_t min, + uint32_t max, + char *src, + char *dst, + int src_pitch, + int dst_pitch, + long n) +{ + while (n--) + { + double dval = *(double *) src; + uint32_t u32val; + + if (dval < min_val) + u32val = min; + else if (dval > max_val) + u32val = max; + else + u32val = rint ((dval - min_val) / (max_val - min_val) * (max - min) + min); + + *(uint32_t *) dst = u32val; + dst += dst_pitch; + src += src_pitch; + } + return n; +} + +static inline long +convert_u32_double_scaled (double min_val, + double max_val, + uint32_t min, + uint32_t max, + char *src, + char *dst, + int src_pitch, + int dst_pitch, + long n) +{ + while (n--) + { + int u32val = *(uint32_t *) src; + double dval; + + if (u32val < min) + dval = min_val; + else if (u32val > max) + dval = max_val; + else + dval = (u32val - min) / (double) (max - min) * (max_val - min_val) + min_val; + + (*(double *) dst) = dval; + dst += dst_pitch; + src += src_pitch; + } + return n; +} + +#define MAKE_CONVERSIONS(name, min_val, max_val, min, max) \ + static long \ + convert_ ## name ## _double (void *src, \ + void *dst, \ + int src_pitch, \ + int dst_pitch, \ + long n) \ + { \ + return convert_u32_double_scaled (min_val, max_val, min, max, \ + src, dst, src_pitch, dst_pitch, n); \ + } \ + static long \ + convert_double_ ## name (void *src, \ + void *dst, \ + int src_pitch, \ + int dst_pitch, \ + long n) \ + { \ + return convert_double_u32_scaled (min_val, max_val, min, max, \ + src, dst, src_pitch, dst_pitch, n); \ + } + +MAKE_CONVERSIONS (u32, 0.0, 1.0, 0, UINT32_MAX) + +void +babl_base_type_u32 (void) +{ + babl_type_new ( + "u32", + "id", BABL_U32, + "bits", 32, + NULL); + + babl_conversion_new ( + babl_type_from_id (BABL_U32), + babl_type_from_id (BABL_DOUBLE), + "plane", convert_u32_double, + NULL + ); + + babl_conversion_new ( + babl_type_from_id (BABL_DOUBLE), + babl_type_from_id (BABL_U32), + "plane", convert_double_u32, + NULL + ); +} diff --git a/babl/base/type-u8.c b/babl/base/type-u8.c new file mode 100644 index 0000000..9a67a0e --- /dev/null +++ b/babl/base/type-u8.c @@ -0,0 +1,179 @@ +/* babl - dynamically extendable universal pixel conversion library. + * Copyright (C) 2005, Øyvind Kolås. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, see + * . + */ + +#include "config.h" +#include +#include +#include + +#include "babl-internal.h" +#include "babl-base.h" + +#include +static inline long +convert_double_u8_scaled (double min_val, + double max_val, + unsigned char min, + unsigned char max, + char *src, + char *dst, + int src_pitch, + int dst_pitch, + long n) +{ + while (n--) + { + double dval = *(double *) src; + unsigned char u8val; + + if (dval < min_val) + u8val = min; + else if (dval > max_val) + u8val = max; + else + u8val = rint ((dval - min_val) / (max_val - min_val) * (max - min) + min); + + *(unsigned char *) dst = u8val; + src += src_pitch; + dst += dst_pitch; + } + return n; +} + +static inline long +convert_u8_double_scaled (double min_val, + double max_val, + unsigned char min, + unsigned char max, + char *src, + char *dst, + int src_pitch, + int dst_pitch, + long n) +{ + while (n--) + { + int u8val = *(unsigned char *) src; + double dval; + + if (u8val < min) + dval = min_val; + else if (u8val > max) + dval = max_val; + else + dval = (u8val - min) / (double) (max - min) * (max_val - min_val) + min_val; + + (*(double *) dst) = dval; + + dst += dst_pitch; + src += src_pitch; + } + return n; +} + +#define MAKE_CONVERSIONS(name, min_val, max_val, min, max) \ + static long \ + convert_ ## name ## _double (void *src, \ + void *dst, \ + int src_pitch, \ + int dst_pitch, \ + long n) \ + { \ + return convert_u8_double_scaled (min_val, max_val, min, max, \ + src, dst, src_pitch, dst_pitch, n); \ + } \ + static long \ + convert_double_ ## name (void *src, \ + void *dst, \ + int src_pitch, \ + int dst_pitch, \ + long n) \ + { \ + return convert_double_u8_scaled (min_val, max_val, min, max, \ + src, dst, src_pitch, dst_pitch, n); \ + } + +MAKE_CONVERSIONS (u8, 0.0, 1.0, 0x00, UINT8_MAX) +MAKE_CONVERSIONS (u8_luma, 0.0, 1.0, 16, 235) +MAKE_CONVERSIONS (u8_chroma, 0.0, 1.0, 16, 240) + +void +babl_base_type_u8 (void) +{ + babl_type_new ( + "u8", + "id", BABL_U8, + "bits", 8, + NULL); + + babl_type_new ( + "u8-luma", + "id", BABL_U8_LUMA, + "bits", 8, + NULL + ); + + babl_type_new ( + "u8-chroma", + "id", BABL_U8_CHROMA, + "integer", + "unsigned", + "bits", 8, + "min", (long) 16, + "max", (long) 240, + "min_val", -0.5, + "max_val", 0.5, + NULL + ); + babl_conversion_new ( + babl_type_from_id (BABL_U8), + babl_type_from_id (BABL_DOUBLE), + "plane", convert_u8_double, + NULL + ); + babl_conversion_new ( + babl_type_from_id (BABL_DOUBLE), + babl_type_from_id (BABL_U8), + "plane", convert_double_u8, + NULL + ); + babl_conversion_new ( + babl_type_from_id (BABL_U8_LUMA), + babl_type_from_id (BABL_DOUBLE), + "plane", convert_u8_luma_double, + NULL + ); + babl_conversion_new ( + babl_type_from_id (BABL_DOUBLE), + babl_type_from_id (BABL_U8_LUMA), + "plane", convert_double_u8_luma, + NULL + ); + babl_conversion_new ( + babl_type_from_id (BABL_U8_CHROMA), + babl_type_from_id (BABL_DOUBLE), + "plane", convert_u8_chroma_double, + NULL + ); + babl_conversion_new ( + babl_type_from_id (BABL_DOUBLE), + babl_type_from_id (BABL_U8_CHROMA), + "plane", convert_double_u8_chroma, + NULL + ); +} diff --git a/babl/base/util.h b/babl/base/util.h new file mode 100644 index 0000000..cfb17b0 --- /dev/null +++ b/babl/base/util.h @@ -0,0 +1,93 @@ +/* babl - dynamically extendable universal pixel conversion library. + * Copyright (C) 2005, Øyvind Kolås. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, see + * . + */ + +#ifndef _BASE_UTIL_H +#define _BASE_UTIL_H + +#include +#include +#include "pow-24.h" + +/* Alpha threshold used in the reference implementation for + * un-pre-multiplication of color data: + * + * 0.01 / (2^16 - 1) + */ +#define BABL_ALPHA_THRESHOLD 0.000000152590219 + +#define BABL_PLANAR_SANITY \ + { \ + assert(src_bands>0); \ + assert(dst_bands>0); \ + assert(src); \ + assert(*src); \ + assert(dst); \ + assert(*dst); \ + assert(n>0); \ + assert(*src_pitch); \ + } + +#define BABL_PLANAR_STEP \ + { \ + int i; \ + for (i=0; i< src_bands; i++) \ + src[i]+=src_pitch[i]; \ + for (i=0; i< dst_bands; i++) \ + dst[i]+=dst_pitch[i]; \ + } + +#endif + +#define BABL_USE_SRGB_GAMMA + +#ifdef BABL_USE_SRGB_GAMMA +static inline double +linear_to_gamma_2_2 (double value) +{ + if (value > 0.003130804954) + return 1.055 * pow (value, (1.0/2.4)) - 0.055; + return 12.92 * value; +} + +static inline double +gamma_2_2_to_linear (double value) +{ + if (value > 0.04045) + return pow ((value + 0.055) / 1.055, 2.4); + return value / 12.92; +} +static inline double +babl_linear_to_gamma_2_2 (double value) +{ + if (value > 0.003130804954) + return 1.055 * babl_pow_1_24 (value) - 0.055; + return 12.92 * value; +} + +static inline double +babl_gamma_2_2_to_linear (double value) +{ + if (value > 0.04045) + return babl_pow_24 ((value + 0.055) / 1.055); + return value / 12.92; +} + +#else + #define linear_to_gamma_2_2(value) (pow((value), (1.0F/2.2F))) + #define gamma_2_2_to_linear(value) (pow((value), 2.2F)) +#endif diff --git a/babl/gettimeofday.c b/babl/gettimeofday.c new file mode 100644 index 0000000..6640abc --- /dev/null +++ b/babl/gettimeofday.c @@ -0,0 +1,69 @@ +/* + * timeval.h 1.0 01/12/19 + * + * Defines gettimeofday, timeval, etc. for Win32 + * + * By Wu Yongwei + * + */ +#include "config.h" + +#ifdef _WIN32 + +#define WIN32_LEAN_AND_MEAN +#include +#include + +#ifndef __GNUC__ +#define EPOCHFILETIME (116444736000000000i 64) +#else +#define EPOCHFILETIME (116444736000000000LL) +#endif + +struct timeval +{ + long tv_sec; /* seconds */ + long tv_usec; /* microseconds */ +}; + +struct timezone +{ + int tz_minuteswest; /* minutes W of Greenwich */ + int tz_dsttime; /* type of dst correction */ +}; + + +int gettimeofday (struct timeval *tv, struct timezone *tz) +{ + FILETIME ft; + LARGE_INTEGER li; + __int64 t; + static int tzflag; + + if (tv) + { + GetSystemTimeAsFileTime (&ft); + li.LowPart = ft.dwLowDateTime; + li.HighPart = ft.dwHighDateTime; + t = li.QuadPart;/* In 100-nanosecond intervals */ + t -= EPOCHFILETIME;/* Offset to the Epoch time */ + t /= 10; /* In microseconds */ + tv->tv_sec = (long) (t / 1000000); + tv->tv_usec = (long) (t % 1000000); + } + + if (tz) + { + if (!tzflag) + { + _tzset (); + tzflag++; + } + tz->tz_minuteswest = _timezone / 60; + tz->tz_dsttime = _daylight; + } + + return 0; +} + +#endif /* _WIN32 */ diff --git a/compile b/compile new file mode 100755 index 0000000..a85b723 --- /dev/null +++ b/compile @@ -0,0 +1,347 @@ +#! /bin/sh +# Wrapper for compilers which do not understand '-c -o'. + +scriptversion=2012-10-14.11; # UTC + +# Copyright (C) 1999-2014 Free Software Foundation, Inc. +# Written by Tom Tromey . +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# This file is maintained in Automake, please report +# bugs to or send patches to +# . + +nl=' +' + +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent tools from complaining about whitespace usage. +IFS=" "" $nl" + +file_conv= + +# func_file_conv build_file lazy +# Convert a $build file to $host form and store it in $file +# Currently only supports Windows hosts. If the determined conversion +# type is listed in (the comma separated) LAZY, no conversion will +# take place. +func_file_conv () +{ + file=$1 + case $file in + / | /[!/]*) # absolute file, and not a UNC file + if test -z "$file_conv"; then + # lazily determine how to convert abs files + case `uname -s` in + MINGW*) + file_conv=mingw + ;; + CYGWIN*) + file_conv=cygwin + ;; + *) + file_conv=wine + ;; + esac + fi + case $file_conv/,$2, in + *,$file_conv,*) + ;; + mingw/*) + file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'` + ;; + cygwin/*) + file=`cygpath -m "$file" || echo "$file"` + ;; + wine/*) + file=`winepath -w "$file" || echo "$file"` + ;; + esac + ;; + esac +} + +# func_cl_dashL linkdir +# Make cl look for libraries in LINKDIR +func_cl_dashL () +{ + func_file_conv "$1" + if test -z "$lib_path"; then + lib_path=$file + else + lib_path="$lib_path;$file" + fi + linker_opts="$linker_opts -LIBPATH:$file" +} + +# func_cl_dashl library +# Do a library search-path lookup for cl +func_cl_dashl () +{ + lib=$1 + found=no + save_IFS=$IFS + IFS=';' + for dir in $lib_path $LIB + do + IFS=$save_IFS + if $shared && test -f "$dir/$lib.dll.lib"; then + found=yes + lib=$dir/$lib.dll.lib + break + fi + if test -f "$dir/$lib.lib"; then + found=yes + lib=$dir/$lib.lib + break + fi + if test -f "$dir/lib$lib.a"; then + found=yes + lib=$dir/lib$lib.a + break + fi + done + IFS=$save_IFS + + if test "$found" != yes; then + lib=$lib.lib + fi +} + +# func_cl_wrapper cl arg... +# Adjust compile command to suit cl +func_cl_wrapper () +{ + # Assume a capable shell + lib_path= + shared=: + linker_opts= + for arg + do + if test -n "$eat"; then + eat= + else + case $1 in + -o) + # configure might choose to run compile as 'compile cc -o foo foo.c'. + eat=1 + case $2 in + *.o | *.[oO][bB][jJ]) + func_file_conv "$2" + set x "$@" -Fo"$file" + shift + ;; + *) + func_file_conv "$2" + set x "$@" -Fe"$file" + shift + ;; + esac + ;; + -I) + eat=1 + func_file_conv "$2" mingw + set x "$@" -I"$file" + shift + ;; + -I*) + func_file_conv "${1#-I}" mingw + set x "$@" -I"$file" + shift + ;; + -l) + eat=1 + func_cl_dashl "$2" + set x "$@" "$lib" + shift + ;; + -l*) + func_cl_dashl "${1#-l}" + set x "$@" "$lib" + shift + ;; + -L) + eat=1 + func_cl_dashL "$2" + ;; + -L*) + func_cl_dashL "${1#-L}" + ;; + -static) + shared=false + ;; + -Wl,*) + arg=${1#-Wl,} + save_ifs="$IFS"; IFS=',' + for flag in $arg; do + IFS="$save_ifs" + linker_opts="$linker_opts $flag" + done + IFS="$save_ifs" + ;; + -Xlinker) + eat=1 + linker_opts="$linker_opts $2" + ;; + -*) + set x "$@" "$1" + shift + ;; + *.cc | *.CC | *.cxx | *.CXX | *.[cC]++) + func_file_conv "$1" + set x "$@" -Tp"$file" + shift + ;; + *.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO]) + func_file_conv "$1" mingw + set x "$@" "$file" + shift + ;; + *) + set x "$@" "$1" + shift + ;; + esac + fi + shift + done + if test -n "$linker_opts"; then + linker_opts="-link$linker_opts" + fi + exec "$@" $linker_opts + exit 1 +} + +eat= + +case $1 in + '') + echo "$0: No command. Try '$0 --help' for more information." 1>&2 + exit 1; + ;; + -h | --h*) + cat <<\EOF +Usage: compile [--help] [--version] PROGRAM [ARGS] + +Wrapper for compilers which do not understand '-c -o'. +Remove '-o dest.o' from ARGS, run PROGRAM with the remaining +arguments, and rename the output as expected. + +If you are trying to build a whole package this is not the +right script to run: please start by reading the file 'INSTALL'. + +Report bugs to . +EOF + exit $? + ;; + -v | --v*) + echo "compile $scriptversion" + exit $? + ;; + cl | *[/\\]cl | cl.exe | *[/\\]cl.exe ) + func_cl_wrapper "$@" # Doesn't return... + ;; +esac + +ofile= +cfile= + +for arg +do + if test -n "$eat"; then + eat= + else + case $1 in + -o) + # configure might choose to run compile as 'compile cc -o foo foo.c'. + # So we strip '-o arg' only if arg is an object. + eat=1 + case $2 in + *.o | *.obj) + ofile=$2 + ;; + *) + set x "$@" -o "$2" + shift + ;; + esac + ;; + *.c) + cfile=$1 + set x "$@" "$1" + shift + ;; + *) + set x "$@" "$1" + shift + ;; + esac + fi + shift +done + +if test -z "$ofile" || test -z "$cfile"; then + # If no '-o' option was seen then we might have been invoked from a + # pattern rule where we don't need one. That is ok -- this is a + # normal compilation that the losing compiler can handle. If no + # '.c' file was seen then we are probably linking. That is also + # ok. + exec "$@" +fi + +# Name of file we expect compiler to create. +cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'` + +# Create the lock directory. +# Note: use '[/\\:.-]' here to ensure that we don't use the same name +# that we are using for the .o file. Also, base the name on the expected +# object file name, since that is what matters with a parallel build. +lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d +while true; do + if mkdir "$lockdir" >/dev/null 2>&1; then + break + fi + sleep 1 +done +# FIXME: race condition here if user kills between mkdir and trap. +trap "rmdir '$lockdir'; exit 1" 1 2 15 + +# Run the compile. +"$@" +ret=$? + +if test -f "$cofile"; then + test "$cofile" = "$ofile" || mv "$cofile" "$ofile" +elif test -f "${cofile}bj"; then + test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile" +fi + +rmdir "$lockdir" +exit $ret + +# Local Variables: +# mode: shell-script +# sh-indentation: 2 +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-time-zone: "UTC" +# time-stamp-end: "; # UTC" +# End: diff --git a/config.guess b/config.guess new file mode 100755 index 0000000..dbfb978 --- /dev/null +++ b/config.guess @@ -0,0 +1,1421 @@ +#! /bin/sh +# Attempt to guess a canonical system name. +# Copyright 1992-2015 Free Software Foundation, Inc. + +timestamp='2015-01-01' + +# This file is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, see . +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that +# program. This Exception is an additional permission under section 7 +# of the GNU General Public License, version 3 ("GPLv3"). +# +# Originally written by Per Bothner; maintained since 2000 by Ben Elliston. +# +# You can get the latest version of this script from: +# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD +# +# Please send patches to . + + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] + +Output the configuration name of the system \`$me' is run on. + +Operation modes: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to ." + +version="\ +GNU config.guess ($timestamp) + +Originally written by Per Bothner. +Copyright 1992-2015 Free Software Foundation, Inc. + +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit ;; + --version | -v ) + echo "$version" ; exit ;; + --help | --h* | -h ) + echo "$usage"; exit ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" >&2 + exit 1 ;; + * ) + break ;; + esac +done + +if test $# != 0; then + echo "$me: too many arguments$help" >&2 + exit 1 +fi + +trap 'exit 1' 1 2 15 + +# CC_FOR_BUILD -- compiler used by this script. Note that the use of a +# compiler to aid in system detection is discouraged as it requires +# temporary files to be created and, as you can see below, it is a +# headache to deal with in a portable fashion. + +# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still +# use `HOST_CC' if defined, but it is deprecated. + +# Portable tmp directory creation inspired by the Autoconf team. + +set_cc_for_build=' +trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; +trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; +: ${TMPDIR=/tmp} ; + { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || + { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || + { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || + { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; +dummy=$tmp/dummy ; +tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; +case $CC_FOR_BUILD,$HOST_CC,$CC in + ,,) echo "int x;" > $dummy.c ; + for c in cc gcc c89 c99 ; do + if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then + CC_FOR_BUILD="$c"; break ; + fi ; + done ; + if test x"$CC_FOR_BUILD" = x ; then + CC_FOR_BUILD=no_compiler_found ; + fi + ;; + ,,*) CC_FOR_BUILD=$CC ;; + ,*,*) CC_FOR_BUILD=$HOST_CC ;; +esac ; set_cc_for_build= ;' + +# This is needed to find uname on a Pyramid OSx when run in the BSD universe. +# (ghazi@noc.rutgers.edu 1994-08-24) +if (test -f /.attbin/uname) >/dev/null 2>&1 ; then + PATH=$PATH:/.attbin ; export PATH +fi + +UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown +UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown +UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown +UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown + +case "${UNAME_SYSTEM}" in +Linux|GNU|GNU/*) + # If the system lacks a compiler, then just pick glibc. + # We could probably try harder. + LIBC=gnu + + eval $set_cc_for_build + cat <<-EOF > $dummy.c + #include + #if defined(__UCLIBC__) + LIBC=uclibc + #elif defined(__dietlibc__) + LIBC=dietlibc + #else + LIBC=gnu + #endif + EOF + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC' | sed 's, ,,g'` + ;; +esac + +# Note: order is significant - the case branches are not exclusive. + +case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in + *:NetBSD:*:*) + # NetBSD (nbsd) targets should (where applicable) match one or + # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, + # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently + # switched to ELF, *-*-netbsd* would select the old + # object file format. This provides both forward + # compatibility and a consistent mechanism for selecting the + # object file format. + # + # Note: NetBSD doesn't particularly care about the vendor + # portion of the name. We always set it to "unknown". + sysctl="sysctl -n hw.machine_arch" + UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ + /usr/sbin/$sysctl 2>/dev/null || echo unknown)` + case "${UNAME_MACHINE_ARCH}" in + armeb) machine=armeb-unknown ;; + arm*) machine=arm-unknown ;; + sh3el) machine=shl-unknown ;; + sh3eb) machine=sh-unknown ;; + sh5el) machine=sh5le-unknown ;; + *) machine=${UNAME_MACHINE_ARCH}-unknown ;; + esac + # The Operating System including object format, if it has switched + # to ELF recently, or will in the future. + case "${UNAME_MACHINE_ARCH}" in + arm*|i386|m68k|ns32k|sh3*|sparc|vax) + eval $set_cc_for_build + if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ELF__ + then + # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). + # Return netbsd for either. FIX? + os=netbsd + else + os=netbsdelf + fi + ;; + *) + os=netbsd + ;; + esac + # The OS release + # Debian GNU/NetBSD machines have a different userland, and + # thus, need a distinct triplet. However, they do not need + # kernel version information, so it can be replaced with a + # suitable tag, in the style of linux-gnu. + case "${UNAME_VERSION}" in + Debian*) + release='-gnu' + ;; + *) + release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` + ;; + esac + # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: + # contains redundant information, the shorter form: + # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. + echo "${machine}-${os}${release}" + exit ;; + *:Bitrig:*:*) + UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` + echo ${UNAME_MACHINE_ARCH}-unknown-bitrig${UNAME_RELEASE} + exit ;; + *:OpenBSD:*:*) + UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` + echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} + exit ;; + *:ekkoBSD:*:*) + echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} + exit ;; + *:SolidBSD:*:*) + echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} + exit ;; + macppc:MirBSD:*:*) + echo powerpc-unknown-mirbsd${UNAME_RELEASE} + exit ;; + *:MirBSD:*:*) + echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} + exit ;; + alpha:OSF1:*:*) + case $UNAME_RELEASE in + *4.0) + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` + ;; + *5.*) + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` + ;; + esac + # According to Compaq, /usr/sbin/psrinfo has been available on + # OSF/1 and Tru64 systems produced since 1995. I hope that + # covers most systems running today. This code pipes the CPU + # types through head -n 1, so we only detect the type of CPU 0. + ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` + case "$ALPHA_CPU_TYPE" in + "EV4 (21064)") + UNAME_MACHINE="alpha" ;; + "EV4.5 (21064)") + UNAME_MACHINE="alpha" ;; + "LCA4 (21066/21068)") + UNAME_MACHINE="alpha" ;; + "EV5 (21164)") + UNAME_MACHINE="alphaev5" ;; + "EV5.6 (21164A)") + UNAME_MACHINE="alphaev56" ;; + "EV5.6 (21164PC)") + UNAME_MACHINE="alphapca56" ;; + "EV5.7 (21164PC)") + UNAME_MACHINE="alphapca57" ;; + "EV6 (21264)") + UNAME_MACHINE="alphaev6" ;; + "EV6.7 (21264A)") + UNAME_MACHINE="alphaev67" ;; + "EV6.8CB (21264C)") + UNAME_MACHINE="alphaev68" ;; + "EV6.8AL (21264B)") + UNAME_MACHINE="alphaev68" ;; + "EV6.8CX (21264D)") + UNAME_MACHINE="alphaev68" ;; + "EV6.9A (21264/EV69A)") + UNAME_MACHINE="alphaev69" ;; + "EV7 (21364)") + UNAME_MACHINE="alphaev7" ;; + "EV7.9 (21364A)") + UNAME_MACHINE="alphaev79" ;; + esac + # A Pn.n version is a patched version. + # A Vn.n version is a released version. + # A Tn.n version is a released field test version. + # A Xn.n version is an unreleased experimental baselevel. + # 1.2 uses "1.2" for uname -r. + echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + # Reset EXIT trap before exiting to avoid spurious non-zero exit code. + exitcode=$? + trap '' 0 + exit $exitcode ;; + Alpha\ *:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # Should we change UNAME_MACHINE based on the output of uname instead + # of the specific Alpha model? + echo alpha-pc-interix + exit ;; + 21064:Windows_NT:50:3) + echo alpha-dec-winnt3.5 + exit ;; + Amiga*:UNIX_System_V:4.0:*) + echo m68k-unknown-sysv4 + exit ;; + *:[Aa]miga[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-amigaos + exit ;; + *:[Mm]orph[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-morphos + exit ;; + *:OS/390:*:*) + echo i370-ibm-openedition + exit ;; + *:z/VM:*:*) + echo s390-ibm-zvmoe + exit ;; + *:OS400:*:*) + echo powerpc-ibm-os400 + exit ;; + arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) + echo arm-acorn-riscix${UNAME_RELEASE} + exit ;; + arm*:riscos:*:*|arm*:RISCOS:*:*) + echo arm-unknown-riscos + exit ;; + SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) + echo hppa1.1-hitachi-hiuxmpp + exit ;; + Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) + # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. + if test "`(/bin/universe) 2>/dev/null`" = att ; then + echo pyramid-pyramid-sysv3 + else + echo pyramid-pyramid-bsd + fi + exit ;; + NILE*:*:*:dcosx) + echo pyramid-pyramid-svr4 + exit ;; + DRS?6000:unix:4.0:6*) + echo sparc-icl-nx6 + exit ;; + DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) + case `/usr/bin/uname -p` in + sparc) echo sparc-icl-nx7; exit ;; + esac ;; + s390x:SunOS:*:*) + echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4H:SunOS:5.*:*) + echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) + echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) + echo i386-pc-auroraux${UNAME_RELEASE} + exit ;; + i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) + eval $set_cc_for_build + SUN_ARCH="i386" + # If there is a compiler, see if it is configured for 64-bit objects. + # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. + # This test works for both compilers. + if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then + if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ + (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_64BIT_ARCH >/dev/null + then + SUN_ARCH="x86_64" + fi + fi + echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:6*:*) + # According to config.sub, this is the proper way to canonicalize + # SunOS6. Hard to guess exactly what SunOS6 will be like, but + # it's likely to be more like Solaris than SunOS4. + echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:*:*) + case "`/usr/bin/arch -k`" in + Series*|S4*) + UNAME_RELEASE=`uname -v` + ;; + esac + # Japanese Language versions have a version number like `4.1.3-JL'. + echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` + exit ;; + sun3*:SunOS:*:*) + echo m68k-sun-sunos${UNAME_RELEASE} + exit ;; + sun*:*:4.2BSD:*) + UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` + test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 + case "`/bin/arch`" in + sun3) + echo m68k-sun-sunos${UNAME_RELEASE} + ;; + sun4) + echo sparc-sun-sunos${UNAME_RELEASE} + ;; + esac + exit ;; + aushp:SunOS:*:*) + echo sparc-auspex-sunos${UNAME_RELEASE} + exit ;; + # The situation for MiNT is a little confusing. The machine name + # can be virtually everything (everything which is not + # "atarist" or "atariste" at least should have a processor + # > m68000). The system name ranges from "MiNT" over "FreeMiNT" + # to the lowercase version "mint" (or "freemint"). Finally + # the system name "TOS" denotes a system which is actually not + # MiNT. But MiNT is downward compatible to TOS, so this should + # be no problem. + atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) + echo m68k-milan-mint${UNAME_RELEASE} + exit ;; + hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) + echo m68k-hades-mint${UNAME_RELEASE} + exit ;; + *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) + echo m68k-unknown-mint${UNAME_RELEASE} + exit ;; + m68k:machten:*:*) + echo m68k-apple-machten${UNAME_RELEASE} + exit ;; + powerpc:machten:*:*) + echo powerpc-apple-machten${UNAME_RELEASE} + exit ;; + RISC*:Mach:*:*) + echo mips-dec-mach_bsd4.3 + exit ;; + RISC*:ULTRIX:*:*) + echo mips-dec-ultrix${UNAME_RELEASE} + exit ;; + VAX*:ULTRIX*:*:*) + echo vax-dec-ultrix${UNAME_RELEASE} + exit ;; + 2020:CLIX:*:* | 2430:CLIX:*:*) + echo clipper-intergraph-clix${UNAME_RELEASE} + exit ;; + mips:*:*:UMIPS | mips:*:*:RISCos) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c +#ifdef __cplusplus +#include /* for printf() prototype */ + int main (int argc, char *argv[]) { +#else + int main (argc, argv) int argc; char *argv[]; { +#endif + #if defined (host_mips) && defined (MIPSEB) + #if defined (SYSTYPE_SYSV) + printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_SVR4) + printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) + printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); + #endif + #endif + exit (-1); + } +EOF + $CC_FOR_BUILD -o $dummy $dummy.c && + dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && + SYSTEM_NAME=`$dummy $dummyarg` && + { echo "$SYSTEM_NAME"; exit; } + echo mips-mips-riscos${UNAME_RELEASE} + exit ;; + Motorola:PowerMAX_OS:*:*) + echo powerpc-motorola-powermax + exit ;; + Motorola:*:4.3:PL8-*) + echo powerpc-harris-powermax + exit ;; + Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) + echo powerpc-harris-powermax + exit ;; + Night_Hawk:Power_UNIX:*:*) + echo powerpc-harris-powerunix + exit ;; + m88k:CX/UX:7*:*) + echo m88k-harris-cxux7 + exit ;; + m88k:*:4*:R4*) + echo m88k-motorola-sysv4 + exit ;; + m88k:*:3*:R3*) + echo m88k-motorola-sysv3 + exit ;; + AViiON:dgux:*:*) + # DG/UX returns AViiON for all architectures + UNAME_PROCESSOR=`/usr/bin/uname -p` + if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] + then + if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ + [ ${TARGET_BINARY_INTERFACE}x = x ] + then + echo m88k-dg-dgux${UNAME_RELEASE} + else + echo m88k-dg-dguxbcs${UNAME_RELEASE} + fi + else + echo i586-dg-dgux${UNAME_RELEASE} + fi + exit ;; + M88*:DolphinOS:*:*) # DolphinOS (SVR3) + echo m88k-dolphin-sysv3 + exit ;; + M88*:*:R3*:*) + # Delta 88k system running SVR3 + echo m88k-motorola-sysv3 + exit ;; + XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) + echo m88k-tektronix-sysv3 + exit ;; + Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) + echo m68k-tektronix-bsd + exit ;; + *:IRIX*:*:*) + echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` + exit ;; + ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. + echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id + exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' + i*86:AIX:*:*) + echo i386-ibm-aix + exit ;; + ia64:AIX:*:*) + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} + exit ;; + *:AIX:2:3) + if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + + main() + { + if (!__power_pc()) + exit(1); + puts("powerpc-ibm-aix3.2.5"); + exit(0); + } +EOF + if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` + then + echo "$SYSTEM_NAME" + else + echo rs6000-ibm-aix3.2.5 + fi + elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then + echo rs6000-ibm-aix3.2.4 + else + echo rs6000-ibm-aix3.2 + fi + exit ;; + *:AIX:*:[4567]) + IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` + if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then + IBM_ARCH=rs6000 + else + IBM_ARCH=powerpc + fi + if [ -x /usr/bin/lslpp ] ; then + IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc | + awk -F: '{ print $3 }' | sed s/[0-9]*$/0/` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${IBM_ARCH}-ibm-aix${IBM_REV} + exit ;; + *:AIX:*:*) + echo rs6000-ibm-aix + exit ;; + ibmrt:4.4BSD:*|romp-ibm:BSD:*) + echo romp-ibm-bsd4.4 + exit ;; + ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and + echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to + exit ;; # report: romp-ibm BSD 4.3 + *:BOSX:*:*) + echo rs6000-bull-bosx + exit ;; + DPX/2?00:B.O.S.:*:*) + echo m68k-bull-sysv3 + exit ;; + 9000/[34]??:4.3bsd:1.*:*) + echo m68k-hp-bsd + exit ;; + hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) + echo m68k-hp-bsd4.4 + exit ;; + 9000/[34678]??:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + case "${UNAME_MACHINE}" in + 9000/31? ) HP_ARCH=m68000 ;; + 9000/[34]?? ) HP_ARCH=m68k ;; + 9000/[678][0-9][0-9]) + if [ -x /usr/bin/getconf ]; then + sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` + sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` + case "${sc_cpu_version}" in + 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 + 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 + 532) # CPU_PA_RISC2_0 + case "${sc_kernel_bits}" in + 32) HP_ARCH="hppa2.0n" ;; + 64) HP_ARCH="hppa2.0w" ;; + '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 + esac ;; + esac + fi + if [ "${HP_ARCH}" = "" ]; then + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + + #define _HPUX_SOURCE + #include + #include + + int main () + { + #if defined(_SC_KERNEL_BITS) + long bits = sysconf(_SC_KERNEL_BITS); + #endif + long cpu = sysconf (_SC_CPU_VERSION); + + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1"); break; + case CPU_PA_RISC2_0: + #if defined(_SC_KERNEL_BITS) + switch (bits) + { + case 64: puts ("hppa2.0w"); break; + case 32: puts ("hppa2.0n"); break; + default: puts ("hppa2.0"); break; + } break; + #else /* !defined(_SC_KERNEL_BITS) */ + puts ("hppa2.0"); break; + #endif + default: puts ("hppa1.0"); break; + } + exit (0); + } +EOF + (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` + test -z "$HP_ARCH" && HP_ARCH=hppa + fi ;; + esac + if [ ${HP_ARCH} = "hppa2.0w" ] + then + eval $set_cc_for_build + + # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating + # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler + # generating 64-bit code. GNU and HP use different nomenclature: + # + # $ CC_FOR_BUILD=cc ./config.guess + # => hppa2.0w-hp-hpux11.23 + # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess + # => hppa64-hp-hpux11.23 + + if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | + grep -q __LP64__ + then + HP_ARCH="hppa2.0w" + else + HP_ARCH="hppa64" + fi + fi + echo ${HP_ARCH}-hp-hpux${HPUX_REV} + exit ;; + ia64:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + echo ia64-hp-hpux${HPUX_REV} + exit ;; + 3050*:HI-UX:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + int + main () + { + long cpu = sysconf (_SC_CPU_VERSION); + /* The order matters, because CPU_IS_HP_MC68K erroneously returns + true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct + results, however. */ + if (CPU_IS_PA_RISC (cpu)) + { + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; + case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; + default: puts ("hppa-hitachi-hiuxwe2"); break; + } + } + else if (CPU_IS_HP_MC68K (cpu)) + puts ("m68k-hitachi-hiuxwe2"); + else puts ("unknown-hitachi-hiuxwe2"); + exit (0); + } +EOF + $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && + { echo "$SYSTEM_NAME"; exit; } + echo unknown-hitachi-hiuxwe2 + exit ;; + 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) + echo hppa1.1-hp-bsd + exit ;; + 9000/8??:4.3bsd:*:*) + echo hppa1.0-hp-bsd + exit ;; + *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) + echo hppa1.0-hp-mpeix + exit ;; + hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) + echo hppa1.1-hp-osf + exit ;; + hp8??:OSF1:*:*) + echo hppa1.0-hp-osf + exit ;; + i*86:OSF1:*:*) + if [ -x /usr/sbin/sysversion ] ; then + echo ${UNAME_MACHINE}-unknown-osf1mk + else + echo ${UNAME_MACHINE}-unknown-osf1 + fi + exit ;; + parisc*:Lites*:*:*) + echo hppa1.1-hp-lites + exit ;; + C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) + echo c1-convex-bsd + exit ;; + C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit ;; + C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) + echo c34-convex-bsd + exit ;; + C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) + echo c38-convex-bsd + exit ;; + C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) + echo c4-convex-bsd + exit ;; + CRAY*Y-MP:*:*:*) + echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*[A-Z]90:*:*:*) + echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ + | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ + -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ + -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*TS:*:*:*) + echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*T3E:*:*:*) + echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*SV1:*:*:*) + echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + *:UNICOS/mp:*:*) + echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) + FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` + echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit ;; + 5000:UNIX_System_V:4.*:*) + FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` + echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit ;; + i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) + echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} + exit ;; + sparc*:BSD/OS:*:*) + echo sparc-unknown-bsdi${UNAME_RELEASE} + exit ;; + *:BSD/OS:*:*) + echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} + exit ;; + *:FreeBSD:*:*) + UNAME_PROCESSOR=`/usr/bin/uname -p` + case ${UNAME_PROCESSOR} in + amd64) + echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + *) + echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + esac + exit ;; + i*:CYGWIN*:*) + echo ${UNAME_MACHINE}-pc-cygwin + exit ;; + *:MINGW64*:*) + echo ${UNAME_MACHINE}-pc-mingw64 + exit ;; + *:MINGW*:*) + echo ${UNAME_MACHINE}-pc-mingw32 + exit ;; + *:MSYS*:*) + echo ${UNAME_MACHINE}-pc-msys + exit ;; + i*:windows32*:*) + # uname -m includes "-pc" on this system. + echo ${UNAME_MACHINE}-mingw32 + exit ;; + i*:PW*:*) + echo ${UNAME_MACHINE}-pc-pw32 + exit ;; + *:Interix*:*) + case ${UNAME_MACHINE} in + x86) + echo i586-pc-interix${UNAME_RELEASE} + exit ;; + authenticamd | genuineintel | EM64T) + echo x86_64-unknown-interix${UNAME_RELEASE} + exit ;; + IA64) + echo ia64-unknown-interix${UNAME_RELEASE} + exit ;; + esac ;; + [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) + echo i${UNAME_MACHINE}-pc-mks + exit ;; + 8664:Windows_NT:*) + echo x86_64-pc-mks + exit ;; + i*:Windows_NT*:* | Pentium*:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we + # UNAME_MACHINE based on the output of uname instead of i386? + echo i586-pc-interix + exit ;; + i*:UWIN*:*) + echo ${UNAME_MACHINE}-pc-uwin + exit ;; + amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) + echo x86_64-unknown-cygwin + exit ;; + p*:CYGWIN*:*) + echo powerpcle-unknown-cygwin + exit ;; + prep*:SunOS:5.*:*) + echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + *:GNU:*:*) + # the GNU system + echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-${LIBC}`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` + exit ;; + *:GNU/*:*:*) + # other systems with GNU libc and userland + echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-${LIBC} + exit ;; + i*86:Minix:*:*) + echo ${UNAME_MACHINE}-pc-minix + exit ;; + aarch64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + aarch64_be:Linux:*:*) + UNAME_MACHINE=aarch64_be + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + alpha:Linux:*:*) + case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in + EV5) UNAME_MACHINE=alphaev5 ;; + EV56) UNAME_MACHINE=alphaev56 ;; + PCA56) UNAME_MACHINE=alphapca56 ;; + PCA57) UNAME_MACHINE=alphapca56 ;; + EV6) UNAME_MACHINE=alphaev6 ;; + EV67) UNAME_MACHINE=alphaev67 ;; + EV68*) UNAME_MACHINE=alphaev68 ;; + esac + objdump --private-headers /bin/sh | grep -q ld.so.1 + if test "$?" = 0 ; then LIBC="gnulibc1" ; fi + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + arc:Linux:*:* | arceb:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + arm*:Linux:*:*) + eval $set_cc_for_build + if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ARM_EABI__ + then + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + else + if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ARM_PCS_VFP + then + echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabi + else + echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabihf + fi + fi + exit ;; + avr32*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + cris:Linux:*:*) + echo ${UNAME_MACHINE}-axis-linux-${LIBC} + exit ;; + crisv32:Linux:*:*) + echo ${UNAME_MACHINE}-axis-linux-${LIBC} + exit ;; + frv:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + hexagon:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + i*86:Linux:*:*) + echo ${UNAME_MACHINE}-pc-linux-${LIBC} + exit ;; + ia64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + m32r*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + m68*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + mips:Linux:*:* | mips64:Linux:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #undef CPU + #undef ${UNAME_MACHINE} + #undef ${UNAME_MACHINE}el + #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) + CPU=${UNAME_MACHINE}el + #else + #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) + CPU=${UNAME_MACHINE} + #else + CPU= + #endif + #endif +EOF + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` + test x"${CPU}" != x && { echo "${CPU}-unknown-linux-${LIBC}"; exit; } + ;; + openrisc*:Linux:*:*) + echo or1k-unknown-linux-${LIBC} + exit ;; + or32:Linux:*:* | or1k*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + padre:Linux:*:*) + echo sparc-unknown-linux-${LIBC} + exit ;; + parisc64:Linux:*:* | hppa64:Linux:*:*) + echo hppa64-unknown-linux-${LIBC} + exit ;; + parisc:Linux:*:* | hppa:Linux:*:*) + # Look for CPU level + case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in + PA7*) echo hppa1.1-unknown-linux-${LIBC} ;; + PA8*) echo hppa2.0-unknown-linux-${LIBC} ;; + *) echo hppa-unknown-linux-${LIBC} ;; + esac + exit ;; + ppc64:Linux:*:*) + echo powerpc64-unknown-linux-${LIBC} + exit ;; + ppc:Linux:*:*) + echo powerpc-unknown-linux-${LIBC} + exit ;; + ppc64le:Linux:*:*) + echo powerpc64le-unknown-linux-${LIBC} + exit ;; + ppcle:Linux:*:*) + echo powerpcle-unknown-linux-${LIBC} + exit ;; + s390:Linux:*:* | s390x:Linux:*:*) + echo ${UNAME_MACHINE}-ibm-linux-${LIBC} + exit ;; + sh64*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + sh*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + sparc:Linux:*:* | sparc64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + tile*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + vax:Linux:*:*) + echo ${UNAME_MACHINE}-dec-linux-${LIBC} + exit ;; + x86_64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + xtensa*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + i*86:DYNIX/ptx:4*:*) + # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. + # earlier versions are messed up and put the nodename in both + # sysname and nodename. + echo i386-sequent-sysv4 + exit ;; + i*86:UNIX_SV:4.2MP:2.*) + # Unixware is an offshoot of SVR4, but it has its own version + # number series starting with 2... + # I am not positive that other SVR4 systems won't match this, + # I just have to hope. -- rms. + # Use sysv4.2uw... so that sysv4* matches it. + echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} + exit ;; + i*86:OS/2:*:*) + # If we were able to find `uname', then EMX Unix compatibility + # is probably installed. + echo ${UNAME_MACHINE}-pc-os2-emx + exit ;; + i*86:XTS-300:*:STOP) + echo ${UNAME_MACHINE}-unknown-stop + exit ;; + i*86:atheos:*:*) + echo ${UNAME_MACHINE}-unknown-atheos + exit ;; + i*86:syllable:*:*) + echo ${UNAME_MACHINE}-pc-syllable + exit ;; + i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) + echo i386-unknown-lynxos${UNAME_RELEASE} + exit ;; + i*86:*DOS:*:*) + echo ${UNAME_MACHINE}-pc-msdosdjgpp + exit ;; + i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) + UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` + if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then + echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} + else + echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} + fi + exit ;; + i*86:*:5:[678]*) + # UnixWare 7.x, OpenUNIX and OpenServer 6. + case `/bin/uname -X | grep "^Machine"` in + *486*) UNAME_MACHINE=i486 ;; + *Pentium) UNAME_MACHINE=i586 ;; + *Pent*|*Celeron) UNAME_MACHINE=i686 ;; + esac + echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} + exit ;; + i*86:*:3.2:*) + if test -f /usr/options/cb.name; then + UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then + UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` + (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 + (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ + && UNAME_MACHINE=i586 + (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ + && UNAME_MACHINE=i686 + (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ + && UNAME_MACHINE=i686 + echo ${UNAME_MACHINE}-pc-sco$UNAME_REL + else + echo ${UNAME_MACHINE}-pc-sysv32 + fi + exit ;; + pc:*:*:*) + # Left here for compatibility: + # uname -m prints for DJGPP always 'pc', but it prints nothing about + # the processor, so we play safe by assuming i586. + # Note: whatever this is, it MUST be the same as what config.sub + # prints for the "djgpp" host, or else GDB configury will decide that + # this is a cross-build. + echo i586-pc-msdosdjgpp + exit ;; + Intel:Mach:3*:*) + echo i386-pc-mach3 + exit ;; + paragon:*:*:*) + echo i860-intel-osf1 + exit ;; + i860:*:4.*:*) # i860-SVR4 + if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then + echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 + else # Add other i860-SVR4 vendors below as they are discovered. + echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 + fi + exit ;; + mini*:CTIX:SYS*5:*) + # "miniframe" + echo m68010-convergent-sysv + exit ;; + mc68k:UNIX:SYSTEM5:3.51m) + echo m68k-convergent-sysv + exit ;; + M680?0:D-NIX:5.3:*) + echo m68k-diab-dnix + exit ;; + M68*:*:R3V[5678]*:*) + test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; + 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) + OS_REL='' + test -r /etc/.relid \ + && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; + 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4; exit; } ;; + NCR*:*:4.2:* | MPRAS*:*:4.2:*) + OS_REL='.3' + test -r /etc/.relid \ + && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; + m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) + echo m68k-unknown-lynxos${UNAME_RELEASE} + exit ;; + mc68030:UNIX_System_V:4.*:*) + echo m68k-atari-sysv4 + exit ;; + TSUNAMI:LynxOS:2.*:*) + echo sparc-unknown-lynxos${UNAME_RELEASE} + exit ;; + rs6000:LynxOS:2.*:*) + echo rs6000-unknown-lynxos${UNAME_RELEASE} + exit ;; + PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) + echo powerpc-unknown-lynxos${UNAME_RELEASE} + exit ;; + SM[BE]S:UNIX_SV:*:*) + echo mips-dde-sysv${UNAME_RELEASE} + exit ;; + RM*:ReliantUNIX-*:*:*) + echo mips-sni-sysv4 + exit ;; + RM*:SINIX-*:*:*) + echo mips-sni-sysv4 + exit ;; + *:SINIX-*:*:*) + if uname -p 2>/dev/null >/dev/null ; then + UNAME_MACHINE=`(uname -p) 2>/dev/null` + echo ${UNAME_MACHINE}-sni-sysv4 + else + echo ns32k-sni-sysv + fi + exit ;; + PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort + # says + echo i586-unisys-sysv4 + exit ;; + *:UNIX_System_V:4*:FTX*) + # From Gerald Hewes . + # How about differentiating between stratus architectures? -djm + echo hppa1.1-stratus-sysv4 + exit ;; + *:*:*:FTX*) + # From seanf@swdc.stratus.com. + echo i860-stratus-sysv4 + exit ;; + i*86:VOS:*:*) + # From Paul.Green@stratus.com. + echo ${UNAME_MACHINE}-stratus-vos + exit ;; + *:VOS:*:*) + # From Paul.Green@stratus.com. + echo hppa1.1-stratus-vos + exit ;; + mc68*:A/UX:*:*) + echo m68k-apple-aux${UNAME_RELEASE} + exit ;; + news*:NEWS-OS:6*:*) + echo mips-sony-newsos6 + exit ;; + R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) + if [ -d /usr/nec ]; then + echo mips-nec-sysv${UNAME_RELEASE} + else + echo mips-unknown-sysv${UNAME_RELEASE} + fi + exit ;; + BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. + echo powerpc-be-beos + exit ;; + BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. + echo powerpc-apple-beos + exit ;; + BePC:BeOS:*:*) # BeOS running on Intel PC compatible. + echo i586-pc-beos + exit ;; + BePC:Haiku:*:*) # Haiku running on Intel PC compatible. + echo i586-pc-haiku + exit ;; + x86_64:Haiku:*:*) + echo x86_64-unknown-haiku + exit ;; + SX-4:SUPER-UX:*:*) + echo sx4-nec-superux${UNAME_RELEASE} + exit ;; + SX-5:SUPER-UX:*:*) + echo sx5-nec-superux${UNAME_RELEASE} + exit ;; + SX-6:SUPER-UX:*:*) + echo sx6-nec-superux${UNAME_RELEASE} + exit ;; + SX-7:SUPER-UX:*:*) + echo sx7-nec-superux${UNAME_RELEASE} + exit ;; + SX-8:SUPER-UX:*:*) + echo sx8-nec-superux${UNAME_RELEASE} + exit ;; + SX-8R:SUPER-UX:*:*) + echo sx8r-nec-superux${UNAME_RELEASE} + exit ;; + Power*:Rhapsody:*:*) + echo powerpc-apple-rhapsody${UNAME_RELEASE} + exit ;; + *:Rhapsody:*:*) + echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} + exit ;; + *:Darwin:*:*) + UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown + eval $set_cc_for_build + if test "$UNAME_PROCESSOR" = unknown ; then + UNAME_PROCESSOR=powerpc + fi + if test `echo "$UNAME_RELEASE" | sed -e 's/\..*//'` -le 10 ; then + if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then + if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ + (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_64BIT_ARCH >/dev/null + then + case $UNAME_PROCESSOR in + i386) UNAME_PROCESSOR=x86_64 ;; + powerpc) UNAME_PROCESSOR=powerpc64 ;; + esac + fi + fi + elif test "$UNAME_PROCESSOR" = i386 ; then + # Avoid executing cc on OS X 10.9, as it ships with a stub + # that puts up a graphical alert prompting to install + # developer tools. Any system running Mac OS X 10.7 or + # later (Darwin 11 and later) is required to have a 64-bit + # processor. This is not true of the ARM version of Darwin + # that Apple uses in portable devices. + UNAME_PROCESSOR=x86_64 + fi + echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} + exit ;; + *:procnto*:*:* | *:QNX:[0123456789]*:*) + UNAME_PROCESSOR=`uname -p` + if test "$UNAME_PROCESSOR" = "x86"; then + UNAME_PROCESSOR=i386 + UNAME_MACHINE=pc + fi + echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} + exit ;; + *:QNX:*:4*) + echo i386-pc-qnx + exit ;; + NEO-?:NONSTOP_KERNEL:*:*) + echo neo-tandem-nsk${UNAME_RELEASE} + exit ;; + NSE-*:NONSTOP_KERNEL:*:*) + echo nse-tandem-nsk${UNAME_RELEASE} + exit ;; + NSR-?:NONSTOP_KERNEL:*:*) + echo nsr-tandem-nsk${UNAME_RELEASE} + exit ;; + *:NonStop-UX:*:*) + echo mips-compaq-nonstopux + exit ;; + BS2000:POSIX*:*:*) + echo bs2000-siemens-sysv + exit ;; + DS/*:UNIX_System_V:*:*) + echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} + exit ;; + *:Plan9:*:*) + # "uname -m" is not consistent, so use $cputype instead. 386 + # is converted to i386 for consistency with other x86 + # operating systems. + if test "$cputype" = "386"; then + UNAME_MACHINE=i386 + else + UNAME_MACHINE="$cputype" + fi + echo ${UNAME_MACHINE}-unknown-plan9 + exit ;; + *:TOPS-10:*:*) + echo pdp10-unknown-tops10 + exit ;; + *:TENEX:*:*) + echo pdp10-unknown-tenex + exit ;; + KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) + echo pdp10-dec-tops20 + exit ;; + XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) + echo pdp10-xkl-tops20 + exit ;; + *:TOPS-20:*:*) + echo pdp10-unknown-tops20 + exit ;; + *:ITS:*:*) + echo pdp10-unknown-its + exit ;; + SEI:*:*:SEIUX) + echo mips-sei-seiux${UNAME_RELEASE} + exit ;; + *:DragonFly:*:*) + echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` + exit ;; + *:*VMS:*:*) + UNAME_MACHINE=`(uname -p) 2>/dev/null` + case "${UNAME_MACHINE}" in + A*) echo alpha-dec-vms ; exit ;; + I*) echo ia64-dec-vms ; exit ;; + V*) echo vax-dec-vms ; exit ;; + esac ;; + *:XENIX:*:SysV) + echo i386-pc-xenix + exit ;; + i*86:skyos:*:*) + echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' + exit ;; + i*86:rdos:*:*) + echo ${UNAME_MACHINE}-pc-rdos + exit ;; + i*86:AROS:*:*) + echo ${UNAME_MACHINE}-pc-aros + exit ;; + x86_64:VMkernel:*:*) + echo ${UNAME_MACHINE}-unknown-esx + exit ;; +esac + +cat >&2 < in order to provide the needed +information to handle your system. + +config.guess timestamp = $timestamp + +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null` + +hostinfo = `(hostinfo) 2>/dev/null` +/bin/universe = `(/bin/universe) 2>/dev/null` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` +/bin/arch = `(/bin/arch) 2>/dev/null` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` + +UNAME_MACHINE = ${UNAME_MACHINE} +UNAME_RELEASE = ${UNAME_RELEASE} +UNAME_SYSTEM = ${UNAME_SYSTEM} +UNAME_VERSION = ${UNAME_VERSION} +EOF + +exit 1 + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/config.h.in b/config.h.in new file mode 100644 index 0000000..26d7a27 --- /dev/null +++ b/config.h.in @@ -0,0 +1,124 @@ +/* config.h.in. Generated from configure.ac by autoheader. */ + +/* Define to 1 if you are compiling for PowerPC. */ +#undef ARCH_PPC + +/* Define to 1 if you are compiling for PowerPC64. */ +#undef ARCH_PPC64 + +/* Define to 1 if you are compiling for ix86. */ +#undef ARCH_X86 + +/* Define to 1 if you are compiling for amd64. */ +#undef ARCH_X86_64 + +/* separator between directories in BABL_PATH */ +#undef BABL_DIR_SEPARATOR + +/* Define if the C pre-processor supports GNU style variadic macros */ +#undef BABL_GNUC_VARIADIC_MACROS + +/* Define if the C++ pre-processor supports variadic macros */ +#undef BABL_ISO_CXX_VARIADIC_MACROS + +/* Define if the C pre-processor supports variadic macros */ +#undef BABL_ISO_VARIADIC_MACROS + +/* name of BABL library */ +#undef BABL_LIBRARY + +/* separator between paths in BABL_PATH */ +#undef BABL_PATH_SEPARATOR + +/* Define to 1 if this is an unstable version of BABL */ +#undef BABL_UNSTABLE + +/* Define to 1 if you have the header file. */ +#undef HAVE_ALTIVEC_H + +/* Define to 1 if the altivec runtime test should use a sysctl. */ +#undef HAVE_ALTIVEC_SYSCTL + +/* Define to 1 if you have the header file. */ +#undef HAVE_DLFCN_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_DL_H + +/* Define to 1 if you have the `gettimeofday' function. */ +#undef HAVE_GETTIMEOFDAY + +/* Define to 1 if you have the header file. */ +#undef HAVE_INTTYPES_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_MEMORY_H + +/* Define to 1 if you have the `rint' function. */ +#undef HAVE_RINT + +/* Define to 1 if you have the header file. */ +#undef HAVE_STDINT_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STDLIB_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STRINGS_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STRING_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_STAT_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_TYPES_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_UNISTD_H + +/* Define to the sub-directory where libtool stores uninstalled libraries. */ +#undef LT_OBJDIR + +/* Define to the address where bug reports for this package should be sent. */ +#undef PACKAGE_BUGREPORT + +/* Define to the full name of this package. */ +#undef PACKAGE_NAME + +/* Define to the full name and version of this package. */ +#undef PACKAGE_STRING + +/* Define to the one symbol short name of this package. */ +#undef PACKAGE_TARNAME + +/* Define to the home page for this package. */ +#undef PACKAGE_URL + +/* Define to the version of this package. */ +#undef PACKAGE_VERSION + +/* File extension for shared libraries */ +#undef SHREXT + +/* Define to 1 if you have the ANSI C header files. */ +#undef STDC_HEADERS + +/* Define to 1 if AltiVec support is available. */ +#undef USE_ALTIVEC + +/* Define to 1 if f16c intrinsics are available. */ +#undef USE_F16C + +/* Define to 1 if MMX assembly is available. */ +#undef USE_MMX + +/* Define to 1 if SSE assembly is available. */ +#undef USE_SSE + +/* Define to 1 if SSE2 assembly is available. */ +#undef USE_SSE2 + +/* Define to 1 if SSE4_1 assembly is available. */ +#undef USE_SSE4_1 diff --git a/config.sub b/config.sub new file mode 100755 index 0000000..6467c95 --- /dev/null +++ b/config.sub @@ -0,0 +1,1807 @@ +#! /bin/sh +# Configuration validation subroutine script. +# Copyright 1992-2015 Free Software Foundation, Inc. + +timestamp='2015-01-01' + +# This file is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, see . +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that +# program. This Exception is an additional permission under section 7 +# of the GNU General Public License, version 3 ("GPLv3"). + + +# Please send patches to . +# +# Configuration subroutine to validate and canonicalize a configuration type. +# Supply the specified configuration type as an argument. +# If it is invalid, we print an error message on stderr and exit with code 1. +# Otherwise, we print the canonical config type on stdout and succeed. + +# You can get the latest version of this script from: +# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD + +# This file is supposed to be the same for all GNU packages +# and recognize all the CPU types, system types and aliases +# that are meaningful with *any* GNU software. +# Each package is responsible for reporting which valid configurations +# it does not support. The user should be able to distinguish +# a failure to support a valid configuration from a meaningless +# configuration. + +# The goal of this file is to map all the various variations of a given +# machine specification into a single specification in the form: +# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM +# or in some cases, the newer four-part form: +# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM +# It is wrong to echo any other type of specification. + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] CPU-MFR-OPSYS + $0 [OPTION] ALIAS + +Canonicalize a configuration name. + +Operation modes: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to ." + +version="\ +GNU config.sub ($timestamp) + +Copyright 1992-2015 Free Software Foundation, Inc. + +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit ;; + --version | -v ) + echo "$version" ; exit ;; + --help | --h* | -h ) + echo "$usage"; exit ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" + exit 1 ;; + + *local*) + # First pass through any local machine types. + echo $1 + exit ;; + + * ) + break ;; + esac +done + +case $# in + 0) echo "$me: missing argument$help" >&2 + exit 1;; + 1) ;; + *) echo "$me: too many arguments$help" >&2 + exit 1;; +esac + +# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). +# Here we must recognize all the valid KERNEL-OS combinations. +maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` +case $maybe_os in + nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ + linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ + knetbsd*-gnu* | netbsd*-gnu* | \ + kopensolaris*-gnu* | \ + storm-chaos* | os2-emx* | rtmk-nova*) + os=-$maybe_os + basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` + ;; + android-linux) + os=-linux-android + basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown + ;; + *) + basic_machine=`echo $1 | sed 's/-[^-]*$//'` + if [ $basic_machine != $1 ] + then os=`echo $1 | sed 's/.*-/-/'` + else os=; fi + ;; +esac + +### Let's recognize common machines as not being operating systems so +### that things like config.sub decstation-3100 work. We also +### recognize some manufacturers as not being operating systems, so we +### can provide default operating systems below. +case $os in + -sun*os*) + # Prevent following clause from handling this invalid input. + ;; + -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ + -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ + -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ + -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ + -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ + -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ + -apple | -axis | -knuth | -cray | -microblaze*) + os= + basic_machine=$1 + ;; + -bluegene*) + os=-cnk + ;; + -sim | -cisco | -oki | -wec | -winbond) + os= + basic_machine=$1 + ;; + -scout) + ;; + -wrs) + os=-vxworks + basic_machine=$1 + ;; + -chorusos*) + os=-chorusos + basic_machine=$1 + ;; + -chorusrdb) + os=-chorusrdb + basic_machine=$1 + ;; + -hiux*) + os=-hiuxwe2 + ;; + -sco6) + os=-sco5v6 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco5) + os=-sco3.2v5 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco4) + os=-sco3.2v4 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2.[4-9]*) + os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2v[4-9]*) + # Don't forget version if it is 3.2v4 or newer. + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco5v6*) + # Don't forget version if it is 3.2v4 or newer. + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco*) + os=-sco3.2v2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -udk*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -isc) + os=-isc2.2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -clix*) + basic_machine=clipper-intergraph + ;; + -isc*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -lynx*178) + os=-lynxos178 + ;; + -lynx*5) + os=-lynxos5 + ;; + -lynx*) + os=-lynxos + ;; + -ptx*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` + ;; + -windowsnt*) + os=`echo $os | sed -e 's/windowsnt/winnt/'` + ;; + -psos*) + os=-psos + ;; + -mint | -mint[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; +esac + +# Decode aliases for certain CPU-COMPANY combinations. +case $basic_machine in + # Recognize the basic CPU types without company name. + # Some are omitted here because they have special meanings below. + 1750a | 580 \ + | a29k \ + | aarch64 | aarch64_be \ + | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ + | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ + | am33_2.0 \ + | arc | arceb \ + | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \ + | avr | avr32 \ + | be32 | be64 \ + | bfin \ + | c4x | c8051 | clipper \ + | d10v | d30v | dlx | dsp16xx \ + | epiphany \ + | fido | fr30 | frv | ft32 \ + | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ + | hexagon \ + | i370 | i860 | i960 | ia64 \ + | ip2k | iq2000 \ + | k1om \ + | le32 | le64 \ + | lm32 \ + | m32c | m32r | m32rle | m68000 | m68k | m88k \ + | maxq | mb | microblaze | microblazeel | mcore | mep | metag \ + | mips | mipsbe | mipseb | mipsel | mipsle \ + | mips16 \ + | mips64 | mips64el \ + | mips64octeon | mips64octeonel \ + | mips64orion | mips64orionel \ + | mips64r5900 | mips64r5900el \ + | mips64vr | mips64vrel \ + | mips64vr4100 | mips64vr4100el \ + | mips64vr4300 | mips64vr4300el \ + | mips64vr5000 | mips64vr5000el \ + | mips64vr5900 | mips64vr5900el \ + | mipsisa32 | mipsisa32el \ + | mipsisa32r2 | mipsisa32r2el \ + | mipsisa32r6 | mipsisa32r6el \ + | mipsisa64 | mipsisa64el \ + | mipsisa64r2 | mipsisa64r2el \ + | mipsisa64r6 | mipsisa64r6el \ + | mipsisa64sb1 | mipsisa64sb1el \ + | mipsisa64sr71k | mipsisa64sr71kel \ + | mipsr5900 | mipsr5900el \ + | mipstx39 | mipstx39el \ + | mn10200 | mn10300 \ + | moxie \ + | mt \ + | msp430 \ + | nds32 | nds32le | nds32be \ + | nios | nios2 | nios2eb | nios2el \ + | ns16k | ns32k \ + | open8 | or1k | or1knd | or32 \ + | pdp10 | pdp11 | pj | pjl \ + | powerpc | powerpc64 | powerpc64le | powerpcle \ + | pyramid \ + | riscv32 | riscv64 \ + | rl78 | rx \ + | score \ + | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ + | sh64 | sh64le \ + | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ + | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ + | spu \ + | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ + | ubicom32 \ + | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \ + | visium \ + | we32k \ + | x86 | xc16x | xstormy16 | xtensa \ + | z8k | z80) + basic_machine=$basic_machine-unknown + ;; + c54x) + basic_machine=tic54x-unknown + ;; + c55x) + basic_machine=tic55x-unknown + ;; + c6x) + basic_machine=tic6x-unknown + ;; + leon|leon[3-9]) + basic_machine=sparc-$basic_machine + ;; + m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip) + basic_machine=$basic_machine-unknown + os=-none + ;; + m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) + ;; + ms1) + basic_machine=mt-unknown + ;; + + strongarm | thumb | xscale) + basic_machine=arm-unknown + ;; + xgate) + basic_machine=$basic_machine-unknown + os=-none + ;; + xscaleeb) + basic_machine=armeb-unknown + ;; + + xscaleel) + basic_machine=armel-unknown + ;; + + # We use `pc' rather than `unknown' + # because (1) that's what they normally are, and + # (2) the word "unknown" tends to confuse beginning users. + i*86 | x86_64) + basic_machine=$basic_machine-pc + ;; + # Object if more than one company name word. + *-*-*) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; + # Recognize the basic CPU types with company name. + 580-* \ + | a29k-* \ + | aarch64-* | aarch64_be-* \ + | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ + | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ + | alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \ + | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ + | avr-* | avr32-* \ + | be32-* | be64-* \ + | bfin-* | bs2000-* \ + | c[123]* | c30-* | [cjt]90-* | c4x-* \ + | c8051-* | clipper-* | craynv-* | cydra-* \ + | d10v-* | d30v-* | dlx-* \ + | elxsi-* \ + | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ + | h8300-* | h8500-* \ + | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ + | hexagon-* \ + | i*86-* | i860-* | i960-* | ia64-* \ + | ip2k-* | iq2000-* \ + | k1om-* \ + | le32-* | le64-* \ + | lm32-* \ + | m32c-* | m32r-* | m32rle-* \ + | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ + | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \ + | microblaze-* | microblazeel-* \ + | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ + | mips16-* \ + | mips64-* | mips64el-* \ + | mips64octeon-* | mips64octeonel-* \ + | mips64orion-* | mips64orionel-* \ + | mips64r5900-* | mips64r5900el-* \ + | mips64vr-* | mips64vrel-* \ + | mips64vr4100-* | mips64vr4100el-* \ + | mips64vr4300-* | mips64vr4300el-* \ + | mips64vr5000-* | mips64vr5000el-* \ + | mips64vr5900-* | mips64vr5900el-* \ + | mipsisa32-* | mipsisa32el-* \ + | mipsisa32r2-* | mipsisa32r2el-* \ + | mipsisa32r6-* | mipsisa32r6el-* \ + | mipsisa64-* | mipsisa64el-* \ + | mipsisa64r2-* | mipsisa64r2el-* \ + | mipsisa64r6-* | mipsisa64r6el-* \ + | mipsisa64sb1-* | mipsisa64sb1el-* \ + | mipsisa64sr71k-* | mipsisa64sr71kel-* \ + | mipsr5900-* | mipsr5900el-* \ + | mipstx39-* | mipstx39el-* \ + | mmix-* \ + | mt-* \ + | msp430-* \ + | nds32-* | nds32le-* | nds32be-* \ + | nios-* | nios2-* | nios2eb-* | nios2el-* \ + | none-* | np1-* | ns16k-* | ns32k-* \ + | open8-* \ + | or1k*-* \ + | orion-* \ + | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ + | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \ + | pyramid-* \ + | rl78-* | romp-* | rs6000-* | rx-* \ + | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ + | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ + | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ + | sparclite-* \ + | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx?-* \ + | tahoe-* \ + | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ + | tile*-* \ + | tron-* \ + | ubicom32-* \ + | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \ + | vax-* \ + | visium-* \ + | we32k-* \ + | x86-* | x86_64-* | xc16x-* | xps100-* \ + | xstormy16-* | xtensa*-* \ + | ymp-* \ + | z8k-* | z80-*) + ;; + # Recognize the basic CPU types without company name, with glob match. + xtensa*) + basic_machine=$basic_machine-unknown + ;; + # Recognize the various machine names and aliases which stand + # for a CPU type and a company and sometimes even an OS. + 386bsd) + basic_machine=i386-unknown + os=-bsd + ;; + 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) + basic_machine=m68000-att + ;; + 3b*) + basic_machine=we32k-att + ;; + a29khif) + basic_machine=a29k-amd + os=-udi + ;; + abacus) + basic_machine=abacus-unknown + ;; + adobe68k) + basic_machine=m68010-adobe + os=-scout + ;; + alliant | fx80) + basic_machine=fx80-alliant + ;; + altos | altos3068) + basic_machine=m68k-altos + ;; + am29k) + basic_machine=a29k-none + os=-bsd + ;; + amd64) + basic_machine=x86_64-pc + ;; + amd64-*) + basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + amdahl) + basic_machine=580-amdahl + os=-sysv + ;; + amiga | amiga-*) + basic_machine=m68k-unknown + ;; + amigaos | amigados) + basic_machine=m68k-unknown + os=-amigaos + ;; + amigaunix | amix) + basic_machine=m68k-unknown + os=-sysv4 + ;; + apollo68) + basic_machine=m68k-apollo + os=-sysv + ;; + apollo68bsd) + basic_machine=m68k-apollo + os=-bsd + ;; + aros) + basic_machine=i386-pc + os=-aros + ;; + aux) + basic_machine=m68k-apple + os=-aux + ;; + balance) + basic_machine=ns32k-sequent + os=-dynix + ;; + blackfin) + basic_machine=bfin-unknown + os=-linux + ;; + blackfin-*) + basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; + bluegene*) + basic_machine=powerpc-ibm + os=-cnk + ;; + c54x-*) + basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + c55x-*) + basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + c6x-*) + basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + c90) + basic_machine=c90-cray + os=-unicos + ;; + cegcc) + basic_machine=arm-unknown + os=-cegcc + ;; + convex-c1) + basic_machine=c1-convex + os=-bsd + ;; + convex-c2) + basic_machine=c2-convex + os=-bsd + ;; + convex-c32) + basic_machine=c32-convex + os=-bsd + ;; + convex-c34) + basic_machine=c34-convex + os=-bsd + ;; + convex-c38) + basic_machine=c38-convex + os=-bsd + ;; + cray | j90) + basic_machine=j90-cray + os=-unicos + ;; + craynv) + basic_machine=craynv-cray + os=-unicosmp + ;; + cr16 | cr16-*) + basic_machine=cr16-unknown + os=-elf + ;; + crds | unos) + basic_machine=m68k-crds + ;; + crisv32 | crisv32-* | etraxfs*) + basic_machine=crisv32-axis + ;; + cris | cris-* | etrax*) + basic_machine=cris-axis + ;; + crx) + basic_machine=crx-unknown + os=-elf + ;; + da30 | da30-*) + basic_machine=m68k-da30 + ;; + decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) + basic_machine=mips-dec + ;; + decsystem10* | dec10*) + basic_machine=pdp10-dec + os=-tops10 + ;; + decsystem20* | dec20*) + basic_machine=pdp10-dec + os=-tops20 + ;; + delta | 3300 | motorola-3300 | motorola-delta \ + | 3300-motorola | delta-motorola) + basic_machine=m68k-motorola + ;; + delta88) + basic_machine=m88k-motorola + os=-sysv3 + ;; + dicos) + basic_machine=i686-pc + os=-dicos + ;; + djgpp) + basic_machine=i586-pc + os=-msdosdjgpp + ;; + dpx20 | dpx20-*) + basic_machine=rs6000-bull + os=-bosx + ;; + dpx2* | dpx2*-bull) + basic_machine=m68k-bull + os=-sysv3 + ;; + ebmon29k) + basic_machine=a29k-amd + os=-ebmon + ;; + elxsi) + basic_machine=elxsi-elxsi + os=-bsd + ;; + encore | umax | mmax) + basic_machine=ns32k-encore + ;; + es1800 | OSE68k | ose68k | ose | OSE) + basic_machine=m68k-ericsson + os=-ose + ;; + fx2800) + basic_machine=i860-alliant + ;; + genix) + basic_machine=ns32k-ns + ;; + gmicro) + basic_machine=tron-gmicro + os=-sysv + ;; + go32) + basic_machine=i386-pc + os=-go32 + ;; + h3050r* | hiux*) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + h8300hms) + basic_machine=h8300-hitachi + os=-hms + ;; + h8300xray) + basic_machine=h8300-hitachi + os=-xray + ;; + h8500hms) + basic_machine=h8500-hitachi + os=-hms + ;; + harris) + basic_machine=m88k-harris + os=-sysv3 + ;; + hp300-*) + basic_machine=m68k-hp + ;; + hp300bsd) + basic_machine=m68k-hp + os=-bsd + ;; + hp300hpux) + basic_machine=m68k-hp + os=-hpux + ;; + hp3k9[0-9][0-9] | hp9[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k2[0-9][0-9] | hp9k31[0-9]) + basic_machine=m68000-hp + ;; + hp9k3[2-9][0-9]) + basic_machine=m68k-hp + ;; + hp9k6[0-9][0-9] | hp6[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k7[0-79][0-9] | hp7[0-79][0-9]) + basic_machine=hppa1.1-hp + ;; + hp9k78[0-9] | hp78[0-9]) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][13679] | hp8[0-9][13679]) + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][0-9] | hp8[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hppa-next) + os=-nextstep3 + ;; + hppaosf) + basic_machine=hppa1.1-hp + os=-osf + ;; + hppro) + basic_machine=hppa1.1-hp + os=-proelf + ;; + i370-ibm* | ibm*) + basic_machine=i370-ibm + ;; + i*86v32) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv32 + ;; + i*86v4*) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv4 + ;; + i*86v) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv + ;; + i*86sol2) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-solaris2 + ;; + i386mach) + basic_machine=i386-mach + os=-mach + ;; + i386-vsta | vsta) + basic_machine=i386-unknown + os=-vsta + ;; + iris | iris4d) + basic_machine=mips-sgi + case $os in + -irix*) + ;; + *) + os=-irix4 + ;; + esac + ;; + isi68 | isi) + basic_machine=m68k-isi + os=-sysv + ;; + leon-*|leon[3-9]-*) + basic_machine=sparc-`echo $basic_machine | sed 's/-.*//'` + ;; + m68knommu) + basic_machine=m68k-unknown + os=-linux + ;; + m68knommu-*) + basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; + m88k-omron*) + basic_machine=m88k-omron + ;; + magnum | m3230) + basic_machine=mips-mips + os=-sysv + ;; + merlin) + basic_machine=ns32k-utek + os=-sysv + ;; + microblaze*) + basic_machine=microblaze-xilinx + ;; + mingw64) + basic_machine=x86_64-pc + os=-mingw64 + ;; + mingw32) + basic_machine=i686-pc + os=-mingw32 + ;; + mingw32ce) + basic_machine=arm-unknown + os=-mingw32ce + ;; + miniframe) + basic_machine=m68000-convergent + ;; + *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; + mips3*-*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` + ;; + mips3*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown + ;; + monitor) + basic_machine=m68k-rom68k + os=-coff + ;; + morphos) + basic_machine=powerpc-unknown + os=-morphos + ;; + moxiebox) + basic_machine=moxie-unknown + os=-moxiebox + ;; + msdos) + basic_machine=i386-pc + os=-msdos + ;; + ms1-*) + basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` + ;; + msys) + basic_machine=i686-pc + os=-msys + ;; + mvs) + basic_machine=i370-ibm + os=-mvs + ;; + nacl) + basic_machine=le32-unknown + os=-nacl + ;; + ncr3000) + basic_machine=i486-ncr + os=-sysv4 + ;; + netbsd386) + basic_machine=i386-unknown + os=-netbsd + ;; + netwinder) + basic_machine=armv4l-rebel + os=-linux + ;; + news | news700 | news800 | news900) + basic_machine=m68k-sony + os=-newsos + ;; + news1000) + basic_machine=m68030-sony + os=-newsos + ;; + news-3600 | risc-news) + basic_machine=mips-sony + os=-newsos + ;; + necv70) + basic_machine=v70-nec + os=-sysv + ;; + next | m*-next ) + basic_machine=m68k-next + case $os in + -nextstep* ) + ;; + -ns2*) + os=-nextstep2 + ;; + *) + os=-nextstep3 + ;; + esac + ;; + nh3000) + basic_machine=m68k-harris + os=-cxux + ;; + nh[45]000) + basic_machine=m88k-harris + os=-cxux + ;; + nindy960) + basic_machine=i960-intel + os=-nindy + ;; + mon960) + basic_machine=i960-intel + os=-mon960 + ;; + nonstopux) + basic_machine=mips-compaq + os=-nonstopux + ;; + np1) + basic_machine=np1-gould + ;; + neo-tandem) + basic_machine=neo-tandem + ;; + nse-tandem) + basic_machine=nse-tandem + ;; + nsr-tandem) + basic_machine=nsr-tandem + ;; + op50n-* | op60c-*) + basic_machine=hppa1.1-oki + os=-proelf + ;; + openrisc | openrisc-*) + basic_machine=or32-unknown + ;; + os400) + basic_machine=powerpc-ibm + os=-os400 + ;; + OSE68000 | ose68000) + basic_machine=m68000-ericsson + os=-ose + ;; + os68k) + basic_machine=m68k-none + os=-os68k + ;; + pa-hitachi) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + paragon) + basic_machine=i860-intel + os=-osf + ;; + parisc) + basic_machine=hppa-unknown + os=-linux + ;; + parisc-*) + basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; + pbd) + basic_machine=sparc-tti + ;; + pbb) + basic_machine=m68k-tti + ;; + pc532 | pc532-*) + basic_machine=ns32k-pc532 + ;; + pc98) + basic_machine=i386-pc + ;; + pc98-*) + basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentium | p5 | k5 | k6 | nexgen | viac3) + basic_machine=i586-pc + ;; + pentiumpro | p6 | 6x86 | athlon | athlon_*) + basic_machine=i686-pc + ;; + pentiumii | pentium2 | pentiumiii | pentium3) + basic_machine=i686-pc + ;; + pentium4) + basic_machine=i786-pc + ;; + pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) + basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumpro-* | p6-* | 6x86-* | athlon-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentium4-*) + basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pn) + basic_machine=pn-gould + ;; + power) basic_machine=power-ibm + ;; + ppc | ppcbe) basic_machine=powerpc-unknown + ;; + ppc-* | ppcbe-*) + basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppcle | powerpclittle | ppc-le | powerpc-little) + basic_machine=powerpcle-unknown + ;; + ppcle-* | powerpclittle-*) + basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppc64) basic_machine=powerpc64-unknown + ;; + ppc64-* | ppc64p7-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppc64le | powerpc64little | ppc64-le | powerpc64-little) + basic_machine=powerpc64le-unknown + ;; + ppc64le-* | powerpc64little-*) + basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ps2) + basic_machine=i386-ibm + ;; + pw32) + basic_machine=i586-unknown + os=-pw32 + ;; + rdos | rdos64) + basic_machine=x86_64-pc + os=-rdos + ;; + rdos32) + basic_machine=i386-pc + os=-rdos + ;; + rom68k) + basic_machine=m68k-rom68k + os=-coff + ;; + rm[46]00) + basic_machine=mips-siemens + ;; + rtpc | rtpc-*) + basic_machine=romp-ibm + ;; + s390 | s390-*) + basic_machine=s390-ibm + ;; + s390x | s390x-*) + basic_machine=s390x-ibm + ;; + sa29200) + basic_machine=a29k-amd + os=-udi + ;; + sb1) + basic_machine=mipsisa64sb1-unknown + ;; + sb1el) + basic_machine=mipsisa64sb1el-unknown + ;; + sde) + basic_machine=mipsisa32-sde + os=-elf + ;; + sei) + basic_machine=mips-sei + os=-seiux + ;; + sequent) + basic_machine=i386-sequent + ;; + sh) + basic_machine=sh-hitachi + os=-hms + ;; + sh5el) + basic_machine=sh5le-unknown + ;; + sh64) + basic_machine=sh64-unknown + ;; + sparclite-wrs | simso-wrs) + basic_machine=sparclite-wrs + os=-vxworks + ;; + sps7) + basic_machine=m68k-bull + os=-sysv2 + ;; + spur) + basic_machine=spur-unknown + ;; + st2000) + basic_machine=m68k-tandem + ;; + stratus) + basic_machine=i860-stratus + os=-sysv4 + ;; + strongarm-* | thumb-*) + basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + sun2) + basic_machine=m68000-sun + ;; + sun2os3) + basic_machine=m68000-sun + os=-sunos3 + ;; + sun2os4) + basic_machine=m68000-sun + os=-sunos4 + ;; + sun3os3) + basic_machine=m68k-sun + os=-sunos3 + ;; + sun3os4) + basic_machine=m68k-sun + os=-sunos4 + ;; + sun4os3) + basic_machine=sparc-sun + os=-sunos3 + ;; + sun4os4) + basic_machine=sparc-sun + os=-sunos4 + ;; + sun4sol2) + basic_machine=sparc-sun + os=-solaris2 + ;; + sun3 | sun3-*) + basic_machine=m68k-sun + ;; + sun4) + basic_machine=sparc-sun + ;; + sun386 | sun386i | roadrunner) + basic_machine=i386-sun + ;; + sv1) + basic_machine=sv1-cray + os=-unicos + ;; + symmetry) + basic_machine=i386-sequent + os=-dynix + ;; + t3e) + basic_machine=alphaev5-cray + os=-unicos + ;; + t90) + basic_machine=t90-cray + os=-unicos + ;; + tile*) + basic_machine=$basic_machine-unknown + os=-linux-gnu + ;; + tx39) + basic_machine=mipstx39-unknown + ;; + tx39el) + basic_machine=mipstx39el-unknown + ;; + toad1) + basic_machine=pdp10-xkl + os=-tops20 + ;; + tower | tower-32) + basic_machine=m68k-ncr + ;; + tpf) + basic_machine=s390x-ibm + os=-tpf + ;; + udi29k) + basic_machine=a29k-amd + os=-udi + ;; + ultra3) + basic_machine=a29k-nyu + os=-sym1 + ;; + v810 | necv810) + basic_machine=v810-nec + os=-none + ;; + vaxv) + basic_machine=vax-dec + os=-sysv + ;; + vms) + basic_machine=vax-dec + os=-vms + ;; + vpp*|vx|vx-*) + basic_machine=f301-fujitsu + ;; + vxworks960) + basic_machine=i960-wrs + os=-vxworks + ;; + vxworks68) + basic_machine=m68k-wrs + os=-vxworks + ;; + vxworks29k) + basic_machine=a29k-wrs + os=-vxworks + ;; + w65*) + basic_machine=w65-wdc + os=-none + ;; + w89k-*) + basic_machine=hppa1.1-winbond + os=-proelf + ;; + xbox) + basic_machine=i686-pc + os=-mingw32 + ;; + xps | xps100) + basic_machine=xps100-honeywell + ;; + xscale-* | xscalee[bl]-*) + basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'` + ;; + ymp) + basic_machine=ymp-cray + os=-unicos + ;; + z8k-*-coff) + basic_machine=z8k-unknown + os=-sim + ;; + z80-*-coff) + basic_machine=z80-unknown + os=-sim + ;; + none) + basic_machine=none-none + os=-none + ;; + +# Here we handle the default manufacturer of certain CPU types. It is in +# some cases the only manufacturer, in others, it is the most popular. + w89k) + basic_machine=hppa1.1-winbond + ;; + op50n) + basic_machine=hppa1.1-oki + ;; + op60c) + basic_machine=hppa1.1-oki + ;; + romp) + basic_machine=romp-ibm + ;; + mmix) + basic_machine=mmix-knuth + ;; + rs6000) + basic_machine=rs6000-ibm + ;; + vax) + basic_machine=vax-dec + ;; + pdp10) + # there are many clones, so DEC is not a safe bet + basic_machine=pdp10-unknown + ;; + pdp11) + basic_machine=pdp11-dec + ;; + we32k) + basic_machine=we32k-att + ;; + sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) + basic_machine=sh-unknown + ;; + sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) + basic_machine=sparc-sun + ;; + cydra) + basic_machine=cydra-cydrome + ;; + orion) + basic_machine=orion-highlevel + ;; + orion105) + basic_machine=clipper-highlevel + ;; + mac | mpw | mac-mpw) + basic_machine=m68k-apple + ;; + pmac | pmac-mpw) + basic_machine=powerpc-apple + ;; + *-unknown) + # Make sure to match an already-canonicalized machine name. + ;; + *) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; +esac + +# Here we canonicalize certain aliases for manufacturers. +case $basic_machine in + *-digital*) + basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` + ;; + *-commodore*) + basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` + ;; + *) + ;; +esac + +# Decode manufacturer-specific aliases for certain operating systems. + +if [ x"$os" != x"" ] +then +case $os in + # First match some system type aliases + # that might get confused with valid system types. + # -solaris* is a basic system type, with this one exception. + -auroraux) + os=-auroraux + ;; + -solaris1 | -solaris1.*) + os=`echo $os | sed -e 's|solaris1|sunos4|'` + ;; + -solaris) + os=-solaris2 + ;; + -svr4*) + os=-sysv4 + ;; + -unixware*) + os=-sysv4.2uw + ;; + -gnu/linux*) + os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` + ;; + # First accept the basic system types. + # The portable systems comes first. + # Each alternative MUST END IN A *, to match a version number. + # -sysv* is not here because it comes later, after sysvr4. + -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ + | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ + | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ + | -sym* | -kopensolaris* | -plan9* \ + | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ + | -aos* | -aros* \ + | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ + | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ + | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ + | -bitrig* | -openbsd* | -solidbsd* \ + | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ + | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ + | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ + | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ + | -chorusos* | -chorusrdb* | -cegcc* \ + | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ + | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \ + | -linux-newlib* | -linux-musl* | -linux-uclibc* \ + | -uxpv* | -beos* | -mpeix* | -udk* | -moxiebox* \ + | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ + | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ + | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ + | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ + | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ + | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ + | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es* | -tirtos*) + # Remember, each alternative MUST END IN *, to match a version number. + ;; + -qnx*) + case $basic_machine in + x86-* | i*86-*) + ;; + *) + os=-nto$os + ;; + esac + ;; + -nto-qnx*) + ;; + -nto*) + os=`echo $os | sed -e 's|nto|nto-qnx|'` + ;; + -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ + | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ + | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) + ;; + -mac*) + os=`echo $os | sed -e 's|mac|macos|'` + ;; + -linux-dietlibc) + os=-linux-dietlibc + ;; + -linux*) + os=`echo $os | sed -e 's|linux|linux-gnu|'` + ;; + -sunos5*) + os=`echo $os | sed -e 's|sunos5|solaris2|'` + ;; + -sunos6*) + os=`echo $os | sed -e 's|sunos6|solaris3|'` + ;; + -opened*) + os=-openedition + ;; + -os400*) + os=-os400 + ;; + -wince*) + os=-wince + ;; + -osfrose*) + os=-osfrose + ;; + -osf*) + os=-osf + ;; + -utek*) + os=-bsd + ;; + -dynix*) + os=-bsd + ;; + -acis*) + os=-aos + ;; + -atheos*) + os=-atheos + ;; + -syllable*) + os=-syllable + ;; + -386bsd) + os=-bsd + ;; + -ctix* | -uts*) + os=-sysv + ;; + -nova*) + os=-rtmk-nova + ;; + -ns2 ) + os=-nextstep2 + ;; + -nsk*) + os=-nsk + ;; + # Preserve the version number of sinix5. + -sinix5.*) + os=`echo $os | sed -e 's|sinix|sysv|'` + ;; + -sinix*) + os=-sysv4 + ;; + -tpf*) + os=-tpf + ;; + -triton*) + os=-sysv3 + ;; + -oss*) + os=-sysv3 + ;; + -svr4) + os=-sysv4 + ;; + -svr3) + os=-sysv3 + ;; + -sysvr4) + os=-sysv4 + ;; + # This must come after -sysvr4. + -sysv*) + ;; + -ose*) + os=-ose + ;; + -es1800*) + os=-ose + ;; + -xenix) + os=-xenix + ;; + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + os=-mint + ;; + -aros*) + os=-aros + ;; + -zvmoe) + os=-zvmoe + ;; + -dicos*) + os=-dicos + ;; + -nacl*) + ;; + -none) + ;; + *) + # Get rid of the `-' at the beginning of $os. + os=`echo $os | sed 's/[^-]*-//'` + echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 + exit 1 + ;; +esac +else + +# Here we handle the default operating systems that come with various machines. +# The value should be what the vendor currently ships out the door with their +# machine or put another way, the most popular os provided with the machine. + +# Note that if you're going to try to match "-MANUFACTURER" here (say, +# "-sun"), then you have to tell the case statement up towards the top +# that MANUFACTURER isn't an operating system. Otherwise, code above +# will signal an error saying that MANUFACTURER isn't an operating +# system, and we'll never get to this point. + +case $basic_machine in + score-*) + os=-elf + ;; + spu-*) + os=-elf + ;; + *-acorn) + os=-riscix1.2 + ;; + arm*-rebel) + os=-linux + ;; + arm*-semi) + os=-aout + ;; + c4x-* | tic4x-*) + os=-coff + ;; + c8051-*) + os=-elf + ;; + hexagon-*) + os=-elf + ;; + tic54x-*) + os=-coff + ;; + tic55x-*) + os=-coff + ;; + tic6x-*) + os=-coff + ;; + # This must come before the *-dec entry. + pdp10-*) + os=-tops20 + ;; + pdp11-*) + os=-none + ;; + *-dec | vax-*) + os=-ultrix4.2 + ;; + m68*-apollo) + os=-domain + ;; + i386-sun) + os=-sunos4.0.2 + ;; + m68000-sun) + os=-sunos3 + ;; + m68*-cisco) + os=-aout + ;; + mep-*) + os=-elf + ;; + mips*-cisco) + os=-elf + ;; + mips*-*) + os=-elf + ;; + or32-*) + os=-coff + ;; + *-tti) # must be before sparc entry or we get the wrong os. + os=-sysv3 + ;; + sparc-* | *-sun) + os=-sunos4.1.1 + ;; + *-be) + os=-beos + ;; + *-haiku) + os=-haiku + ;; + *-ibm) + os=-aix + ;; + *-knuth) + os=-mmixware + ;; + *-wec) + os=-proelf + ;; + *-winbond) + os=-proelf + ;; + *-oki) + os=-proelf + ;; + *-hp) + os=-hpux + ;; + *-hitachi) + os=-hiux + ;; + i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) + os=-sysv + ;; + *-cbm) + os=-amigaos + ;; + *-dg) + os=-dgux + ;; + *-dolphin) + os=-sysv3 + ;; + m68k-ccur) + os=-rtu + ;; + m88k-omron*) + os=-luna + ;; + *-next ) + os=-nextstep + ;; + *-sequent) + os=-ptx + ;; + *-crds) + os=-unos + ;; + *-ns) + os=-genix + ;; + i370-*) + os=-mvs + ;; + *-next) + os=-nextstep3 + ;; + *-gould) + os=-sysv + ;; + *-highlevel) + os=-bsd + ;; + *-encore) + os=-bsd + ;; + *-sgi) + os=-irix + ;; + *-siemens) + os=-sysv4 + ;; + *-masscomp) + os=-rtu + ;; + f30[01]-fujitsu | f700-fujitsu) + os=-uxpv + ;; + *-rom68k) + os=-coff + ;; + *-*bug) + os=-coff + ;; + *-apple) + os=-macos + ;; + *-atari*) + os=-mint + ;; + *) + os=-none + ;; +esac +fi + +# Here we handle the case where we know the os, and the CPU type, but not the +# manufacturer. We pick the logical manufacturer. +vendor=unknown +case $basic_machine in + *-unknown) + case $os in + -riscix*) + vendor=acorn + ;; + -sunos*) + vendor=sun + ;; + -cnk*|-aix*) + vendor=ibm + ;; + -beos*) + vendor=be + ;; + -hpux*) + vendor=hp + ;; + -mpeix*) + vendor=hp + ;; + -hiux*) + vendor=hitachi + ;; + -unos*) + vendor=crds + ;; + -dgux*) + vendor=dg + ;; + -luna*) + vendor=omron + ;; + -genix*) + vendor=ns + ;; + -mvs* | -opened*) + vendor=ibm + ;; + -os400*) + vendor=ibm + ;; + -ptx*) + vendor=sequent + ;; + -tpf*) + vendor=ibm + ;; + -vxsim* | -vxworks* | -windiss*) + vendor=wrs + ;; + -aux*) + vendor=apple + ;; + -hms*) + vendor=hitachi + ;; + -mpw* | -macos*) + vendor=apple + ;; + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + vendor=atari + ;; + -vos*) + vendor=stratus + ;; + esac + basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` + ;; +esac + +echo $basic_machine$os +exit + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/configure b/configure new file mode 100755 index 0000000..6f38bf0 --- /dev/null +++ b/configure @@ -0,0 +1,16564 @@ +#! /bin/sh +# Guess values for system-dependent variables and create Makefiles. +# Generated by GNU Autoconf 2.69 for babl 0.1.18. +# +# +# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. +# +# +# This configure script is free software; the Free Software Foundation +# gives unlimited permission to copy, distribute and modify it. +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi + + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in #( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +as_myself= +case $0 in #(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +# Use a proper internal environment variable to ensure we don't fall + # into an infinite loop, continuously re-executing ourselves. + if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then + _as_can_reexec=no; export _as_can_reexec; + # We cannot yet assume a decent shell, so we have to provide a +# neutralization value for shells without unset; and this also +# works around shells that cannot unset nonexistent variables. +# Preserve -v and -x to the replacement shell. +BASH_ENV=/dev/null +ENV=/dev/null +(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV +case $- in # (((( + *v*x* | *x*v* ) as_opts=-vx ;; + *v* ) as_opts=-v ;; + *x* ) as_opts=-x ;; + * ) as_opts= ;; +esac +exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} +# Admittedly, this is quite paranoid, since all the known shells bail +# out after a failed `exec'. +$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 +as_fn_exit 255 + fi + # We don't want this to propagate to other subprocesses. + { _as_can_reexec=; unset _as_can_reexec;} +if test "x$CONFIG_SHELL" = x; then + as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which + # is contrary to our usage. Disable this feature. + alias -g '\${1+\"\$@\"}'='\"\$@\"' + setopt NO_GLOB_SUBST +else + case \`(set -o) 2>/dev/null\` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi +" + as_required="as_fn_return () { (exit \$1); } +as_fn_success () { as_fn_return 0; } +as_fn_failure () { as_fn_return 1; } +as_fn_ret_success () { return 0; } +as_fn_ret_failure () { return 1; } + +exitcode=0 +as_fn_success || { exitcode=1; echo as_fn_success failed.; } +as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } +as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } +as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } +if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : + +else + exitcode=1; echo positional parameters were not saved. +fi +test x\$exitcode = x0 || exit 1 +test -x / || exit 1" + as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO + as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO + eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && + test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 + + test -n \"\${ZSH_VERSION+set}\${BASH_VERSION+set}\" || ( + ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' + ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO + ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO + PATH=/empty FPATH=/empty; export PATH FPATH + test \"X\`printf %s \$ECHO\`\" = \"X\$ECHO\" \\ + || test \"X\`print -r -- \$ECHO\`\" = \"X\$ECHO\" ) || exit 1 +test \$(( 1 + 1 )) = 2 || exit 1" + if (eval "$as_required") 2>/dev/null; then : + as_have_required=yes +else + as_have_required=no +fi + if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : + +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +as_found=false +for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + as_found=: + case $as_dir in #( + /*) + for as_base in sh bash ksh sh5; do + # Try only shells that exist, to save several forks. + as_shell=$as_dir/$as_base + if { test -f "$as_shell" || test -f "$as_shell.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : + CONFIG_SHELL=$as_shell as_have_required=yes + if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : + break 2 +fi +fi + done;; + esac + as_found=false +done +$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : + CONFIG_SHELL=$SHELL as_have_required=yes +fi; } +IFS=$as_save_IFS + + + if test "x$CONFIG_SHELL" != x; then : + export CONFIG_SHELL + # We cannot yet assume a decent shell, so we have to provide a +# neutralization value for shells without unset; and this also +# works around shells that cannot unset nonexistent variables. +# Preserve -v and -x to the replacement shell. +BASH_ENV=/dev/null +ENV=/dev/null +(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV +case $- in # (((( + *v*x* | *x*v* ) as_opts=-vx ;; + *v* ) as_opts=-v ;; + *x* ) as_opts=-x ;; + * ) as_opts= ;; +esac +exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} +# Admittedly, this is quite paranoid, since all the known shells bail +# out after a failed `exec'. +$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 +exit 255 +fi + + if test x$as_have_required = xno; then : + $as_echo "$0: This script requires a shell more modern than all" + $as_echo "$0: the shells that I found on your system." + if test x${ZSH_VERSION+set} = xset ; then + $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" + $as_echo "$0: be upgraded to zsh 4.3.4 or later." + else + $as_echo "$0: Please tell bug-autoconf@gnu.org about your system, +$0: including any error possibly output before this +$0: message. Then install a modern shell, or manually run +$0: the script under such a shell if you do have one." + fi + exit 1 +fi +fi +fi +SHELL=${CONFIG_SHELL-/bin/sh} +export SHELL +# Unset more variables known to interfere with behavior of common tools. +CLICOLOR_FORCE= GREP_OPTIONS= +unset CLICOLOR_FORCE GREP_OPTIONS + +## --------------------- ## +## M4sh Shell Functions. ## +## --------------------- ## +# as_fn_unset VAR +# --------------- +# Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset + +# as_fn_set_status STATUS +# ----------------------- +# Set $? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} # as_fn_set_status + +# as_fn_exit STATUS +# ----------------- +# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} # as_fn_exit + +# as_fn_mkdir_p +# ------------- +# Create "$as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" + + +} # as_fn_mkdir_p + +# as_fn_executable_p FILE +# ----------------------- +# Test if FILE is an executable regular file. +as_fn_executable_p () +{ + test -f "$1" && test -x "$1" +} # as_fn_executable_p +# as_fn_append VAR VALUE +# ---------------------- +# Append the text in VALUE to the end of the definition contained in VAR. Take +# advantage of any shell optimizations that allow amortized linear growth over +# repeated appends, instead of the typical quadratic growth present in naive +# implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +# as_fn_arith ARG... +# ------------------ +# Perform arithmetic evaluation on the ARGs, and store the result in the +# global $as_val. Take advantage of shells that can avoid forks. The arguments +# must be portable across $(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + + +# as_fn_error STATUS ERROR [LINENO LOG_FD] +# ---------------------------------------- +# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are +# provided, also output the error to LOG_FD, referencing LINENO. Then exit the +# script with STATUS, using 1 if that was 0. +as_fn_error () +{ + as_status=$1; test $as_status -eq 0 && as_status=1 + if test "$4"; then + as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + fi + $as_echo "$as_me: error: $2" >&2 + as_fn_exit $as_status +} # as_fn_error + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + + + as_lineno_1=$LINENO as_lineno_1a=$LINENO + as_lineno_2=$LINENO as_lineno_2a=$LINENO + eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && + test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { + # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) + sed -n ' + p + /[$]LINENO/= + ' <$as_myself | + sed ' + s/[$]LINENO.*/&-/ + t lineno + b + :lineno + N + :loop + s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ + t loop + s/-\n.*// + ' >$as_me.lineno && + chmod +x "$as_me.lineno" || + { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } + + # If we had to re-execute with $CONFIG_SHELL, we're ensured to have + # already done that, so ensure we don't try to do so again and fall + # in an infinite loop. This has already happened in practice. + _as_can_reexec=no; export _as_can_reexec + # Don't try to exec as it changes $[0], causing all sort of problems + # (the dirname of $[0] is not the place where we might find the + # original and so on. Autoconf is especially sensitive to this). + . "./$as_me.lineno" + # Exit status is that of the last command. + exit +} + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in #((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; +esac + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -pR'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -pR' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -pR' + fi +else + as_ln_s='cp -pR' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + +if mkdir -p . 2>/dev/null; then + as_mkdir_p='mkdir -p "$as_dir"' +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + +as_test_x='test -x' +as_executable_p=as_fn_executable_p + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + +SHELL=${CONFIG_SHELL-/bin/sh} + + +test -n "$DJDIR" || exec 7<&0 &1 + +# Name of the host. +# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, +# so uname gets run too. +ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` + +# +# Initializations. +# +ac_default_prefix=/usr/local +ac_clean_files= +ac_config_libobj_dir=. +LIBOBJS= +cross_compiling=no +subdirs= +MFLAGS= +MAKEFLAGS= + +# Identity of this package. +PACKAGE_NAME='babl' +PACKAGE_TARNAME='babl' +PACKAGE_VERSION='0.1.18' +PACKAGE_STRING='babl 0.1.18' +PACKAGE_BUGREPORT='' +PACKAGE_URL='' + +ac_unique_file="babl/babl.h" +# Factoring default headers for most tests. +ac_includes_default="\ +#include +#ifdef HAVE_SYS_TYPES_H +# include +#endif +#ifdef HAVE_SYS_STAT_H +# include +#endif +#ifdef STDC_HEADERS +# include +# include +#else +# ifdef HAVE_STDLIB_H +# include +# endif +#endif +#ifdef HAVE_STRING_H +# if !defined STDC_HEADERS && defined HAVE_MEMORY_H +# include +# endif +# include +#endif +#ifdef HAVE_STRINGS_H +# include +#endif +#ifdef HAVE_INTTYPES_H +# include +#endif +#ifdef HAVE_STDINT_H +# include +#endif +#ifdef HAVE_UNISTD_H +# include +#endif" + +ac_subst_vars='am__EXEEXT_FALSE +am__EXEEXT_TRUE +LTLIBOBJS +LIBOBJS +HAVE_SRANDOM_FALSE +HAVE_SRANDOM_TRUE +ALTIVEC_EXTRA_CFLAGS +F16C_EXTRA_CFLAGS +SSE4_1_EXTRA_CFLAGS +SSE2_EXTRA_CFLAGS +SSE_EXTRA_CFLAGS +MMX_EXTRA_CFLAGS +OS_UNIX_FALSE +OS_UNIX_TRUE +OS_WIN32_FALSE +OS_WIN32_TRUE +THREAD_LIB +MATH_LIB +DIR_SEP +PATH_SEP +PLATFORM_WIN32_FALSE +PLATFORM_WIN32_TRUE +SHREXT +ENABLE_DOCS_FALSE +ENABLE_DOCS_TRUE +HAVE_W3M_FALSE +HAVE_W3M_TRUE +W3M +HAVE_RSVG_FALSE +HAVE_RSVG_TRUE +RSVG +WEBSITE_LOCATION +WEBSITE_HOST +MAINT +MAINTAINER_MODE_FALSE +MAINTAINER_MODE_TRUE +CPP +LT_SYS_LIBRARY_PATH +OTOOL64 +OTOOL +LIPO +NMEDIT +DSYMUTIL +MANIFEST_TOOL +RANLIB +ac_ct_AR +AR +LN_S +NM +ac_ct_DUMPBIN +DUMPBIN +LD +FGREP +EGREP +GREP +SED +LIBTOOL +OBJDUMP +DLLTOOL +AS +am__fastdepCC_FALSE +am__fastdepCC_TRUE +CCDEPMODE +am__nodep +AMDEPBACKSLASH +AMDEP_FALSE +AMDEP_TRUE +am__quote +am__include +DEPDIR +OBJEXT +EXEEXT +ac_ct_CC +CPPFLAGS +LDFLAGS +CFLAGS +CC +AM_BACKSLASH +AM_DEFAULT_VERBOSITY +AM_DEFAULT_V +AM_V +am__untar +am__tar +AMTAR +am__leading_dot +SET_MAKE +AWK +mkdir_p +MKDIR_P +INSTALL_STRIP_PROGRAM +STRIP +install_sh +MAKEINFO +AUTOHEADER +AUTOMAKE +AUTOCONF +ACLOCAL +VERSION +PACKAGE +CYGPATH_W +am__isrc +INSTALL_DATA +INSTALL_SCRIPT +INSTALL_PROGRAM +target_os +target_vendor +target_cpu +target +host_os +host_vendor +host_cpu +host +build_os +build_vendor +build_cpu +build +BABL_CURRENT_MINUS_AGE +BABL_LIBRARY_VERSION +BABL_UNSTABLE +BABL_UNSTABLE_FALSE +BABL_UNSTABLE_TRUE +BABL_RELEASE +BABL_API_VERSION +BABL_REAL_VERSION +BABL_VERSION +BABL_BINARY_AGE +BABL_INTERFACE_AGE +BABL_MICRO_VERSION +BABL_MINOR_VERSION +BABL_MAJOR_VERSION +target_alias +host_alias +build_alias +LIBS +ECHO_T +ECHO_N +ECHO_C +DEFS +mandir +localedir +libdir +psdir +pdfdir +dvidir +htmldir +infodir +docdir +oldincludedir +includedir +localstatedir +sharedstatedir +sysconfdir +datadir +datarootdir +libexecdir +sbindir +bindir +program_transform_name +prefix +exec_prefix +PACKAGE_URL +PACKAGE_BUGREPORT +PACKAGE_STRING +PACKAGE_VERSION +PACKAGE_TARNAME +PACKAGE_NAME +PATH_SEPARATOR +SHELL' +ac_subst_files='' +ac_user_opts=' +enable_option_checking +enable_silent_rules +enable_dependency_tracking +enable_static +enable_shared +with_pic +enable_fast_install +with_aix_soname +with_gnu_ld +with_sysroot +enable_libtool_lock +enable_maintainer_mode +enable_docs +enable_mmx +enable_sse +enable_sse2 +enable_sse4_1 +enable_f16c +enable_altivec +' + ac_precious_vars='build_alias +host_alias +target_alias +CC +CFLAGS +LDFLAGS +LIBS +CPPFLAGS +LT_SYS_LIBRARY_PATH +CPP' + + +# Initialize some variables set by options. +ac_init_help= +ac_init_version=false +ac_unrecognized_opts= +ac_unrecognized_sep= +# The variables have the same names as the options, with +# dashes changed to underlines. +cache_file=/dev/null +exec_prefix=NONE +no_create= +no_recursion= +prefix=NONE +program_prefix=NONE +program_suffix=NONE +program_transform_name=s,x,x, +silent= +site= +srcdir= +verbose= +x_includes=NONE +x_libraries=NONE + +# Installation directory options. +# These are left unexpanded so users can "make install exec_prefix=/foo" +# and all the variables that are supposed to be based on exec_prefix +# by default will actually change. +# Use braces instead of parens because sh, perl, etc. also accept them. +# (The list follows the same order as the GNU Coding Standards.) +bindir='${exec_prefix}/bin' +sbindir='${exec_prefix}/sbin' +libexecdir='${exec_prefix}/libexec' +datarootdir='${prefix}/share' +datadir='${datarootdir}' +sysconfdir='${prefix}/etc' +sharedstatedir='${prefix}/com' +localstatedir='${prefix}/var' +includedir='${prefix}/include' +oldincludedir='/usr/include' +docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' +infodir='${datarootdir}/info' +htmldir='${docdir}' +dvidir='${docdir}' +pdfdir='${docdir}' +psdir='${docdir}' +libdir='${exec_prefix}/lib' +localedir='${datarootdir}/locale' +mandir='${datarootdir}/man' + +ac_prev= +ac_dashdash= +for ac_option +do + # If the previous option needs an argument, assign it. + if test -n "$ac_prev"; then + eval $ac_prev=\$ac_option + ac_prev= + continue + fi + + case $ac_option in + *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; + *=) ac_optarg= ;; + *) ac_optarg=yes ;; + esac + + # Accept the important Cygnus configure options, so we can diagnose typos. + + case $ac_dashdash$ac_option in + --) + ac_dashdash=yes ;; + + -bindir | --bindir | --bindi | --bind | --bin | --bi) + ac_prev=bindir ;; + -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) + bindir=$ac_optarg ;; + + -build | --build | --buil | --bui | --bu) + ac_prev=build_alias ;; + -build=* | --build=* | --buil=* | --bui=* | --bu=*) + build_alias=$ac_optarg ;; + + -cache-file | --cache-file | --cache-fil | --cache-fi \ + | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) + ac_prev=cache_file ;; + -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ + | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) + cache_file=$ac_optarg ;; + + --config-cache | -C) + cache_file=config.cache ;; + + -datadir | --datadir | --datadi | --datad) + ac_prev=datadir ;; + -datadir=* | --datadir=* | --datadi=* | --datad=*) + datadir=$ac_optarg ;; + + -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ + | --dataroo | --dataro | --datar) + ac_prev=datarootdir ;; + -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ + | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) + datarootdir=$ac_optarg ;; + + -disable-* | --disable-*) + ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=no ;; + + -docdir | --docdir | --docdi | --doc | --do) + ac_prev=docdir ;; + -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) + docdir=$ac_optarg ;; + + -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) + ac_prev=dvidir ;; + -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) + dvidir=$ac_optarg ;; + + -enable-* | --enable-*) + ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=\$ac_optarg ;; + + -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ + | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ + | --exec | --exe | --ex) + ac_prev=exec_prefix ;; + -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ + | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ + | --exec=* | --exe=* | --ex=*) + exec_prefix=$ac_optarg ;; + + -gas | --gas | --ga | --g) + # Obsolete; use --with-gas. + with_gas=yes ;; + + -help | --help | --hel | --he | -h) + ac_init_help=long ;; + -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) + ac_init_help=recursive ;; + -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) + ac_init_help=short ;; + + -host | --host | --hos | --ho) + ac_prev=host_alias ;; + -host=* | --host=* | --hos=* | --ho=*) + host_alias=$ac_optarg ;; + + -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) + ac_prev=htmldir ;; + -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ + | --ht=*) + htmldir=$ac_optarg ;; + + -includedir | --includedir | --includedi | --included | --include \ + | --includ | --inclu | --incl | --inc) + ac_prev=includedir ;; + -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ + | --includ=* | --inclu=* | --incl=* | --inc=*) + includedir=$ac_optarg ;; + + -infodir | --infodir | --infodi | --infod | --info | --inf) + ac_prev=infodir ;; + -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) + infodir=$ac_optarg ;; + + -libdir | --libdir | --libdi | --libd) + ac_prev=libdir ;; + -libdir=* | --libdir=* | --libdi=* | --libd=*) + libdir=$ac_optarg ;; + + -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ + | --libexe | --libex | --libe) + ac_prev=libexecdir ;; + -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ + | --libexe=* | --libex=* | --libe=*) + libexecdir=$ac_optarg ;; + + -localedir | --localedir | --localedi | --localed | --locale) + ac_prev=localedir ;; + -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) + localedir=$ac_optarg ;; + + -localstatedir | --localstatedir | --localstatedi | --localstated \ + | --localstate | --localstat | --localsta | --localst | --locals) + ac_prev=localstatedir ;; + -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ + | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) + localstatedir=$ac_optarg ;; + + -mandir | --mandir | --mandi | --mand | --man | --ma | --m) + ac_prev=mandir ;; + -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) + mandir=$ac_optarg ;; + + -nfp | --nfp | --nf) + # Obsolete; use --without-fp. + with_fp=no ;; + + -no-create | --no-create | --no-creat | --no-crea | --no-cre \ + | --no-cr | --no-c | -n) + no_create=yes ;; + + -no-recursion | --no-recursion | --no-recursio | --no-recursi \ + | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) + no_recursion=yes ;; + + -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ + | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ + | --oldin | --oldi | --old | --ol | --o) + ac_prev=oldincludedir ;; + -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ + | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ + | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) + oldincludedir=$ac_optarg ;; + + -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) + ac_prev=prefix ;; + -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) + prefix=$ac_optarg ;; + + -program-prefix | --program-prefix | --program-prefi | --program-pref \ + | --program-pre | --program-pr | --program-p) + ac_prev=program_prefix ;; + -program-prefix=* | --program-prefix=* | --program-prefi=* \ + | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) + program_prefix=$ac_optarg ;; + + -program-suffix | --program-suffix | --program-suffi | --program-suff \ + | --program-suf | --program-su | --program-s) + ac_prev=program_suffix ;; + -program-suffix=* | --program-suffix=* | --program-suffi=* \ + | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) + program_suffix=$ac_optarg ;; + + -program-transform-name | --program-transform-name \ + | --program-transform-nam | --program-transform-na \ + | --program-transform-n | --program-transform- \ + | --program-transform | --program-transfor \ + | --program-transfo | --program-transf \ + | --program-trans | --program-tran \ + | --progr-tra | --program-tr | --program-t) + ac_prev=program_transform_name ;; + -program-transform-name=* | --program-transform-name=* \ + | --program-transform-nam=* | --program-transform-na=* \ + | --program-transform-n=* | --program-transform-=* \ + | --program-transform=* | --program-transfor=* \ + | --program-transfo=* | --program-transf=* \ + | --program-trans=* | --program-tran=* \ + | --progr-tra=* | --program-tr=* | --program-t=*) + program_transform_name=$ac_optarg ;; + + -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) + ac_prev=pdfdir ;; + -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) + pdfdir=$ac_optarg ;; + + -psdir | --psdir | --psdi | --psd | --ps) + ac_prev=psdir ;; + -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) + psdir=$ac_optarg ;; + + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + silent=yes ;; + + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) + ac_prev=sbindir ;; + -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ + | --sbi=* | --sb=*) + sbindir=$ac_optarg ;; + + -sharedstatedir | --sharedstatedir | --sharedstatedi \ + | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ + | --sharedst | --shareds | --shared | --share | --shar \ + | --sha | --sh) + ac_prev=sharedstatedir ;; + -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ + | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ + | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ + | --sha=* | --sh=*) + sharedstatedir=$ac_optarg ;; + + -site | --site | --sit) + ac_prev=site ;; + -site=* | --site=* | --sit=*) + site=$ac_optarg ;; + + -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) + ac_prev=srcdir ;; + -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) + srcdir=$ac_optarg ;; + + -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ + | --syscon | --sysco | --sysc | --sys | --sy) + ac_prev=sysconfdir ;; + -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ + | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) + sysconfdir=$ac_optarg ;; + + -target | --target | --targe | --targ | --tar | --ta | --t) + ac_prev=target_alias ;; + -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) + target_alias=$ac_optarg ;; + + -v | -verbose | --verbose | --verbos | --verbo | --verb) + verbose=yes ;; + + -version | --version | --versio | --versi | --vers | -V) + ac_init_version=: ;; + + -with-* | --with-*) + ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=\$ac_optarg ;; + + -without-* | --without-*) + ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=no ;; + + --x) + # Obsolete; use --with-x. + with_x=yes ;; + + -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ + | --x-incl | --x-inc | --x-in | --x-i) + ac_prev=x_includes ;; + -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ + | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) + x_includes=$ac_optarg ;; + + -x-libraries | --x-libraries | --x-librarie | --x-librari \ + | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) + ac_prev=x_libraries ;; + -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ + | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) + x_libraries=$ac_optarg ;; + + -*) as_fn_error $? "unrecognized option: \`$ac_option' +Try \`$0 --help' for more information" + ;; + + *=*) + ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` + # Reject names that are not valid shell variable names. + case $ac_envvar in #( + '' | [0-9]* | *[!_$as_cr_alnum]* ) + as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; + esac + eval $ac_envvar=\$ac_optarg + export $ac_envvar ;; + + *) + # FIXME: should be removed in autoconf 3.0. + $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 + expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && + $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 + : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" + ;; + + esac +done + +if test -n "$ac_prev"; then + ac_option=--`echo $ac_prev | sed 's/_/-/g'` + as_fn_error $? "missing argument to $ac_option" +fi + +if test -n "$ac_unrecognized_opts"; then + case $enable_option_checking in + no) ;; + fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; + *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; + esac +fi + +# Check all directory arguments for consistency. +for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ + datadir sysconfdir sharedstatedir localstatedir includedir \ + oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ + libdir localedir mandir +do + eval ac_val=\$$ac_var + # Remove trailing slashes. + case $ac_val in + */ ) + ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` + eval $ac_var=\$ac_val;; + esac + # Be sure to have absolute directory names. + case $ac_val in + [\\/$]* | ?:[\\/]* ) continue;; + NONE | '' ) case $ac_var in *prefix ) continue;; esac;; + esac + as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" +done + +# There might be people who depend on the old broken behavior: `$host' +# used to hold the argument of --host etc. +# FIXME: To remove some day. +build=$build_alias +host=$host_alias +target=$target_alias + +# FIXME: To remove some day. +if test "x$host_alias" != x; then + if test "x$build_alias" = x; then + cross_compiling=maybe + elif test "x$build_alias" != "x$host_alias"; then + cross_compiling=yes + fi +fi + +ac_tool_prefix= +test -n "$host_alias" && ac_tool_prefix=$host_alias- + +test "$silent" = yes && exec 6>/dev/null + + +ac_pwd=`pwd` && test -n "$ac_pwd" && +ac_ls_di=`ls -di .` && +ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || + as_fn_error $? "working directory cannot be determined" +test "X$ac_ls_di" = "X$ac_pwd_ls_di" || + as_fn_error $? "pwd does not report name of working directory" + + +# Find the source files, if location was not specified. +if test -z "$srcdir"; then + ac_srcdir_defaulted=yes + # Try the directory containing this script, then the parent directory. + ac_confdir=`$as_dirname -- "$as_myself" || +$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_myself" : 'X\(//\)[^/]' \| \ + X"$as_myself" : 'X\(//\)$' \| \ + X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_myself" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + srcdir=$ac_confdir + if test ! -r "$srcdir/$ac_unique_file"; then + srcdir=.. + fi +else + ac_srcdir_defaulted=no +fi +if test ! -r "$srcdir/$ac_unique_file"; then + test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." + as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" +fi +ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" +ac_abs_confdir=`( + cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" + pwd)` +# When building in place, set srcdir=. +if test "$ac_abs_confdir" = "$ac_pwd"; then + srcdir=. +fi +# Remove unnecessary trailing slashes from srcdir. +# Double slashes in file names in object file debugging info +# mess up M-x gdb in Emacs. +case $srcdir in +*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; +esac +for ac_var in $ac_precious_vars; do + eval ac_env_${ac_var}_set=\${${ac_var}+set} + eval ac_env_${ac_var}_value=\$${ac_var} + eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} + eval ac_cv_env_${ac_var}_value=\$${ac_var} +done + +# +# Report the --help message. +# +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 babl 0.1.18 to adapt to many kinds of systems. + +Usage: $0 [OPTION]... [VAR=VALUE]... + +To assign environment variables (e.g., CC, CFLAGS...), specify them as +VAR=VALUE. See below for descriptions of some of the useful variables. + +Defaults for the options are specified in brackets. + +Configuration: + -h, --help display this help and exit + --help=short display options specific to this package + --help=recursive display the short help of all the included packages + -V, --version display version information and exit + -q, --quiet, --silent do not print \`checking ...' messages + --cache-file=FILE cache test results in FILE [disabled] + -C, --config-cache alias for \`--cache-file=config.cache' + -n, --no-create do not create output files + --srcdir=DIR find the sources in DIR [configure dir or \`..'] + +Installation directories: + --prefix=PREFIX install architecture-independent files in PREFIX + [$ac_default_prefix] + --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX + [PREFIX] + +By default, \`make install' will install all the files in +\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify +an installation prefix other than \`$ac_default_prefix' using \`--prefix', +for instance \`--prefix=\$HOME'. + +For better control, use the options below. + +Fine tuning of the installation directories: + --bindir=DIR user executables [EPREFIX/bin] + --sbindir=DIR system admin executables [EPREFIX/sbin] + --libexecdir=DIR program executables [EPREFIX/libexec] + --sysconfdir=DIR read-only single-machine data [PREFIX/etc] + --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] + --localstatedir=DIR modifiable single-machine data [PREFIX/var] + --libdir=DIR object code libraries [EPREFIX/lib] + --includedir=DIR C header files [PREFIX/include] + --oldincludedir=DIR C header files for non-gcc [/usr/include] + --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] + --datadir=DIR read-only architecture-independent data [DATAROOTDIR] + --infodir=DIR info documentation [DATAROOTDIR/info] + --localedir=DIR locale-dependent data [DATAROOTDIR/locale] + --mandir=DIR man documentation [DATAROOTDIR/man] + --docdir=DIR documentation root [DATAROOTDIR/doc/babl] + --htmldir=DIR html documentation [DOCDIR] + --dvidir=DIR dvi documentation [DOCDIR] + --pdfdir=DIR pdf documentation [DOCDIR] + --psdir=DIR ps documentation [DOCDIR] +_ACEOF + + cat <<\_ACEOF + +Program names: + --program-prefix=PREFIX prepend PREFIX to installed program names + --program-suffix=SUFFIX append SUFFIX to installed program names + --program-transform-name=PROGRAM run sed PROGRAM on installed program names + +System types: + --build=BUILD configure for building on BUILD [guessed] + --host=HOST cross-compile to build programs to run on HOST [BUILD] + --target=TARGET configure for building compilers for TARGET [HOST] +_ACEOF +fi + +if test -n "$ac_init_help"; then + case $ac_init_help in + short | recursive ) echo "Configuration of babl 0.1.18:";; + esac + cat <<\_ACEOF + +Optional Features: + --disable-option-checking ignore unrecognized --enable/--with options + --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) + --enable-FEATURE[=ARG] include FEATURE [ARG=yes] + --enable-silent-rules less verbose build output (undo: "make V=1") + --disable-silent-rules verbose build output (undo: "make V=0") + --enable-dependency-tracking + do not reject slow dependency extractors + --disable-dependency-tracking + speeds up one-time build + --enable-static[=PKGS] build static libraries [default=no] + --enable-shared[=PKGS] build shared libraries [default=yes] + --enable-fast-install[=PKGS] + optimize for fast installation [default=yes] + --disable-libtool-lock avoid locking (might break parallel builds) + --disable-maintainer-mode + disable make rules and dependencies not useful (and + sometimes confusing) to the casual installer + --disable-docs disable docs generation (default=no) + --enable-mmx enable MMX support (default=auto) + --enable-sse enable SSE support (default=auto) + --enable-sse2 enable SSE2 support (default=auto) + --enable-sse4_1 enable SSE4_1 support (default=auto) + --enable-f16c enable hardware half-float support (default=auto) + --enable-altivec enable AltiVec support (default=auto) + +Optional Packages: + --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] + --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) + --with-pic[=PKGS] try to use only PIC/non-PIC objects [default=use + both] + --with-aix-soname=aix|svr4|both + shared library versioning (aka "SONAME") variant to + provide on AIX, [default=aix]. + --with-gnu-ld assume the C compiler uses GNU ld [default=no] + --with-sysroot[=DIR] Search for dependent libraries within DIR (or the + compiler's sysroot if not specified). + +Some influential environment variables: + CC C compiler command + CFLAGS C compiler flags + LDFLAGS linker flags, e.g. -L if you have libraries in a + nonstandard directory + LIBS libraries to pass to the linker, e.g. -l + CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if + you have headers in a nonstandard directory + LT_SYS_LIBRARY_PATH + User-defined run-time library search path. + CPP C preprocessor + +Use these variables to override the choices made by `configure' or to help +it to find libraries and programs with nonstandard names/locations. + +Report bugs to the package provider. +_ACEOF +ac_status=$? +fi + +if test "$ac_init_help" = "recursive"; then + # If there are subdirs, report their specific --help. + for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue + test -d "$ac_dir" || + { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || + continue + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + cd "$ac_dir" || { ac_status=$?; continue; } + # Check for guested configure. + if test -f "$ac_srcdir/configure.gnu"; then + echo && + $SHELL "$ac_srcdir/configure.gnu" --help=recursive + elif test -f "$ac_srcdir/configure"; then + echo && + $SHELL "$ac_srcdir/configure" --help=recursive + else + $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 + fi || ac_status=$? + cd "$ac_pwd" || { ac_status=$?; break; } + done +fi + +test -n "$ac_init_help" && exit $ac_status +if $ac_init_version; then + cat <<\_ACEOF +babl configure 0.1.18 +generated by GNU Autoconf 2.69 + +Copyright (C) 2012 Free Software Foundation, Inc. +This configure script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it. +_ACEOF + exit +fi + +## ------------------------ ## +## Autoconf initialization. ## +## ------------------------ ## + +# ac_fn_c_try_compile LINENO +# -------------------------- +# Try to compile conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext + if { { ac_try="$ac_compile" +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_compile") 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_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_compile + +# ac_fn_c_try_link LINENO +# ----------------------- +# Try to link conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_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_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + 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; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_link + +# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES +# ------------------------------------------------------- +# Tests whether HEADER exists and can be compiled using the include files in +# INCLUDES, setting the cache variable VAR accordingly. +ac_fn_c_check_header_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +#include <$2> +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_header_compile + +# ac_fn_c_try_cpp LINENO +# ---------------------- +# Try to preprocess conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_cpp () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_cpp conftest.$ac_ext" +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_cpp conftest.$ac_ext") 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; } > conftest.i && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_cpp + +# ac_fn_c_try_run LINENO +# ---------------------- +# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes +# that executables *can* be run. +ac_fn_c_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; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_run + +# ac_fn_c_check_func LINENO FUNC VAR +# ---------------------------------- +# Tests whether FUNC exists, setting the cache variable VAR accordingly +ac_fn_c_check_func () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +/* Define $2 to an innocuous variant, in case declares $2. + For example, HP-UX 11i declares gettimeofday. */ +#define $2 innocuous_$2 + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $2 (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef $2 + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $2 (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_$2 || defined __stub___$2 +choke me +#endif + +int +main () +{ +return $2 (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_func + +# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES +# ------------------------------------------------------- +# Tests whether HEADER exists, giving a warning if it cannot be compiled using +# the include files in INCLUDES and setting the cache variable VAR +# accordingly. +ac_fn_c_check_header_mongrel () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if eval \${$3+:} false; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +else + # Is the header compilable? +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 +$as_echo_n "checking $2 usability... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +#include <$2> +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_header_compiler=yes +else + ac_header_compiler=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 +$as_echo "$ac_header_compiler" >&6; } + +# Is the header present? +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 +$as_echo_n "checking $2 presence... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <$2> +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + ac_header_preproc=yes +else + ac_header_preproc=no +fi +rm -f conftest.err conftest.i conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 +$as_echo "$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( + yes:no: ) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 +$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} + ;; + no:yes:* ) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 +$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 +$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 +$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 +$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} + ;; +esac + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + eval "$3=\$ac_header_compiler" +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_header_mongrel +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 babl $as_me 0.1.18, which was +generated by GNU Autoconf 2.69. Invocation command line was + + $ $0 $@ + +_ACEOF +exec 5>>config.log +{ +cat <<_ASUNAME +## --------- ## +## Platform. ## +## --------- ## + +hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` + +/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` +/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` +/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` +/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` + +_ASUNAME + +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + $as_echo "PATH: $as_dir" + done +IFS=$as_save_IFS + +} >&5 + +cat >&5 <<_ACEOF + + +## ----------- ## +## Core tests. ## +## ----------- ## + +_ACEOF + + +# Keep a trace of the command line. +# Strip out --no-create and --no-recursion so they do not pile up. +# Strip out --silent because we don't want to record it for future runs. +# Also quote any args containing shell meta-characters. +# Make two passes to allow for proper duplicate-argument suppression. +ac_configure_args= +ac_configure_args0= +ac_configure_args1= +ac_must_keep_next=false +for ac_pass in 1 2 +do + for ac_arg + do + case $ac_arg in + -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + continue ;; + *\'*) + ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + case $ac_pass in + 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; + 2) + as_fn_append ac_configure_args1 " '$ac_arg'" + if test $ac_must_keep_next = true; then + ac_must_keep_next=false # Got value, back to normal. + else + case $ac_arg in + *=* | --config-cache | -C | -disable-* | --disable-* \ + | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ + | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ + | -with-* | --with-* | -without-* | --without-* | --x) + case "$ac_configure_args0 " in + "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; + esac + ;; + -* ) ac_must_keep_next=true ;; + esac + fi + as_fn_append ac_configure_args " '$ac_arg'" + ;; + esac + done +done +{ ac_configure_args0=; unset ac_configure_args0;} +{ ac_configure_args1=; unset ac_configure_args1;} + +# When interrupted or exit'd, cleanup temporary files, and complete +# config.log. We remove comments because anyway the quotes in there +# would cause problems or look ugly. +# WARNING: Use '\'' to represent an apostrophe within the trap. +# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. +trap 'exit_status=$? + # Save into config.log some information that might help in debugging. + { + echo + + $as_echo "## ---------------- ## +## Cache variables. ## +## ---------------- ##" + echo + # The following way of writing the cache mishandles newlines in values, +( + for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; + esac ;; + esac + done + (set) 2>&1 | + case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + sed -n \ + "s/'\''/'\''\\\\'\'''\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" + ;; #( + *) + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) + echo + + $as_echo "## ----------------- ## +## Output variables. ## +## ----------------- ##" + echo + for ac_var in $ac_subst_vars + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" + done | sort + echo + + if test -n "$ac_subst_files"; then + $as_echo "## ------------------- ## +## File substitutions. ## +## ------------------- ##" + echo + for ac_var in $ac_subst_files + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" + done | sort + echo + fi + + if test -s confdefs.h; then + $as_echo "## ----------- ## +## confdefs.h. ## +## ----------- ##" + echo + cat confdefs.h + echo + fi + test "$ac_signal" != 0 && + $as_echo "$as_me: caught signal $ac_signal" + $as_echo "$as_me: exit $exit_status" + } >&5 + rm -f core *.core core.conftest.* && + rm -f -r conftest* confdefs* conf$$* $ac_clean_files && + exit $exit_status +' 0 +for ac_signal in 1 2 13 15; do + trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal +done +ac_signal=0 + +# confdefs.h avoids OS command line length limits that DEFS can exceed. +rm -f -r conftest* confdefs.h + +$as_echo "/* confdefs.h */" > confdefs.h + +# Predefined preprocessor variables. + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_NAME "$PACKAGE_NAME" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_TARNAME "$PACKAGE_TARNAME" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_VERSION "$PACKAGE_VERSION" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_STRING "$PACKAGE_STRING" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_URL "$PACKAGE_URL" +_ACEOF + + +# Let the site file select an alternate cache file if it wants to. +# Prefer an explicitly selected file to automatically selected ones. +ac_site_file1=NONE +ac_site_file2=NONE +if test -n "$CONFIG_SITE"; then + # We do not want a PATH search for config.site. + case $CONFIG_SITE in #(( + -*) ac_site_file1=./$CONFIG_SITE;; + */*) ac_site_file1=$CONFIG_SITE;; + *) ac_site_file1=./$CONFIG_SITE;; + esac +elif test "x$prefix" != xNONE; then + ac_site_file1=$prefix/share/config.site + ac_site_file2=$prefix/etc/config.site +else + ac_site_file1=$ac_default_prefix/share/config.site + ac_site_file2=$ac_default_prefix/etc/config.site +fi +for ac_site_file in "$ac_site_file1" "$ac_site_file2" +do + test "x$ac_site_file" = xNONE && continue + if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 +$as_echo "$as_me: loading site script $ac_site_file" >&6;} + sed 's/^/| /' "$ac_site_file" >&5 + . "$ac_site_file" \ + || { { $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 to load site script $ac_site_file +See \`config.log' for more details" "$LINENO" 5; } + fi +done + +if test -r "$cache_file"; then + # Some versions of bash will fail to source /dev/null (special files + # actually), so we avoid doing that. DJGPP emulates it as a regular file. + if test /dev/null != "$cache_file" && test -f "$cache_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 +$as_echo "$as_me: loading cache $cache_file" >&6;} + case $cache_file in + [\\/]* | ?:[\\/]* ) . "$cache_file";; + *) . "./$cache_file";; + esac + fi +else + { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 +$as_echo "$as_me: creating cache $cache_file" >&6;} + >$cache_file +fi + +# Check that the precious variables saved in the cache have kept the same +# value. +ac_cache_corrupted=false +for ac_var in $ac_precious_vars; do + eval ac_old_set=\$ac_cv_env_${ac_var}_set + eval ac_new_set=\$ac_env_${ac_var}_set + eval ac_old_val=\$ac_cv_env_${ac_var}_value + eval ac_new_val=\$ac_env_${ac_var}_value + case $ac_old_set,$ac_new_set in + set,) + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,set) + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,);; + *) + if test "x$ac_old_val" != "x$ac_new_val"; then + # differences in whitespace do not lead to failure. + ac_old_val_w=`echo x $ac_old_val` + ac_new_val_w=`echo x $ac_new_val` + if test "$ac_old_val_w" != "$ac_new_val_w"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 +$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} + ac_cache_corrupted=: + else + { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 +$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} + eval $ac_var=\$ac_old_val + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 +$as_echo "$as_me: former value: \`$ac_old_val'" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 +$as_echo "$as_me: current value: \`$ac_new_val'" >&2;} + fi;; + esac + # Pass precious variables to config.status. + if test "$ac_new_set" = set; then + case $ac_new_val in + *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; + *) ac_arg=$ac_var=$ac_new_val ;; + esac + case " $ac_configure_args " in + *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. + *) as_fn_append ac_configure_args " '$ac_arg'" ;; + esac + fi +done +if $ac_cache_corrupted; then + { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 +$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} + as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 +fi +## -------------------- ## +## Main body of script. ## +## -------------------- ## + +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 + + + +ac_config_headers="$ac_config_headers config.h" + + + + +BABL_MAJOR_VERSION=0 +BABL_MINOR_VERSION=1 +BABL_MICRO_VERSION=18 +BABL_INTERFACE_AGE=1 +BABL_BINARY_AGE=118 +BABL_VERSION=0.1.18 +BABL_REAL_VERSION=0.1.18 +BABL_API_VERSION=0.1 + + + + + + + + + +BABL_RELEASE=0.1 + + +BABL_UNSTABLE=yes +if test "x$BABL_UNSTABLE" = "xyes"; then + +$as_echo "#define BABL_UNSTABLE 1" >>confdefs.h + +fi + if test "x$BABL_UNSTABLE" = "xyes"; then + BABL_UNSTABLE_TRUE= + BABL_UNSTABLE_FALSE='#' +else + BABL_UNSTABLE_TRUE='#' + BABL_UNSTABLE_FALSE= +fi + + + + +# libtool versioning + + + +BABL_LIBRARY_VERSION="117:1:117" +BABL_CURRENT_MINUS_AGE=0 + + + + +ac_aux_dir= +for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do + if test -f "$ac_dir/install-sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install-sh -c" + break + elif test -f "$ac_dir/install.sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install.sh -c" + break + elif test -f "$ac_dir/shtool"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/shtool install -c" + break + fi +done +if test -z "$ac_aux_dir"; then + as_fn_error $? "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5 +fi + +# These three variables are undocumented and unsupported, +# and are intended to be withdrawn in a future Autoconf release. +# They can cause serious problems if a builder's source tree is in a directory +# whose full name contains unusual characters. +ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. +ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. +ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. + + +# Make sure we can run config.sub. +$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || + as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 +$as_echo_n "checking build system type... " >&6; } +if ${ac_cv_build+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_build_alias=$build_alias +test "x$ac_build_alias" = x && + ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` +test "x$ac_build_alias" = x && + as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 +ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || + as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 +$as_echo "$ac_cv_build" >&6; } +case $ac_cv_build in +*-*-*) ;; +*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; +esac +build=$ac_cv_build +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_build +shift +build_cpu=$1 +build_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +build_os=$* +IFS=$ac_save_IFS +case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 +$as_echo_n "checking host system type... " >&6; } +if ${ac_cv_host+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "x$host_alias" = x; then + ac_cv_host=$ac_cv_build +else + ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || + as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 +$as_echo "$ac_cv_host" >&6; } +case $ac_cv_host in +*-*-*) ;; +*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; +esac +host=$ac_cv_host +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_host +shift +host_cpu=$1 +host_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +host_os=$* +IFS=$ac_save_IFS +case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking target system type" >&5 +$as_echo_n "checking target system type... " >&6; } +if ${ac_cv_target+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "x$target_alias" = x; then + ac_cv_target=$ac_cv_host +else + ac_cv_target=`$SHELL "$ac_aux_dir/config.sub" $target_alias` || + as_fn_error $? "$SHELL $ac_aux_dir/config.sub $target_alias failed" "$LINENO" 5 +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_target" >&5 +$as_echo "$ac_cv_target" >&6; } +case $ac_cv_target in +*-*-*) ;; +*) as_fn_error $? "invalid value of canonical target" "$LINENO" 5;; +esac +target=$ac_cv_target +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_target +shift +target_cpu=$1 +target_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +target_os=$* +IFS=$ac_save_IFS +case $target_os in *\ *) target_os=`echo "$target_os" | sed 's/ /-/g'`;; esac + + +# The aliases save the names the user supplied, while $host etc. +# will get canonicalized. +test -n "$target_alias" && + test "$program_prefix$program_suffix$program_transform_name" = \ + NONENONEs,x,x, && + program_prefix=${target_alias}- + +am__api_version='1.15' + +# Find a good install program. We prefer a C program (faster), +# so one script is as good as another. But avoid the broken or +# incompatible versions: +# SysV /etc/install, /usr/sbin/install +# SunOS /usr/etc/install +# IRIX /sbin/install +# AIX /bin/install +# AmigaOS /C/install, which installs bootblocks on floppy discs +# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag +# AFS /usr/afsws/bin/install, which mishandles nonexistent args +# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" +# OS/2's system install, which has a completely different semantic +# ./install, which can be erroneously created by make from ./install.sh. +# Reject install programs that cannot install multiple files. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 +$as_echo_n "checking for a BSD-compatible install... " >&6; } +if test -z "$INSTALL"; then +if ${ac_cv_path_install+:} false; then : + $as_echo_n "(cached) " >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + # Account for people who put trailing slashes in PATH elements. +case $as_dir/ in #(( + ./ | .// | /[cC]/* | \ + /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ + ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ + /usr/ucb/* ) ;; + *) + # OSF1 and SCO ODT 3.0 have their own names for install. + # Don't use installbsd from OSF since it installs stuff as root + # by default. + for ac_prog in ginstall scoinst install; do + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then + if test $ac_prog = install && + grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # AIX install. It has an incompatible calling convention. + : + elif test $ac_prog = install && + grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # program-specific install script used by HP pwplus--don't use. + : + else + rm -rf conftest.one conftest.two conftest.dir + echo one > conftest.one + echo two > conftest.two + mkdir conftest.dir + if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && + test -s conftest.one && test -s conftest.two && + test -s conftest.dir/conftest.one && + test -s conftest.dir/conftest.two + then + ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" + break 3 + fi + fi + fi + done + done + ;; +esac + + done +IFS=$as_save_IFS + +rm -rf conftest.one conftest.two conftest.dir + +fi + if test "${ac_cv_path_install+set}" = set; then + INSTALL=$ac_cv_path_install + else + # As a last resort, use the slow shell script. Don't cache a + # value for INSTALL within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the value is a relative name. + INSTALL=$ac_install_sh + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 +$as_echo "$INSTALL" >&6; } + +# Use test -z because SunOS4 sh mishandles braces in ${var-val}. +# It thinks the first close brace ends the variable substitution. +test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' + +test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' + +test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 +$as_echo_n "checking whether build environment is sane... " >&6; } +# Reject unsafe characters in $srcdir or the absolute working directory +# name. Accept space and tab only in the latter. +am_lf=' +' +case `pwd` in + *[\\\"\#\$\&\'\`$am_lf]*) + as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;; +esac +case $srcdir in + *[\\\"\#\$\&\'\`$am_lf\ \ ]*) + as_fn_error $? "unsafe srcdir value: '$srcdir'" "$LINENO" 5;; +esac + +# Do 'set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + am_has_slept=no + for am_try in 1 2; do + echo "timestamp, slept: $am_has_slept" > conftest.file + set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` + if test "$*" = "X"; then + # -L didn't work. + set X `ls -t "$srcdir/configure" conftest.file` + fi + if test "$*" != "X $srcdir/configure conftest.file" \ + && test "$*" != "X conftest.file $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + as_fn_error $? "ls -t appears to fail. Make sure there is not a broken + alias in your environment" "$LINENO" 5 + fi + if test "$2" = conftest.file || test $am_try -eq 2; then + break + fi + # Just in case. + sleep 1 + am_has_slept=yes + done + test "$2" = conftest.file + ) +then + # Ok. + : +else + as_fn_error $? "newly created file is older than distributed files! +Check your system clock" "$LINENO" 5 +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +# If we didn't sleep, we still need to ensure time stamps of config.status and +# generated files are strictly newer. +am_sleep_pid= +if grep 'slept: no' conftest.file >/dev/null 2>&1; then + ( sleep 1 ) & + am_sleep_pid=$! +fi + +rm -f conftest.file + +test "$program_prefix" != NONE && + program_transform_name="s&^&$program_prefix&;$program_transform_name" +# Use a double $ so make ignores it. +test "$program_suffix" != NONE && + program_transform_name="s&\$&$program_suffix&;$program_transform_name" +# Double any \ or $. +# By default was `s,x,x', remove it if useless. +ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' +program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` + +# Expand $ac_aux_dir to an absolute path. +am_aux_dir=`cd "$ac_aux_dir" && pwd` + +if test x"${MISSING+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; + *) + MISSING="\${SHELL} $am_aux_dir/missing" ;; + esac +fi +# Use eval to expand $SHELL +if eval "$MISSING --is-lightweight"; then + am_missing_run="$MISSING " +else + am_missing_run= + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5 +$as_echo "$as_me: WARNING: 'missing' script is too old or missing" >&2;} +fi + +if test x"${install_sh+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; + *) + install_sh="\${SHELL} $am_aux_dir/install-sh" + esac +fi + +# Installed binaries are usually stripped using 'strip' when the user +# run "make install-strip". However 'strip' might not be the right +# tool to use in cross-compilation environments, therefore Automake +# will honor the 'STRIP' environment variable to overrule this program. +if test "$cross_compiling" != no; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. +set dummy ${ac_tool_prefix}strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$STRIP"; then + ac_cv_prog_STRIP="$STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_STRIP="${ac_tool_prefix}strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +STRIP=$ac_cv_prog_STRIP +if test -n "$STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 +$as_echo "$STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_STRIP"; then + ac_ct_STRIP=$STRIP + # Extract the first word of "strip", so it can be a program name with args. +set dummy strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_STRIP"; then + ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_STRIP="strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP +if test -n "$ac_ct_STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 +$as_echo "$ac_ct_STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_STRIP" = x; then + STRIP=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + STRIP=$ac_ct_STRIP + fi +else + STRIP="$ac_cv_prog_STRIP" +fi + +fi +INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 +$as_echo_n "checking for a thread-safe mkdir -p... " >&6; } +if test -z "$MKDIR_P"; then + if ${ac_cv_path_mkdir+:} false; then : + $as_echo_n "(cached) " >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in mkdir gmkdir; do + for ac_exec_ext in '' $ac_executable_extensions; do + as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext" || continue + case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( + 'mkdir (GNU coreutils) '* | \ + 'mkdir (coreutils) '* | \ + 'mkdir (fileutils) '4.1*) + ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext + break 3;; + esac + done + done + done +IFS=$as_save_IFS + +fi + + test -d ./--version && rmdir ./--version + if test "${ac_cv_path_mkdir+set}" = set; then + MKDIR_P="$ac_cv_path_mkdir -p" + else + # As a last resort, use the slow shell script. Don't cache a + # value for MKDIR_P within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the value is a relative name. + MKDIR_P="$ac_install_sh -d" + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 +$as_echo "$MKDIR_P" >&6; } + +for ac_prog in gawk mawk nawk awk +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AWK+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AWK"; then + ac_cv_prog_AWK="$AWK" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AWK="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AWK=$ac_cv_prog_AWK +if test -n "$AWK"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 +$as_echo "$AWK" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$AWK" && break +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 +$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } +set x ${MAKE-make} +ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` +if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat >conftest.make <<\_ACEOF +SHELL = /bin/sh +all: + @echo '@@@%%%=$(MAKE)=@@@%%%' +_ACEOF +# GNU make sometimes prints "make[1]: Entering ...", which would confuse us. +case `${MAKE-make} -f conftest.make 2>/dev/null` in + *@@@%%%=?*=@@@%%%*) + eval ac_cv_prog_make_${ac_make}_set=yes;; + *) + eval ac_cv_prog_make_${ac_make}_set=no;; +esac +rm -f conftest.make +fi +if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + SET_MAKE= +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + SET_MAKE="MAKE=${MAKE-make}" +fi + +rm -rf .tst 2>/dev/null +mkdir .tst 2>/dev/null +if test -d .tst; then + am__leading_dot=. +else + am__leading_dot=_ +fi +rmdir .tst 2>/dev/null + +# Check whether --enable-silent-rules was given. +if test "${enable_silent_rules+set}" = set; then : + enableval=$enable_silent_rules; +fi + +case $enable_silent_rules in # ((( + yes) AM_DEFAULT_VERBOSITY=0;; + no) AM_DEFAULT_VERBOSITY=1;; + *) AM_DEFAULT_VERBOSITY=1;; +esac +am_make=${MAKE-make} +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 +$as_echo_n "checking whether $am_make supports nested variables... " >&6; } +if ${am_cv_make_support_nested_variables+:} false; then : + $as_echo_n "(cached) " >&6 +else + if $as_echo 'TRUE=$(BAR$(V)) +BAR0=false +BAR1=true +V=1 +am__doit: + @$(TRUE) +.PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then + am_cv_make_support_nested_variables=yes +else + am_cv_make_support_nested_variables=no +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 +$as_echo "$am_cv_make_support_nested_variables" >&6; } +if test $am_cv_make_support_nested_variables = yes; then + AM_V='$(V)' + AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' +else + AM_V=$AM_DEFAULT_VERBOSITY + AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY +fi +AM_BACKSLASH='\' + +if test "`cd $srcdir && pwd`" != "`pwd`"; then + # Use -I$(srcdir) only when $(srcdir) != ., so that make's output + # is not polluted with repeated "-I." + am__isrc=' -I$(srcdir)' + # test to see if srcdir already configured + if test -f $srcdir/config.status; then + as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 + fi +fi + +# test whether we have cygpath +if test -z "$CYGPATH_W"; then + if (cygpath --version) >/dev/null 2>/dev/null; then + CYGPATH_W='cygpath -w' + else + CYGPATH_W=echo + fi +fi + + +# Define the identity of the package. + PACKAGE='babl' + VERSION='0.1.18' + + +# Some tools Automake needs. + +ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} + + +AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} + + +AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} + + +AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} + + +MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} + +# For better backward compatibility. To be removed once Automake 1.9.x +# dies out for good. For more background, see: +# +# +mkdir_p='$(MKDIR_P)' + +# We need awk for the "check" target (and possibly the TAP driver). The +# system "awk" is bad on some platforms. +# Always define AMTAR for backward compatibility. Yes, it's still used +# in the wild :-( We should find a proper way to deprecate it ... +AMTAR='$${TAR-tar}' + + +# We'll loop over all known methods to create a tar archive until one works. +_am_tools='gnutar pax cpio none' + +am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -' + + + + + + +# POSIX will say in a future version that running "rm -f" with no argument +# is OK; and we want to be able to make that assumption in our Makefile +# recipes. So use an aggressive probe to check that the usage we want is +# actually supported "in the wild" to an acceptable degree. +# See automake bug#10828. +# To make any issue more visible, cause the running configure to be aborted +# by default if the 'rm' program in use doesn't match our expectations; the +# user can still override this though. +if rm -f && rm -fr && rm -rf; then : OK; else + cat >&2 <<'END' +Oops! + +Your 'rm' program seems unable to run without file operands specified +on the command line, even when the '-f' option is present. This is contrary +to the behaviour of most rm programs out there, and not conforming with +the upcoming POSIX standard: + +Please tell bug-automake@gnu.org about your system, including the value +of your $PATH and any error possibly output before this message. This +can help us improve future automake versions. + +END + if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then + echo 'Configuration will proceed anyway, since you have set the' >&2 + echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 + echo >&2 + else + cat >&2 <<'END' +Aborting the configuration process, to ensure you take notice of the issue. + +You can download and install GNU coreutils to get an 'rm' implementation +that behaves properly: . + +If you want to complete the configuration process using your problematic +'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM +to "yes", and re-run configure. + +END + as_fn_error $? "Your 'rm' program is bad, sorry." "$LINENO" 5 + fi +fi + + +# Enable silent build rules by default, requires at least +# Automake-1.11. Disable by either passing --disable-silent-rules to +# configure or passing V=1 to make +# Check whether --enable-silent-rules was given. +if test "${enable_silent_rules+set}" = set; then : + enableval=$enable_silent_rules; +fi + +case $enable_silent_rules in # ((( + yes) AM_DEFAULT_VERBOSITY=0;; + no) AM_DEFAULT_VERBOSITY=1;; + *) AM_DEFAULT_VERBOSITY=0;; +esac +am_make=${MAKE-make} +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 +$as_echo_n "checking whether $am_make supports nested variables... " >&6; } +if ${am_cv_make_support_nested_variables+:} false; then : + $as_echo_n "(cached) " >&6 +else + if $as_echo 'TRUE=$(BAR$(V)) +BAR0=false +BAR1=true +V=1 +am__doit: + @$(TRUE) +.PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then + am_cv_make_support_nested_variables=yes +else + am_cv_make_support_nested_variables=no +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 +$as_echo "$am_cv_make_support_nested_variables" >&6; } +if test $am_cv_make_support_nested_variables = yes; then + AM_V='$(V)' + AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' +else + AM_V=$AM_DEFAULT_VERBOSITY + AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY +fi +AM_BACKSLASH='\' + + +# Prefer clang on OSX, because GCC isn't updated + +case "$build_os" in + darwin10.* | darwin9.* | darwin8.*) + ;; + darwin*) + prefered_cc="clang" + prefered_cxx="clang++" + ;; + *) + ;; +esac + +if test -z "$CC" && test -n "$prefered_cc"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: setting CC to $prefered_cc for $build_os" >&5 +$as_echo "$as_me: setting CC to $prefered_cc for $build_os" >&6;} + CC=$prefered_cc +fi + +if test -z "$CXX" && test -n "$prefered_cc"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: setting CXX to $prefered_cxx for $build_os" >&5 +$as_echo "$as_me: setting CXX to $prefered_cxx for $build_os" >&6;} + CXX=$prefered_cxx +fi + +# Check for programs +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 test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. +set dummy ${ac_tool_prefix}gcc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}gcc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "gcc", so it can be a program name with args. +set dummy gcc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="gcc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +else + CC="$ac_cv_prog_CC" +fi + +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. +set dummy ${ac_tool_prefix}cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}cc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + fi +fi +if test -z "$CC"; then + # Extract the first word of "cc", so it can be a program name with args. +set dummy cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + ac_prog_rejected=no +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then + ac_prog_rejected=yes + continue + fi + ac_cv_prog_CC="cc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. + set dummy $ac_cv_prog_CC + shift + if test $# != 0; then + # We chose a different compiler from the bogus one. + # However, it has the same basename, so the bogon will be chosen + # first if we set CC to just the basename; use the full file name. + shift + ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" + fi +fi +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + for ac_prog in cl.exe + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$CC" && break + done +fi +if test -z "$CC"; then + ac_ct_CC=$CC + for ac_prog in cl.exe +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_CC" && break +done + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +fi + +fi + + +test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "no acceptable C compiler found in \$PATH +See \`config.log' for more details" "$LINENO" 5; } + +# Provide some information about the compiler. +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +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_compiler $ac_option >&5") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done + +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" +# Try to create an executable without -o first, disregard a.out. +# It will help us diagnose broken compilers, and finding out an intuition +# of exeext. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 +$as_echo_n "checking whether the C compiler works... " >&6; } +ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` + +# The possible output files: +ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" + +ac_rmfiles= +for ac_file in $ac_files +do + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + * ) ac_rmfiles="$ac_rmfiles $ac_file";; + esac +done +rm -f $ac_rmfiles + +if { { ac_try="$ac_link_default" +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_default") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. +# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' +# in a Makefile. We should not override ac_cv_exeext if it was cached, +# so that the user can short-circuit this test for compilers unknown to +# Autoconf. +for ac_file in $ac_files '' +do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) + ;; + [ab].out ) + # We found the default executable, but exeext='' is most + # certainly right. + break;; + *.* ) + if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; + then :; else + ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + fi + # We set ac_cv_exeext here because the later test for it is not + # safe: cross compilers may not add the suffix if given an `-o' + # argument, so we may need to know it at that point already. + # Even if this section looks crufty: it has the advantage of + # actually working. + break;; + * ) + break;; + esac +done +test "$ac_cv_exeext" = no && ac_cv_exeext= + +else + ac_file='' +fi +if test -z "$ac_file"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +$as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error 77 "C compiler cannot create executables +See \`config.log' for more details" "$LINENO" 5; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 +$as_echo_n "checking for C compiler default output file name... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 +$as_echo "$ac_file" >&6; } +ac_exeext=$ac_cv_exeext + +rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out +ac_clean_files=$ac_clean_files_save +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 +$as_echo_n "checking for suffix of executables... " >&6; } +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; }; then : + # If both `conftest.exe' and `conftest' are `present' (well, observable) +# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will +# work properly (i.e., refer to `conftest.exe'), while it won't with +# `rm'. +for ac_file in conftest.exe conftest conftest.*; do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + break;; + * ) break;; + esac +done +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 $? "cannot compute suffix of executables: cannot compile and link +See \`config.log' for more details" "$LINENO" 5; } +fi +rm -f conftest conftest$ac_cv_exeext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 +$as_echo "$ac_cv_exeext" >&6; } + +rm -f conftest.$ac_ext +EXEEXT=$ac_cv_exeext +ac_exeext=$EXEEXT +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main () +{ +FILE *f = fopen ("conftest.out", "w"); + return ferror (f) || fclose (f) != 0; + + ; + return 0; +} +_ACEOF +ac_clean_files="$ac_clean_files conftest.out" +# Check that the compiler produces executables we can run. If not, either +# the compiler is broken, or we cross compile. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 +$as_echo_n "checking whether we are cross compiling... " >&6; } +if test "$cross_compiling" != yes; then + { { 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; } + if { ac_try='./conftest$ac_cv_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 + cross_compiling=no + else + if test "$cross_compiling" = maybe; then + cross_compiling=yes + 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 $? "cannot run C compiled programs. +If you meant to cross compile, use \`--host'. +See \`config.log' for more details" "$LINENO" 5; } + fi + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 +$as_echo "$cross_compiling" >&6; } + +rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out +ac_clean_files=$ac_clean_files_save +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 +$as_echo_n "checking for suffix of object files... " >&6; } +if ${ac_cv_objext+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.o conftest.obj +if { { ac_try="$ac_compile" +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_compile") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + for ac_file in conftest.o conftest.obj conftest.*; do + test -f "$ac_file" || continue; + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; + *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` + break;; + esac +done +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot compute suffix of object files: cannot compile +See \`config.log' for more details" "$LINENO" 5; } +fi +rm -f conftest.$ac_cv_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 +$as_echo "$ac_cv_objext" >&6; } +OBJEXT=$ac_cv_objext +ac_objext=$OBJEXT +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 +$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } +if ${ac_cv_c_compiler_gnu+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_compiler_gnu=yes +else + ac_compiler_gnu=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_c_compiler_gnu=$ac_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 +$as_echo "$ac_cv_c_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GCC=yes +else + GCC= +fi +ac_test_CFLAGS=${CFLAGS+set} +ac_save_CFLAGS=$CFLAGS +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 +$as_echo_n "checking whether $CC accepts -g... " >&6; } +if ${ac_cv_prog_cc_g+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_save_c_werror_flag=$ac_c_werror_flag + ac_c_werror_flag=yes + ac_cv_prog_cc_g=no + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +else + CFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + +else + ac_c_werror_flag=$ac_save_c_werror_flag + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_c_werror_flag=$ac_save_c_werror_flag +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 +$as_echo "$ac_cv_prog_cc_g" >&6; } +if test "$ac_test_CFLAGS" = set; then + CFLAGS=$ac_save_CFLAGS +elif test $ac_cv_prog_cc_g = yes; then + if test "$GCC" = yes; then + CFLAGS="-g -O2" + else + CFLAGS="-g" + fi +else + if test "$GCC" = yes; then + CFLAGS="-O2" + else + CFLAGS= + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 +$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } +if ${ac_cv_prog_cc_c89+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_prog_cc_c89=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +struct stat; +/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ +struct buf { int x; }; +FILE * (*rcsopen) (struct buf *, struct stat *, int); +static char *e (p, i) + char **p; + int i; +{ + return p[i]; +} +static char *f (char * (*g) (char **, int), char **p, ...) +{ + char *s; + va_list v; + va_start (v,p); + s = g (p, va_arg (v,int)); + va_end (v); + return s; +} + +/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has + function prototypes and stuff, but not '\xHH' hex character constants. + These don't provoke an error unfortunately, instead are silently treated + as 'x'. The following induces an error, until -std is added to get + proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an + array size at least. It's necessary to write '\x00'==0 to get something + that's true only with -std. */ +int osf4_cc_array ['\x00' == 0 ? 1 : -1]; + +/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters + inside strings and character constants. */ +#define FOO(x) 'x' +int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; + +int test (int i, double x); +struct s1 {int (*f) (int a);}; +struct s2 {int (*f) (double a);}; +int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); +int argc; +char **argv; +int +main () +{ +return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; + ; + return 0; +} +_ACEOF +for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ + -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +do + CC="$ac_save_CC $ac_arg" + if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_c89=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext + test "x$ac_cv_prog_cc_c89" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC + +fi +# AC_CACHE_VAL +case "x$ac_cv_prog_cc_c89" in + x) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; + xno) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; + *) + CC="$CC $ac_cv_prog_cc_c89" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 +$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; +esac +if test "x$ac_cv_prog_cc_c89" != xno; then : + +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 + +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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5 +$as_echo_n "checking whether $CC understands -c and -o together... " >&6; } +if ${am_cv_prog_cc_c_o+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF + # Make sure it works both with $CC and with simple cc. + # Following AC_PROG_CC_C_O, we do the test twice because some + # compilers refuse to overwrite an existing .o file with -o, + # though they will create one. + am_cv_prog_cc_c_o=yes + for am_i in 1 2; do + if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5 + ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } \ + && test -f conftest2.$ac_objext; then + : OK + else + am_cv_prog_cc_c_o=no + break + fi + done + rm -f core conftest* + unset am_i +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5 +$as_echo "$am_cv_prog_cc_c_o" >&6; } +if test "$am_cv_prog_cc_c_o" != yes; then + # Losing compiler, so override with the script. + # FIXME: It is wrong to rewrite CC. + # But if we don't then we get into trouble of one sort or another. + # A longer-term fix would be to have automake use am__CC in this case, + # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" + CC="$am_aux_dir/compile $CC" +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 + +DEPDIR="${am__leading_dot}deps" + +ac_config_commands="$ac_config_commands depfiles" + + +am_make=${MAKE-make} +cat > confinc << 'END' +am__doit: + @echo this is the am__doit target +.PHONY: am__doit +END +# If we don't find an include directive, just comment out the code. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 +$as_echo_n "checking for style of include used by $am_make... " >&6; } +am__include="#" +am__quote= +_am_result=none +# First try GNU make style include. +echo "include confinc" > confmf +# Ignore all kinds of additional output from 'make'. +case `$am_make -s -f confmf 2> /dev/null` in #( +*the\ am__doit\ target*) + am__include=include + am__quote= + _am_result=GNU + ;; +esac +# Now try BSD make style include. +if test "$am__include" = "#"; then + echo '.include "confinc"' > confmf + case `$am_make -s -f confmf 2> /dev/null` in #( + *the\ am__doit\ target*) + am__include=.include + am__quote="\"" + _am_result=BSD + ;; + esac +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 +$as_echo "$_am_result" >&6; } +rm -f confinc confmf + +# Check whether --enable-dependency-tracking was given. +if test "${enable_dependency_tracking+set}" = set; then : + enableval=$enable_dependency_tracking; +fi + +if test "x$enable_dependency_tracking" != xno; then + am_depcomp="$ac_aux_dir/depcomp" + AMDEPBACKSLASH='\' + am__nodep='_no' +fi + if test "x$enable_dependency_tracking" != xno; then + AMDEP_TRUE= + AMDEP_FALSE='#' +else + AMDEP_TRUE='#' + AMDEP_FALSE= +fi + + + +depcc="$CC" am_compiler_list= + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 +$as_echo_n "checking dependency style of $depcc... " >&6; } +if ${am_cv_CC_dependencies_compiler_type+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named 'D' -- because '-MD' means "put the output + # in D". + rm -rf conftest.dir + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_CC_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` + fi + am__universal=false + case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with + # Solaris 10 /bin/sh. + echo '/* dummy */' > sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with '-c' and '-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle '-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs. + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # After this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested. + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvc7 | msvc7msys | msvisualcpp | msvcmsys) + # This compiler won't grok '-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_CC_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_CC_dependencies_compiler_type=none +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 +$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } +CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type + + if + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then + am__fastdepCC_TRUE= + am__fastdepCC_FALSE='#' +else + am__fastdepCC_TRUE='#' + am__fastdepCC_FALSE= +fi + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C99" >&5 +$as_echo_n "checking for $CC option to accept ISO C99... " >&6; } +if ${ac_cv_prog_cc_c99+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_prog_cc_c99=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#include +#include +#include + +// Check varargs macros. These examples are taken from C99 6.10.3.5. +#define debug(...) fprintf (stderr, __VA_ARGS__) +#define showlist(...) puts (#__VA_ARGS__) +#define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__)) +static void +test_varargs_macros (void) +{ + int x = 1234; + int y = 5678; + debug ("Flag"); + debug ("X = %d\n", x); + showlist (The first, second, and third items.); + report (x>y, "x is %d but y is %d", x, y); +} + +// Check long long types. +#define BIG64 18446744073709551615ull +#define BIG32 4294967295ul +#define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0) +#if !BIG_OK + your preprocessor is broken; +#endif +#if BIG_OK +#else + your preprocessor is broken; +#endif +static long long int bignum = -9223372036854775807LL; +static unsigned long long int ubignum = BIG64; + +struct incomplete_array +{ + int datasize; + double data[]; +}; + +struct named_init { + int number; + const wchar_t *name; + double average; +}; + +typedef const char *ccp; + +static inline int +test_restrict (ccp restrict text) +{ + // See if C++-style comments work. + // Iterate through items via the restricted pointer. + // Also check for declarations in for loops. + for (unsigned int i = 0; *(text+i) != '\0'; ++i) + continue; + return 0; +} + +// Check varargs and va_copy. +static void +test_varargs (const char *format, ...) +{ + va_list args; + va_start (args, format); + va_list args_copy; + va_copy (args_copy, args); + + const char *str; + int number; + float fnumber; + + while (*format) + { + switch (*format++) + { + case 's': // string + str = va_arg (args_copy, const char *); + break; + case 'd': // int + number = va_arg (args_copy, int); + break; + case 'f': // float + fnumber = va_arg (args_copy, double); + break; + default: + break; + } + } + va_end (args_copy); + va_end (args); +} + +int +main () +{ + + // Check bool. + _Bool success = false; + + // Check restrict. + if (test_restrict ("String literal") == 0) + success = true; + char *restrict newvar = "Another string"; + + // Check varargs. + test_varargs ("s, d' f .", "string", 65, 34.234); + test_varargs_macros (); + + // Check flexible array members. + struct incomplete_array *ia = + malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10)); + ia->datasize = 10; + for (int i = 0; i < ia->datasize; ++i) + ia->data[i] = i * 1.234; + + // Check named initializers. + struct named_init ni = { + .number = 34, + .name = L"Test wide string", + .average = 543.34343, + }; + + ni.number = 58; + + int dynamic_array[ni.number]; + dynamic_array[ni.number - 1] = 543; + + // work around unused variable warnings + return (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == 'x' + || dynamic_array[ni.number - 1] != 543); + + ; + return 0; +} +_ACEOF +for ac_arg in '' -std=gnu99 -std=c99 -c99 -AC99 -D_STDC_C99= -qlanglvl=extc99 +do + CC="$ac_save_CC $ac_arg" + if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_c99=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext + test "x$ac_cv_prog_cc_c99" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC + +fi +# AC_CACHE_VAL +case "x$ac_cv_prog_cc_c99" in + x) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; + xno) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; + *) + CC="$CC $ac_cv_prog_cc_c99" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5 +$as_echo "$ac_cv_prog_cc_c99" >&6; } ;; +esac +if test "x$ac_cv_prog_cc_c99" != xno; then : + +fi + + + +# Initialize libtool + +case `pwd` in + *\ * | *\ *) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 +$as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;; +esac + + + +macro_version='2.4.6' +macro_revision='2.4.6' + + + + + + + + + + + + + +ltmain=$ac_aux_dir/ltmain.sh + +# Backslashify metacharacters that are still active within +# double-quoted strings. +sed_quote_subst='s/\(["`$\\]\)/\\\1/g' + +# Same as above, but do not quote variable references. +double_quote_subst='s/\(["`\\]\)/\\\1/g' + +# Sed substitution to delay expansion of an escaped shell variable in a +# double_quote_subst'ed string. +delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' + +# Sed substitution to delay expansion of an escaped single quote. +delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' + +# Sed substitution to avoid accidental globbing in evaled expressions +no_glob_subst='s/\*/\\\*/g' + +ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO +ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5 +$as_echo_n "checking how to print strings... " >&6; } +# Test print first, because it will be a builtin if present. +if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ + test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then + ECHO='print -r --' +elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then + ECHO='printf %s\n' +else + # Use this function as a fallback that always works. + func_fallback_echo () + { + eval 'cat <<_LTECHO_EOF +$1 +_LTECHO_EOF' + } + ECHO='func_fallback_echo' +fi + +# func_echo_all arg... +# Invoke $ECHO with all args, space-separated. +func_echo_all () +{ + $ECHO "" +} + +case $ECHO in + printf*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: printf" >&5 +$as_echo "printf" >&6; } ;; + print*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: print -r" >&5 +$as_echo "print -r" >&6; } ;; + *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: cat" >&5 +$as_echo "cat" >&6; } ;; +esac + + + + + + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 +$as_echo_n "checking for a sed that does not truncate output... " >&6; } +if ${ac_cv_path_SED+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ + for ac_i in 1 2 3 4 5 6 7; do + ac_script="$ac_script$as_nl$ac_script" + done + echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed + { ac_script=; unset ac_script;} + if test -z "$SED"; then + ac_path_SED_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in sed gsed; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_SED" || continue +# Check for GNU ac_path_SED and select it if it is found. + # Check for GNU $ac_path_SED +case `"$ac_path_SED" --version 2>&1` in +*GNU*) + ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo '' >> "conftest.nl" + "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_SED_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_SED="$ac_path_SED" + ac_path_SED_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_SED_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_SED"; then + as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 + fi +else + ac_cv_path_SED=$SED +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 +$as_echo "$ac_cv_path_SED" >&6; } + SED="$ac_cv_path_SED" + rm -f conftest.sed + +test -z "$SED" && SED=sed +Xsed="$SED -e 1s/^X//" + + + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 +$as_echo_n "checking for grep that handles long lines and -e... " >&6; } +if ${ac_cv_path_GREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$GREP"; then + ac_path_GREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in grep ggrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_GREP" || continue +# Check for GNU ac_path_GREP and select it if it is found. + # Check for GNU $ac_path_GREP +case `"$ac_path_GREP" --version 2>&1` in +*GNU*) + ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'GREP' >> "conftest.nl" + "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_GREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_GREP="$ac_path_GREP" + ac_path_GREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_GREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_GREP"; then + as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_GREP=$GREP +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 +$as_echo "$ac_cv_path_GREP" >&6; } + GREP="$ac_cv_path_GREP" + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 +$as_echo_n "checking for egrep... " >&6; } +if ${ac_cv_path_EGREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 + then ac_cv_path_EGREP="$GREP -E" + else + if test -z "$EGREP"; then + ac_path_EGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in egrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_EGREP" || continue +# Check for GNU ac_path_EGREP and select it if it is found. + # Check for GNU $ac_path_EGREP +case `"$ac_path_EGREP" --version 2>&1` in +*GNU*) + ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'EGREP' >> "conftest.nl" + "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_EGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_EGREP="$ac_path_EGREP" + ac_path_EGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_EGREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_EGREP"; then + as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_EGREP=$EGREP +fi + + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 +$as_echo "$ac_cv_path_EGREP" >&6; } + EGREP="$ac_cv_path_EGREP" + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 +$as_echo_n "checking for fgrep... " >&6; } +if ${ac_cv_path_FGREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 + then ac_cv_path_FGREP="$GREP -F" + else + if test -z "$FGREP"; then + ac_path_FGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in fgrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_FGREP" || continue +# Check for GNU ac_path_FGREP and select it if it is found. + # Check for GNU $ac_path_FGREP +case `"$ac_path_FGREP" --version 2>&1` in +*GNU*) + ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'FGREP' >> "conftest.nl" + "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_FGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_FGREP="$ac_path_FGREP" + ac_path_FGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_FGREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_FGREP"; then + as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_FGREP=$FGREP +fi + + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 +$as_echo "$ac_cv_path_FGREP" >&6; } + FGREP="$ac_cv_path_FGREP" + + +test -z "$GREP" && GREP=grep + + + + + + + + + + + + + + + + + + + +# Check whether --with-gnu-ld was given. +if test "${with_gnu_ld+set}" = set; then : + withval=$with_gnu_ld; test no = "$withval" || with_gnu_ld=yes +else + with_gnu_ld=no +fi + +ac_prog=ld +if test yes = "$GCC"; then + # Check if gcc -print-prog-name=ld gives a path. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 +$as_echo_n "checking for ld used by $CC... " >&6; } + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return, which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [\\/]* | ?:[\\/]*) + re_direlt='/[^/][^/]*/\.\./' + # Canonicalize the pathname of ld + ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` + while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do + ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` + done + test -z "$LD" && LD=$ac_prog + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test yes = "$with_gnu_ld"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 +$as_echo_n "checking for GNU ld... " >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 +$as_echo_n "checking for non-GNU ld... " >&6; } +fi +if ${lt_cv_path_LD+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$LD"; then + lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS=$lt_save_ifs + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + lt_cv_path_LD=$ac_dir/$ac_prog + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some variants of GNU ld only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$lt_cv_path_LD" -v 2>&1 &5 +$as_echo "$LD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi +test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 +$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } +if ${lt_cv_prog_gnu_ld+:} false; then : + $as_echo_n "(cached) " >&6 +else + # I'd rather use --version here, but apparently some GNU lds only accept -v. +case `$LD -v 2>&1 &5 +$as_echo "$lt_cv_prog_gnu_ld" >&6; } +with_gnu_ld=$lt_cv_prog_gnu_ld + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5 +$as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; } +if ${lt_cv_path_NM+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$NM"; then + # Let the user override the test. + lt_cv_path_NM=$NM +else + lt_nm_to_check=${ac_tool_prefix}nm + if test -n "$ac_tool_prefix" && test "$build" = "$host"; then + lt_nm_to_check="$lt_nm_to_check nm" + fi + for lt_tmp_nm in $lt_nm_to_check; do + lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR + for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do + IFS=$lt_save_ifs + test -z "$ac_dir" && ac_dir=. + tmp_nm=$ac_dir/$lt_tmp_nm + if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext"; then + # Check to see if the nm accepts a BSD-compat flag. + # Adding the 'sed 1q' prevents false positives on HP-UX, which says: + # nm: unknown option "B" ignored + # Tru64's nm complains that /dev/null is an invalid object file + # MSYS converts /dev/null to NUL, MinGW nm treats NUL as empty + case $build_os in + mingw*) lt_bad_file=conftest.nm/nofile ;; + *) lt_bad_file=/dev/null ;; + esac + case `"$tmp_nm" -B $lt_bad_file 2>&1 | sed '1q'` in + *$lt_bad_file* | *'Invalid file or object type'*) + lt_cv_path_NM="$tmp_nm -B" + break 2 + ;; + *) + case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in + */dev/null*) + lt_cv_path_NM="$tmp_nm -p" + break 2 + ;; + *) + lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but + continue # so that we can try to find one that supports BSD flags + ;; + esac + ;; + esac + fi + done + IFS=$lt_save_ifs + done + : ${lt_cv_path_NM=no} +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 +$as_echo "$lt_cv_path_NM" >&6; } +if test no != "$lt_cv_path_NM"; then + NM=$lt_cv_path_NM +else + # Didn't find any BSD compatible name lister, look for dumpbin. + if test -n "$DUMPBIN"; then : + # Let the user override the test. + else + if test -n "$ac_tool_prefix"; then + for ac_prog in dumpbin "link -dump" + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_DUMPBIN+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$DUMPBIN"; then + ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +DUMPBIN=$ac_cv_prog_DUMPBIN +if test -n "$DUMPBIN"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5 +$as_echo "$DUMPBIN" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$DUMPBIN" && break + done +fi +if test -z "$DUMPBIN"; then + ac_ct_DUMPBIN=$DUMPBIN + for ac_prog in dumpbin "link -dump" +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_DUMPBIN+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_DUMPBIN"; then + ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_DUMPBIN="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN +if test -n "$ac_ct_DUMPBIN"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5 +$as_echo "$ac_ct_DUMPBIN" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_DUMPBIN" && break +done + + if test "x$ac_ct_DUMPBIN" = x; then + DUMPBIN=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DUMPBIN=$ac_ct_DUMPBIN + fi +fi + + case `$DUMPBIN -symbols -headers /dev/null 2>&1 | sed '1q'` in + *COFF*) + DUMPBIN="$DUMPBIN -symbols -headers" + ;; + *) + DUMPBIN=: + ;; + esac + fi + + if test : != "$DUMPBIN"; then + NM=$DUMPBIN + fi +fi +test -z "$NM" && NM=nm + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5 +$as_echo_n "checking the name lister ($NM) interface... " >&6; } +if ${lt_cv_nm_interface+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_nm_interface="BSD nm" + echo "int some_variable = 0;" > conftest.$ac_ext + (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&5) + (eval "$ac_compile" 2>conftest.err) + cat conftest.err >&5 + (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&5) + (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) + cat conftest.err >&5 + (eval echo "\"\$as_me:$LINENO: output\"" >&5) + cat conftest.out >&5 + if $GREP 'External.*some_variable' conftest.out > /dev/null; then + lt_cv_nm_interface="MS dumpbin" + fi + rm -f conftest* +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5 +$as_echo "$lt_cv_nm_interface" >&6; } + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 +$as_echo_n "checking whether ln -s works... " >&6; } +LN_S=$as_ln_s +if test "$LN_S" = "ln -s"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 +$as_echo "no, using $LN_S" >&6; } +fi + +# find the maximum length of command line arguments +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5 +$as_echo_n "checking the maximum length of command line arguments... " >&6; } +if ${lt_cv_sys_max_cmd_len+:} false; then : + $as_echo_n "(cached) " >&6 +else + i=0 + teststring=ABCD + + case $build_os in + msdosdjgpp*) + # On DJGPP, this test can blow up pretty badly due to problems in libc + # (any single argument exceeding 2000 bytes causes a buffer overrun + # during glob expansion). Even if it were fixed, the result of this + # check would be larger than it should be. + lt_cv_sys_max_cmd_len=12288; # 12K is about right + ;; + + gnu*) + # Under GNU Hurd, this test is not required because there is + # no limit to the length of command line arguments. + # Libtool will interpret -1 as no limit whatsoever + lt_cv_sys_max_cmd_len=-1; + ;; + + cygwin* | mingw* | cegcc*) + # On Win9x/ME, this test blows up -- it succeeds, but takes + # about 5 minutes as the teststring grows exponentially. + # Worse, since 9x/ME are not pre-emptively multitasking, + # you end up with a "frozen" computer, even though with patience + # the test eventually succeeds (with a max line length of 256k). + # Instead, let's just punt: use the minimum linelength reported by + # all of the supported platforms: 8192 (on NT/2K/XP). + lt_cv_sys_max_cmd_len=8192; + ;; + + mint*) + # On MiNT this can take a long time and run out of memory. + lt_cv_sys_max_cmd_len=8192; + ;; + + amigaos*) + # On AmigaOS with pdksh, this test takes hours, literally. + # So we just punt and use a minimum line length of 8192. + lt_cv_sys_max_cmd_len=8192; + ;; + + bitrig* | darwin* | dragonfly* | freebsd* | netbsd* | openbsd*) + # This has been around since 386BSD, at least. Likely further. + if test -x /sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` + elif test -x /usr/sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` + else + lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs + fi + # And add a safety zone + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + ;; + + interix*) + # We know the value 262144 and hardcode it with a safety zone (like BSD) + lt_cv_sys_max_cmd_len=196608 + ;; + + os2*) + # The test takes a long time on OS/2. + lt_cv_sys_max_cmd_len=8192 + ;; + + osf*) + # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure + # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not + # nice to cause kernel panics so lets avoid the loop below. + # First set a reasonable default. + lt_cv_sys_max_cmd_len=16384 + # + if test -x /sbin/sysconfig; then + case `/sbin/sysconfig -q proc exec_disable_arg_limit` in + *1*) lt_cv_sys_max_cmd_len=-1 ;; + esac + fi + ;; + sco3.2v5*) + lt_cv_sys_max_cmd_len=102400 + ;; + sysv5* | sco5v6* | sysv4.2uw2*) + kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` + if test -n "$kargmax"; then + lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'` + else + lt_cv_sys_max_cmd_len=32768 + fi + ;; + *) + lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` + if test -n "$lt_cv_sys_max_cmd_len" && \ + test undefined != "$lt_cv_sys_max_cmd_len"; then + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + else + # Make teststring a little bigger before we do anything with it. + # a 1K string should be a reasonable start. + for i in 1 2 3 4 5 6 7 8; do + teststring=$teststring$teststring + done + SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} + # If test is not a shell built-in, we'll probably end up computing a + # maximum length that is only half of the actual maximum length, but + # we can't tell. + while { test X`env echo "$teststring$teststring" 2>/dev/null` \ + = "X$teststring$teststring"; } >/dev/null 2>&1 && + test 17 != "$i" # 1/2 MB should be enough + do + i=`expr $i + 1` + teststring=$teststring$teststring + done + # Only check the string length outside the loop. + lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` + teststring= + # Add a significant safety factor because C++ compilers can tack on + # massive amounts of additional arguments before passing them to the + # linker. It appears as though 1/2 is a usable value. + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` + fi + ;; + esac + +fi + +if test -n "$lt_cv_sys_max_cmd_len"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5 +$as_echo "$lt_cv_sys_max_cmd_len" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 +$as_echo "none" >&6; } +fi +max_cmd_len=$lt_cv_sys_max_cmd_len + + + + + + +: ${CP="cp -f"} +: ${MV="mv -f"} +: ${RM="rm -f"} + +if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then + lt_unset=unset +else + lt_unset=false +fi + + + + + +# test EBCDIC or ASCII +case `echo X|tr X '\101'` in + A) # ASCII based system + # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr + lt_SP2NL='tr \040 \012' + lt_NL2SP='tr \015\012 \040\040' + ;; + *) # EBCDIC based system + lt_SP2NL='tr \100 \n' + lt_NL2SP='tr \r\n \100\100' + ;; +esac + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5 +$as_echo_n "checking how to convert $build file names to $host format... " >&6; } +if ${lt_cv_to_host_file_cmd+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $host in + *-*-mingw* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 + ;; + *-*-cygwin* ) + lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 + ;; + * ) # otherwise, assume *nix + lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 + ;; + esac + ;; + *-*-cygwin* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin + ;; + *-*-cygwin* ) + lt_cv_to_host_file_cmd=func_convert_file_noop + ;; + * ) # otherwise, assume *nix + lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin + ;; + esac + ;; + * ) # unhandled hosts (and "normal" native builds) + lt_cv_to_host_file_cmd=func_convert_file_noop + ;; +esac + +fi + +to_host_file_cmd=$lt_cv_to_host_file_cmd +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5 +$as_echo "$lt_cv_to_host_file_cmd" >&6; } + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5 +$as_echo_n "checking how to convert $build file names to toolchain format... " >&6; } +if ${lt_cv_to_tool_file_cmd+:} false; then : + $as_echo_n "(cached) " >&6 +else + #assume ordinary cross tools, or native build. +lt_cv_to_tool_file_cmd=func_convert_file_noop +case $host in + *-*-mingw* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 + ;; + esac + ;; +esac + +fi + +to_tool_file_cmd=$lt_cv_to_tool_file_cmd +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5 +$as_echo "$lt_cv_to_tool_file_cmd" >&6; } + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5 +$as_echo_n "checking for $LD option to reload object files... " >&6; } +if ${lt_cv_ld_reload_flag+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_ld_reload_flag='-r' +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5 +$as_echo "$lt_cv_ld_reload_flag" >&6; } +reload_flag=$lt_cv_ld_reload_flag +case $reload_flag in +"" | " "*) ;; +*) reload_flag=" $reload_flag" ;; +esac +reload_cmds='$LD$reload_flag -o $output$reload_objs' +case $host_os in + cygwin* | mingw* | pw32* | cegcc*) + if test yes != "$GCC"; then + reload_cmds=false + fi + ;; + darwin*) + if test yes = "$GCC"; then + reload_cmds='$LTCC $LTCFLAGS -nostdlib $wl-r -o $output$reload_objs' + else + reload_cmds='$LD$reload_flag -o $output$reload_objs' + fi + ;; +esac + + + + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. +set dummy ${ac_tool_prefix}objdump; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_OBJDUMP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$OBJDUMP"; then + ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +OBJDUMP=$ac_cv_prog_OBJDUMP +if test -n "$OBJDUMP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 +$as_echo "$OBJDUMP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_OBJDUMP"; then + ac_ct_OBJDUMP=$OBJDUMP + # Extract the first word of "objdump", so it can be a program name with args. +set dummy objdump; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OBJDUMP"; then + ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_OBJDUMP="objdump" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP +if test -n "$ac_ct_OBJDUMP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 +$as_echo "$ac_ct_OBJDUMP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_OBJDUMP" = x; then + OBJDUMP="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OBJDUMP=$ac_ct_OBJDUMP + fi +else + OBJDUMP="$ac_cv_prog_OBJDUMP" +fi + +test -z "$OBJDUMP" && OBJDUMP=objdump + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5 +$as_echo_n "checking how to recognize dependent libraries... " >&6; } +if ${lt_cv_deplibs_check_method+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_file_magic_cmd='$MAGIC_CMD' +lt_cv_file_magic_test_file= +lt_cv_deplibs_check_method='unknown' +# Need to set the preceding variable on all platforms that support +# interlibrary dependencies. +# 'none' -- dependencies not supported. +# 'unknown' -- same as none, but documents that we really don't know. +# 'pass_all' -- all dependencies passed with no checks. +# 'test_compile' -- check by making test program. +# 'file_magic [[regex]]' -- check by looking for files in library path +# that responds to the $file_magic_cmd with a given extended regex. +# If you have 'file' or equivalent on your system and you're not sure +# whether 'pass_all' will *always* work, you probably want this one. + +case $host_os in +aix[4-9]*) + lt_cv_deplibs_check_method=pass_all + ;; + +beos*) + lt_cv_deplibs_check_method=pass_all + ;; + +bsdi[45]*) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' + lt_cv_file_magic_cmd='/usr/bin/file -L' + lt_cv_file_magic_test_file=/shlib/libc.so + ;; + +cygwin*) + # func_win32_libid is a shell function defined in ltmain.sh + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + ;; + +mingw* | pw32*) + # Base MSYS/MinGW do not provide the 'file' command needed by + # func_win32_libid shell function, so use a weaker test based on 'objdump', + # unless we find 'file', for example because we are cross-compiling. + if ( file / ) >/dev/null 2>&1; then + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + else + # Keep this pattern in sync with the one in func_win32_libid. + lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' + lt_cv_file_magic_cmd='$OBJDUMP -f' + fi + ;; + +cegcc*) + # use the weaker test based on 'objdump'. See mingw*. + lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' + lt_cv_file_magic_cmd='$OBJDUMP -f' + ;; + +darwin* | rhapsody*) + lt_cv_deplibs_check_method=pass_all + ;; + +freebsd* | dragonfly*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + case $host_cpu in + i*86 ) + # Not sure whether the presence of OpenBSD here was a mistake. + # Let's accept both of them until this is cleared up. + lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` + ;; + esac + else + lt_cv_deplibs_check_method=pass_all + fi + ;; + +haiku*) + lt_cv_deplibs_check_method=pass_all + ;; + +hpux10.20* | hpux11*) + lt_cv_file_magic_cmd=/usr/bin/file + case $host_cpu in + ia64*) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' + lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so + ;; + hppa*64*) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]' + lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl + ;; + *) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9]\.[0-9]) shared library' + lt_cv_file_magic_test_file=/usr/lib/libc.sl + ;; + esac + ;; + +interix[3-9]*) + # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$' + ;; + +irix5* | irix6* | nonstopux*) + case $LD in + *-32|*"-32 ") libmagic=32-bit;; + *-n32|*"-n32 ") libmagic=N32;; + *-64|*"-64 ") libmagic=64-bit;; + *) libmagic=never-match;; + esac + lt_cv_deplibs_check_method=pass_all + ;; + +# This must be glibc/ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + lt_cv_deplibs_check_method=pass_all + ;; + +netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' + fi + ;; + +newos6*) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=/usr/lib/libnls.so + ;; + +*nto* | *qnx*) + lt_cv_deplibs_check_method=pass_all + ;; + +openbsd* | bitrig*) + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' + fi + ;; + +osf3* | osf4* | osf5*) + lt_cv_deplibs_check_method=pass_all + ;; + +rdos*) + lt_cv_deplibs_check_method=pass_all + ;; + +solaris*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv4 | sysv4.3*) + case $host_vendor in + motorola) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` + ;; + ncr) + lt_cv_deplibs_check_method=pass_all + ;; + sequent) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' + ;; + sni) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" + lt_cv_file_magic_test_file=/lib/libc.so + ;; + siemens) + lt_cv_deplibs_check_method=pass_all + ;; + pc) + lt_cv_deplibs_check_method=pass_all + ;; + esac + ;; + +tpf*) + lt_cv_deplibs_check_method=pass_all + ;; +os2*) + lt_cv_deplibs_check_method=pass_all + ;; +esac + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5 +$as_echo "$lt_cv_deplibs_check_method" >&6; } + +file_magic_glob= +want_nocaseglob=no +if test "$build" = "$host"; then + case $host_os in + mingw* | pw32*) + if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then + want_nocaseglob=yes + else + file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[\1]\/[\1]\/g;/g"` + fi + ;; + esac +fi + +file_magic_cmd=$lt_cv_file_magic_cmd +deplibs_check_method=$lt_cv_deplibs_check_method +test -z "$deplibs_check_method" && deplibs_check_method=unknown + + + + + + + + + + + + + + + + + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. +set dummy ${ac_tool_prefix}dlltool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_DLLTOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$DLLTOOL"; then + ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +DLLTOOL=$ac_cv_prog_DLLTOOL +if test -n "$DLLTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 +$as_echo "$DLLTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_DLLTOOL"; then + ac_ct_DLLTOOL=$DLLTOOL + # Extract the first word of "dlltool", so it can be a program name with args. +set dummy dlltool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_DLLTOOL"; then + ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_DLLTOOL="dlltool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL +if test -n "$ac_ct_DLLTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 +$as_echo "$ac_ct_DLLTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_DLLTOOL" = x; then + DLLTOOL="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DLLTOOL=$ac_ct_DLLTOOL + fi +else + DLLTOOL="$ac_cv_prog_DLLTOOL" +fi + +test -z "$DLLTOOL" && DLLTOOL=dlltool + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5 +$as_echo_n "checking how to associate runtime and link libraries... " >&6; } +if ${lt_cv_sharedlib_from_linklib_cmd+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_sharedlib_from_linklib_cmd='unknown' + +case $host_os in +cygwin* | mingw* | pw32* | cegcc*) + # two different shell functions defined in ltmain.sh; + # decide which one to use based on capabilities of $DLLTOOL + case `$DLLTOOL --help 2>&1` in + *--identify-strict*) + lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib + ;; + *) + lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback + ;; + esac + ;; +*) + # fallback: assume linklib IS sharedlib + lt_cv_sharedlib_from_linklib_cmd=$ECHO + ;; +esac + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5 +$as_echo "$lt_cv_sharedlib_from_linklib_cmd" >&6; } +sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd +test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO + + + + + + + + +if test -n "$ac_tool_prefix"; then + for ac_prog in ar + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AR="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$AR" && break + done +fi +if test -z "$AR"; then + ac_ct_AR=$AR + for ac_prog in ar +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_AR="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_AR" && break +done + + if test "x$ac_ct_AR" = x; then + AR="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi +fi + +: ${AR=ar} +: ${AR_FLAGS=cru} + + + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5 +$as_echo_n "checking for archiver @FILE support... " >&6; } +if ${lt_cv_ar_at_file+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_ar_at_file=no + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + echo conftest.$ac_objext > conftest.lst + lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&5' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 + (eval $lt_ar_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + if test 0 -eq "$ac_status"; then + # Ensure the archiver fails upon bogus file names. + rm -f conftest.$ac_objext libconftest.a + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 + (eval $lt_ar_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + if test 0 -ne "$ac_status"; then + lt_cv_ar_at_file=@ + fi + fi + rm -f conftest.* libconftest.a + +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5 +$as_echo "$lt_cv_ar_at_file" >&6; } + +if test no = "$lt_cv_ar_at_file"; then + archiver_list_spec= +else + archiver_list_spec=$lt_cv_ar_at_file +fi + + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. +set dummy ${ac_tool_prefix}strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$STRIP"; then + ac_cv_prog_STRIP="$STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_STRIP="${ac_tool_prefix}strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +STRIP=$ac_cv_prog_STRIP +if test -n "$STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 +$as_echo "$STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_STRIP"; then + ac_ct_STRIP=$STRIP + # Extract the first word of "strip", so it can be a program name with args. +set dummy strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_STRIP"; then + ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_STRIP="strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP +if test -n "$ac_ct_STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 +$as_echo "$ac_ct_STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_STRIP" = x; then + STRIP=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + STRIP=$ac_ct_STRIP + fi +else + STRIP="$ac_cv_prog_STRIP" +fi + +test -z "$STRIP" && STRIP=: + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. +set dummy ${ac_tool_prefix}ranlib; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_RANLIB+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$RANLIB"; then + ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +RANLIB=$ac_cv_prog_RANLIB +if test -n "$RANLIB"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 +$as_echo "$RANLIB" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_RANLIB"; then + ac_ct_RANLIB=$RANLIB + # Extract the first word of "ranlib", so it can be a program name with args. +set dummy ranlib; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_RANLIB"; then + ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_RANLIB="ranlib" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB +if test -n "$ac_ct_RANLIB"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 +$as_echo "$ac_ct_RANLIB" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_RANLIB" = x; then + RANLIB=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + RANLIB=$ac_ct_RANLIB + fi +else + RANLIB="$ac_cv_prog_RANLIB" +fi + +test -z "$RANLIB" && RANLIB=: + + + + + + +# Determine commands to create old-style static archives. +old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' +old_postinstall_cmds='chmod 644 $oldlib' +old_postuninstall_cmds= + +if test -n "$RANLIB"; then + case $host_os in + bitrig* | openbsd*) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" + ;; + *) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" + ;; + esac + old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" +fi + +case $host_os in + darwin*) + lock_old_archive_extraction=yes ;; + *) + lock_old_archive_extraction=no ;; +esac + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC + + +# Check for command to grab the raw symbol name followed by C symbol from nm. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5 +$as_echo_n "checking command to parse $NM output from $compiler object... " >&6; } +if ${lt_cv_sys_global_symbol_pipe+:} false; then : + $as_echo_n "(cached) " >&6 +else + +# These are sane defaults that work on at least a few old systems. +# [They come from Ultrix. What could be older than Ultrix?!! ;)] + +# Character class describing NM global symbol codes. +symcode='[BCDEGRST]' + +# Regexp to match symbols that can be accessed directly from C. +sympat='\([_A-Za-z][_A-Za-z0-9]*\)' + +# Define system-specific variables. +case $host_os in +aix*) + symcode='[BCDT]' + ;; +cygwin* | mingw* | pw32* | cegcc*) + symcode='[ABCDGISTW]' + ;; +hpux*) + if test ia64 = "$host_cpu"; then + symcode='[ABCDEGRST]' + fi + ;; +irix* | nonstopux*) + symcode='[BCDEGRST]' + ;; +osf*) + symcode='[BCDEGQRST]' + ;; +solaris*) + symcode='[BDRT]' + ;; +sco3.2v5*) + symcode='[DT]' + ;; +sysv4.2uw2*) + symcode='[DT]' + ;; +sysv5* | sco5v6* | unixware* | OpenUNIX*) + symcode='[ABDT]' + ;; +sysv4) + symcode='[DFNSTU]' + ;; +esac + +# If we're using GNU nm, then use its standard symbol codes. +case `$NM -V 2>&1` in +*GNU* | *'with BFD'*) + symcode='[ABCDGIRSTW]' ;; +esac + +if test "$lt_cv_nm_interface" = "MS dumpbin"; then + # Gets list of data symbols to import. + lt_cv_sys_global_symbol_to_import="sed -n -e 's/^I .* \(.*\)$/\1/p'" + # Adjust the below global symbol transforms to fixup imported variables. + lt_cdecl_hook=" -e 's/^I .* \(.*\)$/extern __declspec(dllimport) char \1;/p'" + lt_c_name_hook=" -e 's/^I .* \(.*\)$/ {\"\1\", (void *) 0},/p'" + lt_c_name_lib_hook="\ + -e 's/^I .* \(lib.*\)$/ {\"\1\", (void *) 0},/p'\ + -e 's/^I .* \(.*\)$/ {\"lib\1\", (void *) 0},/p'" +else + # Disable hooks by default. + lt_cv_sys_global_symbol_to_import= + lt_cdecl_hook= + lt_c_name_hook= + lt_c_name_lib_hook= +fi + +# Transform an extracted symbol line into a proper C declaration. +# Some systems (esp. on ia64) link data and code symbols differently, +# so use this general approach. +lt_cv_sys_global_symbol_to_cdecl="sed -n"\ +$lt_cdecl_hook\ +" -e 's/^T .* \(.*\)$/extern int \1();/p'"\ +" -e 's/^$symcode$symcode* .* \(.*\)$/extern char \1;/p'" + +# Transform an extracted symbol line into symbol name and symbol address +lt_cv_sys_global_symbol_to_c_name_address="sed -n"\ +$lt_c_name_hook\ +" -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ +" -e 's/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/p'" + +# Transform an extracted symbol line into symbol name with lib prefix and +# symbol address. +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n"\ +$lt_c_name_lib_hook\ +" -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ +" -e 's/^$symcode$symcode* .* \(lib.*\)$/ {\"\1\", (void *) \&\1},/p'"\ +" -e 's/^$symcode$symcode* .* \(.*\)$/ {\"lib\1\", (void *) \&\1},/p'" + +# Handle CRLF in mingw tool chain +opt_cr= +case $build_os in +mingw*) + opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp + ;; +esac + +# Try without a prefix underscore, then with it. +for ac_symprfx in "" "_"; do + + # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. + symxfrm="\\1 $ac_symprfx\\2 \\2" + + # Write the raw and C identifiers. + if test "$lt_cv_nm_interface" = "MS dumpbin"; then + # Fake it for dumpbin and say T for any non-static function, + # D for any global variable and I for any imported variable. + # Also find C++ and __fastcall symbols from MSVC++, + # which start with @ or ?. + lt_cv_sys_global_symbol_pipe="$AWK '"\ +" {last_section=section; section=\$ 3};"\ +" /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ +" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ +" /^ *Symbol name *: /{split(\$ 0,sn,\":\"); si=substr(sn[2],2)};"\ +" /^ *Type *: code/{print \"T\",si,substr(si,length(prfx))};"\ +" /^ *Type *: data/{print \"I\",si,substr(si,length(prfx))};"\ +" \$ 0!~/External *\|/{next};"\ +" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ +" {if(hide[section]) next};"\ +" {f=\"D\"}; \$ 0~/\(\).*\|/{f=\"T\"};"\ +" {split(\$ 0,a,/\||\r/); split(a[2],s)};"\ +" s[1]~/^[@?]/{print f,s[1],s[1]; next};"\ +" s[1]~prfx {split(s[1],t,\"@\"); print f,t[1],substr(t[1],length(prfx))}"\ +" ' prfx=^$ac_symprfx" + else + lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" + fi + lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" + + # Check to see that the pipe works correctly. + pipe_works=no + + rm -f conftest* + cat > conftest.$ac_ext <<_LT_EOF +#ifdef __cplusplus +extern "C" { +#endif +char nm_test_var; +void nm_test_func(void); +void nm_test_func(void){} +#ifdef __cplusplus +} +#endif +int main(){nm_test_var='a';nm_test_func();return(0);} +_LT_EOF + + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + # Now try to grab the symbols. + nlist=conftest.nm + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist\""; } >&5 + (eval $NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s "$nlist"; then + # Try sorting and uniquifying the output. + if sort "$nlist" | uniq > "$nlist"T; then + mv -f "$nlist"T "$nlist" + else + rm -f "$nlist"T + fi + + # Make sure that we snagged all the symbols we need. + if $GREP ' nm_test_var$' "$nlist" >/dev/null; then + if $GREP ' nm_test_func$' "$nlist" >/dev/null; then + cat <<_LT_EOF > conftest.$ac_ext +/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ +#if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE +/* DATA imports from DLLs on WIN32 can't be const, because runtime + relocations are performed -- see ld's documentation on pseudo-relocs. */ +# define LT_DLSYM_CONST +#elif defined __osf__ +/* This system does not cope well with relocations in const data. */ +# define LT_DLSYM_CONST +#else +# define LT_DLSYM_CONST const +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +_LT_EOF + # Now generate the symbol file. + eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' + + cat <<_LT_EOF >> conftest.$ac_ext + +/* The mapping between symbol names and symbols. */ +LT_DLSYM_CONST struct { + const char *name; + void *address; +} +lt__PROGRAM__LTX_preloaded_symbols[] = +{ + { "@PROGRAM@", (void *) 0 }, +_LT_EOF + $SED "s/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext + cat <<\_LT_EOF >> conftest.$ac_ext + {0, (void *) 0} +}; + +/* This works around a problem in FreeBSD linker */ +#ifdef FREEBSD_WORKAROUND +static const void *lt_preloaded_setup() { + return lt__PROGRAM__LTX_preloaded_symbols; +} +#endif + +#ifdef __cplusplus +} +#endif +_LT_EOF + # Now try linking the two files. + mv conftest.$ac_objext conftstm.$ac_objext + lt_globsym_save_LIBS=$LIBS + lt_globsym_save_CFLAGS=$CFLAGS + LIBS=conftstm.$ac_objext + CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s conftest$ac_exeext; then + pipe_works=yes + fi + LIBS=$lt_globsym_save_LIBS + CFLAGS=$lt_globsym_save_CFLAGS + else + echo "cannot find nm_test_func in $nlist" >&5 + fi + else + echo "cannot find nm_test_var in $nlist" >&5 + fi + else + echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 + fi + else + echo "$progname: failed program was:" >&5 + cat conftest.$ac_ext >&5 + fi + rm -rf conftest* conftst* + + # Do not use the global_symbol_pipe unless it works. + if test yes = "$pipe_works"; then + break + else + lt_cv_sys_global_symbol_pipe= + fi +done + +fi + +if test -z "$lt_cv_sys_global_symbol_pipe"; then + lt_cv_sys_global_symbol_to_cdecl= +fi +if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5 +$as_echo "failed" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 +$as_echo "ok" >&6; } +fi + +# Response file support. +if test "$lt_cv_nm_interface" = "MS dumpbin"; then + nm_file_list_spec='@' +elif $NM --help 2>/dev/null | grep '[@]FILE' >/dev/null; then + nm_file_list_spec='@' +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5 +$as_echo_n "checking for sysroot... " >&6; } + +# Check whether --with-sysroot was given. +if test "${with_sysroot+set}" = set; then : + withval=$with_sysroot; +else + with_sysroot=no +fi + + +lt_sysroot= +case $with_sysroot in #( + yes) + if test yes = "$GCC"; then + lt_sysroot=`$CC --print-sysroot 2>/dev/null` + fi + ;; #( + /*) + lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` + ;; #( + no|'') + ;; #( + *) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_sysroot" >&5 +$as_echo "$with_sysroot" >&6; } + as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5 + ;; +esac + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5 +$as_echo "${lt_sysroot:-no}" >&6; } + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a working dd" >&5 +$as_echo_n "checking for a working dd... " >&6; } +if ${ac_cv_path_lt_DD+:} false; then : + $as_echo_n "(cached) " >&6 +else + printf 0123456789abcdef0123456789abcdef >conftest.i +cat conftest.i conftest.i >conftest2.i +: ${lt_DD:=$DD} +if test -z "$lt_DD"; then + ac_path_lt_DD_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in dd; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_lt_DD="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_lt_DD" || continue +if "$ac_path_lt_DD" bs=32 count=1 conftest.out 2>/dev/null; then + cmp -s conftest.i conftest.out \ + && ac_cv_path_lt_DD="$ac_path_lt_DD" ac_path_lt_DD_found=: +fi + $ac_path_lt_DD_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_lt_DD"; then + : + fi +else + ac_cv_path_lt_DD=$lt_DD +fi + +rm -f conftest.i conftest2.i conftest.out +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_lt_DD" >&5 +$as_echo "$ac_cv_path_lt_DD" >&6; } + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to truncate binary pipes" >&5 +$as_echo_n "checking how to truncate binary pipes... " >&6; } +if ${lt_cv_truncate_bin+:} false; then : + $as_echo_n "(cached) " >&6 +else + printf 0123456789abcdef0123456789abcdef >conftest.i +cat conftest.i conftest.i >conftest2.i +lt_cv_truncate_bin= +if "$ac_cv_path_lt_DD" bs=32 count=1 conftest.out 2>/dev/null; then + cmp -s conftest.i conftest.out \ + && lt_cv_truncate_bin="$ac_cv_path_lt_DD bs=4096 count=1" +fi +rm -f conftest.i conftest2.i conftest.out +test -z "$lt_cv_truncate_bin" && lt_cv_truncate_bin="$SED -e 4q" +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_truncate_bin" >&5 +$as_echo "$lt_cv_truncate_bin" >&6; } + + + + + + + +# Calculate cc_basename. Skip known compiler wrappers and cross-prefix. +func_cc_basename () +{ + for cc_temp in $*""; do + case $cc_temp in + compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; + distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; + \-*) ;; + *) break;; + esac + done + func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` +} + +# Check whether --enable-libtool-lock was given. +if test "${enable_libtool_lock+set}" = set; then : + enableval=$enable_libtool_lock; +fi + +test no = "$enable_libtool_lock" || enable_libtool_lock=yes + +# Some flags need to be propagated to the compiler or linker for good +# libtool support. +case $host in +ia64-*-hpux*) + # Find out what ABI is being produced by ac_compile, and set mode + # options accordingly. + echo 'int i;' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + case `/usr/bin/file conftest.$ac_objext` in + *ELF-32*) + HPUX_IA64_MODE=32 + ;; + *ELF-64*) + HPUX_IA64_MODE=64 + ;; + esac + fi + rm -rf conftest* + ;; +*-*-irix6*) + # Find out what ABI is being produced by ac_compile, and set linker + # options accordingly. + echo '#line '$LINENO' "configure"' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + if test yes = "$lt_cv_prog_gnu_ld"; then + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -melf32bsmip" + ;; + *N32*) + LD="${LD-ld} -melf32bmipn32" + ;; + *64-bit*) + LD="${LD-ld} -melf64bmip" + ;; + esac + else + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -32" + ;; + *N32*) + LD="${LD-ld} -n32" + ;; + *64-bit*) + LD="${LD-ld} -64" + ;; + esac + fi + fi + rm -rf conftest* + ;; + +mips64*-*linux*) + # Find out what ABI is being produced by ac_compile, and set linker + # options accordingly. + echo '#line '$LINENO' "configure"' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + emul=elf + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + emul="${emul}32" + ;; + *64-bit*) + emul="${emul}64" + ;; + esac + case `/usr/bin/file conftest.$ac_objext` in + *MSB*) + emul="${emul}btsmip" + ;; + *LSB*) + emul="${emul}ltsmip" + ;; + esac + case `/usr/bin/file conftest.$ac_objext` in + *N32*) + emul="${emul}n32" + ;; + esac + LD="${LD-ld} -m $emul" + fi + rm -rf conftest* + ;; + +x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \ +s390*-*linux*|s390*-*tpf*|sparc*-*linux*) + # Find out what ABI is being produced by ac_compile, and set linker + # options accordingly. Note that the listed cases only cover the + # situations where additional linker options are needed (such as when + # doing 32-bit compilation for a host where ld defaults to 64-bit, or + # vice versa); the common cases where no linker options are needed do + # not appear in the list. + echo 'int i;' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + case `/usr/bin/file conftest.o` in + *32-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_i386_fbsd" + ;; + x86_64-*linux*) + case `/usr/bin/file conftest.o` in + *x86-64*) + LD="${LD-ld} -m elf32_x86_64" + ;; + *) + LD="${LD-ld} -m elf_i386" + ;; + esac + ;; + powerpc64le-*linux*) + LD="${LD-ld} -m elf32lppclinux" + ;; + powerpc64-*linux*) + LD="${LD-ld} -m elf32ppclinux" + ;; + s390x-*linux*) + LD="${LD-ld} -m elf_s390" + ;; + sparc64-*linux*) + LD="${LD-ld} -m elf32_sparc" + ;; + esac + ;; + *64-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_x86_64_fbsd" + ;; + x86_64-*linux*) + LD="${LD-ld} -m elf_x86_64" + ;; + powerpcle-*linux*) + LD="${LD-ld} -m elf64lppc" + ;; + powerpc-*linux*) + LD="${LD-ld} -m elf64ppc" + ;; + s390*-*linux*|s390*-*tpf*) + LD="${LD-ld} -m elf64_s390" + ;; + sparc*-*linux*) + LD="${LD-ld} -m elf64_sparc" + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; + +*-*-sco3.2v5*) + # On SCO OpenServer 5, we need -belf to get full-featured binaries. + SAVE_CFLAGS=$CFLAGS + CFLAGS="$CFLAGS -belf" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5 +$as_echo_n "checking whether the C compiler needs -belf... " >&6; } +if ${lt_cv_cc_needs_belf+:} false; then : + $as_echo_n "(cached) " >&6 +else + 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 + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + lt_cv_cc_needs_belf=yes +else + lt_cv_cc_needs_belf=no +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 + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5 +$as_echo "$lt_cv_cc_needs_belf" >&6; } + if test yes != "$lt_cv_cc_needs_belf"; then + # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf + CFLAGS=$SAVE_CFLAGS + fi + ;; +*-*solaris*) + # Find out what ABI is being produced by ac_compile, and set linker + # options accordingly. + echo 'int i;' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + case `/usr/bin/file conftest.o` in + *64-bit*) + case $lt_cv_prog_gnu_ld in + yes*) + case $host in + i?86-*-solaris*|x86_64-*-solaris*) + LD="${LD-ld} -m elf_x86_64" + ;; + sparc*-*-solaris*) + LD="${LD-ld} -m elf64_sparc" + ;; + esac + # GNU ld 2.21 introduced _sol2 emulations. Use them if available. + if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then + LD=${LD-ld}_sol2 + fi + ;; + *) + if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then + LD="${LD-ld} -64" + fi + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; +esac + +need_locks=$enable_libtool_lock + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args. +set dummy ${ac_tool_prefix}mt; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_MANIFEST_TOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$MANIFEST_TOOL"; then + ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_MANIFEST_TOOL="${ac_tool_prefix}mt" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL +if test -n "$MANIFEST_TOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5 +$as_echo "$MANIFEST_TOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_MANIFEST_TOOL"; then + ac_ct_MANIFEST_TOOL=$MANIFEST_TOOL + # Extract the first word of "mt", so it can be a program name with args. +set dummy mt; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_MANIFEST_TOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_MANIFEST_TOOL"; then + ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_MANIFEST_TOOL="mt" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL +if test -n "$ac_ct_MANIFEST_TOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5 +$as_echo "$ac_ct_MANIFEST_TOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_MANIFEST_TOOL" = x; then + MANIFEST_TOOL=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL + fi +else + MANIFEST_TOOL="$ac_cv_prog_MANIFEST_TOOL" +fi + +test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5 +$as_echo_n "checking if $MANIFEST_TOOL is a manifest tool... " >&6; } +if ${lt_cv_path_mainfest_tool+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_path_mainfest_tool=no + echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5 + $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out + cat conftest.err >&5 + if $GREP 'Manifest Tool' conftest.out > /dev/null; then + lt_cv_path_mainfest_tool=yes + fi + rm -f conftest* +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5 +$as_echo "$lt_cv_path_mainfest_tool" >&6; } +if test yes != "$lt_cv_path_mainfest_tool"; then + MANIFEST_TOOL=: +fi + + + + + + + case $host_os in + rhapsody* | darwin*) + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args. +set dummy ${ac_tool_prefix}dsymutil; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_DSYMUTIL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$DSYMUTIL"; then + ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +DSYMUTIL=$ac_cv_prog_DSYMUTIL +if test -n "$DSYMUTIL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5 +$as_echo "$DSYMUTIL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_DSYMUTIL"; then + ac_ct_DSYMUTIL=$DSYMUTIL + # Extract the first word of "dsymutil", so it can be a program name with args. +set dummy dsymutil; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_DSYMUTIL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_DSYMUTIL"; then + ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_DSYMUTIL="dsymutil" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL +if test -n "$ac_ct_DSYMUTIL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5 +$as_echo "$ac_ct_DSYMUTIL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_DSYMUTIL" = x; then + DSYMUTIL=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DSYMUTIL=$ac_ct_DSYMUTIL + fi +else + DSYMUTIL="$ac_cv_prog_DSYMUTIL" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args. +set dummy ${ac_tool_prefix}nmedit; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_NMEDIT+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$NMEDIT"; then + ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +NMEDIT=$ac_cv_prog_NMEDIT +if test -n "$NMEDIT"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5 +$as_echo "$NMEDIT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_NMEDIT"; then + ac_ct_NMEDIT=$NMEDIT + # Extract the first word of "nmedit", so it can be a program name with args. +set dummy nmedit; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_NMEDIT+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_NMEDIT"; then + ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_NMEDIT="nmedit" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT +if test -n "$ac_ct_NMEDIT"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5 +$as_echo "$ac_ct_NMEDIT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_NMEDIT" = x; then + NMEDIT=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + NMEDIT=$ac_ct_NMEDIT + fi +else + NMEDIT="$ac_cv_prog_NMEDIT" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args. +set dummy ${ac_tool_prefix}lipo; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_LIPO+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$LIPO"; then + ac_cv_prog_LIPO="$LIPO" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_LIPO="${ac_tool_prefix}lipo" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +LIPO=$ac_cv_prog_LIPO +if test -n "$LIPO"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5 +$as_echo "$LIPO" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_LIPO"; then + ac_ct_LIPO=$LIPO + # Extract the first word of "lipo", so it can be a program name with args. +set dummy lipo; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_LIPO+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_LIPO"; then + ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_LIPO="lipo" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO +if test -n "$ac_ct_LIPO"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5 +$as_echo "$ac_ct_LIPO" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_LIPO" = x; then + LIPO=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + LIPO=$ac_ct_LIPO + fi +else + LIPO="$ac_cv_prog_LIPO" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args. +set dummy ${ac_tool_prefix}otool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_OTOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$OTOOL"; then + ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_OTOOL="${ac_tool_prefix}otool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +OTOOL=$ac_cv_prog_OTOOL +if test -n "$OTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 +$as_echo "$OTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_OTOOL"; then + ac_ct_OTOOL=$OTOOL + # Extract the first word of "otool", so it can be a program name with args. +set dummy otool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_OTOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OTOOL"; then + ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_OTOOL="otool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL +if test -n "$ac_ct_OTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5 +$as_echo "$ac_ct_OTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_OTOOL" = x; then + OTOOL=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OTOOL=$ac_ct_OTOOL + fi +else + OTOOL="$ac_cv_prog_OTOOL" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args. +set dummy ${ac_tool_prefix}otool64; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_OTOOL64+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$OTOOL64"; then + ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +OTOOL64=$ac_cv_prog_OTOOL64 +if test -n "$OTOOL64"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5 +$as_echo "$OTOOL64" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_OTOOL64"; then + ac_ct_OTOOL64=$OTOOL64 + # Extract the first word of "otool64", so it can be a program name with args. +set dummy otool64; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_OTOOL64+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OTOOL64"; then + ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_OTOOL64="otool64" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64 +if test -n "$ac_ct_OTOOL64"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5 +$as_echo "$ac_ct_OTOOL64" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_OTOOL64" = x; then + OTOOL64=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OTOOL64=$ac_ct_OTOOL64 + fi +else + OTOOL64="$ac_cv_prog_OTOOL64" +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5 +$as_echo_n "checking for -single_module linker flag... " >&6; } +if ${lt_cv_apple_cc_single_mod+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_apple_cc_single_mod=no + if test -z "$LT_MULTI_MODULE"; then + # By default we will add the -single_module flag. You can override + # by either setting the environment variable LT_MULTI_MODULE + # non-empty at configure time, or by adding -multi_module to the + # link flags. + rm -rf libconftest.dylib* + echo "int foo(void){return 1;}" > conftest.c + echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ +-dynamiclib -Wl,-single_module conftest.c" >&5 + $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ + -dynamiclib -Wl,-single_module conftest.c 2>conftest.err + _lt_result=$? + # If there is a non-empty error log, and "single_module" + # appears in it, assume the flag caused a linker warning + if test -s conftest.err && $GREP single_module conftest.err; then + cat conftest.err >&5 + # Otherwise, if the output was created with a 0 exit code from + # the compiler, it worked. + elif test -f libconftest.dylib && test 0 = "$_lt_result"; then + lt_cv_apple_cc_single_mod=yes + else + cat conftest.err >&5 + fi + rm -rf libconftest.dylib* + rm -f conftest.* + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5 +$as_echo "$lt_cv_apple_cc_single_mod" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5 +$as_echo_n "checking for -exported_symbols_list linker flag... " >&6; } +if ${lt_cv_ld_exported_symbols_list+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_ld_exported_symbols_list=no + save_LDFLAGS=$LDFLAGS + echo "_main" > conftest.sym + LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + lt_cv_ld_exported_symbols_list=yes +else + lt_cv_ld_exported_symbols_list=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS=$save_LDFLAGS + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5 +$as_echo "$lt_cv_ld_exported_symbols_list" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5 +$as_echo_n "checking for -force_load linker flag... " >&6; } +if ${lt_cv_ld_force_load+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_ld_force_load=no + cat > conftest.c << _LT_EOF +int forced_loaded() { return 2;} +_LT_EOF + echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&5 + $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5 + echo "$AR cru libconftest.a conftest.o" >&5 + $AR cru libconftest.a conftest.o 2>&5 + echo "$RANLIB libconftest.a" >&5 + $RANLIB libconftest.a 2>&5 + cat > conftest.c << _LT_EOF +int main() { return 0;} +_LT_EOF + echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&5 + $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err + _lt_result=$? + if test -s conftest.err && $GREP force_load conftest.err; then + cat conftest.err >&5 + elif test -f conftest && test 0 = "$_lt_result" && $GREP forced_load conftest >/dev/null 2>&1; then + lt_cv_ld_force_load=yes + else + cat conftest.err >&5 + fi + rm -f conftest.err libconftest.a conftest conftest.c + rm -rf conftest.dSYM + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5 +$as_echo "$lt_cv_ld_force_load" >&6; } + case $host_os in + rhapsody* | darwin1.[012]) + _lt_dar_allow_undefined='$wl-undefined ${wl}suppress' ;; + darwin1.*) + _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; + darwin*) # darwin 5.x on + # if running on 10.5 or later, the deployment target defaults + # to the OS version, if on x86, and 10.4, the deployment + # target defaults to 10.4. Don't you love it? + case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in + 10.0,*86*-darwin8*|10.0,*-darwin[91]*) + _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; + 10.[012][,.]*) + _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; + 10.*) + _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; + esac + ;; + esac + if test yes = "$lt_cv_apple_cc_single_mod"; then + _lt_dar_single_mod='$single_module' + fi + if test yes = "$lt_cv_ld_exported_symbols_list"; then + _lt_dar_export_syms=' $wl-exported_symbols_list,$output_objdir/$libname-symbols.expsym' + else + _lt_dar_export_syms='~$NMEDIT -s $output_objdir/$libname-symbols.expsym $lib' + fi + if test : != "$DSYMUTIL" && test no = "$lt_cv_ld_force_load"; then + _lt_dsymutil='~$DSYMUTIL $lib || :' + else + _lt_dsymutil= + fi + ;; + esac + +# func_munge_path_list VARIABLE PATH +# ----------------------------------- +# VARIABLE is name of variable containing _space_ separated list of +# directories to be munged by the contents of PATH, which is string +# having a format: +# "DIR[:DIR]:" +# string "DIR[ DIR]" will be prepended to VARIABLE +# ":DIR[:DIR]" +# string "DIR[ DIR]" will be appended to VARIABLE +# "DIRP[:DIRP]::[DIRA:]DIRA" +# string "DIRP[ DIRP]" will be prepended to VARIABLE and string +# "DIRA[ DIRA]" will be appended to VARIABLE +# "DIR[:DIR]" +# VARIABLE will be replaced by "DIR[ DIR]" +func_munge_path_list () +{ + case x$2 in + x) + ;; + *:) + eval $1=\"`$ECHO $2 | $SED 's/:/ /g'` \$$1\" + ;; + x:*) + eval $1=\"\$$1 `$ECHO $2 | $SED 's/:/ /g'`\" + ;; + *::*) + eval $1=\"\$$1\ `$ECHO $2 | $SED -e 's/.*:://' -e 's/:/ /g'`\" + eval $1=\"`$ECHO $2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \$$1\" + ;; + *) + eval $1=\"`$ECHO $2 | $SED 's/:/ /g'`\" + ;; + esac +} + +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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 +$as_echo_n "checking how to run the C preprocessor... " >&6; } +# On Suns, sometimes $CPP names a directory. +if test -n "$CPP" && test -d "$CPP"; then + CPP= +fi +if test -z "$CPP"; then + if ${ac_cv_prog_CPP+:} false; then : + $as_echo_n "(cached) " >&6 +else + # Double quotes because CPP needs to be expanded + for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" + do + ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + break +fi + + done + ac_cv_prog_CPP=$CPP + +fi + CPP=$ac_cv_prog_CPP +else + ac_cv_prog_CPP=$CPP +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 +$as_echo "$CPP" >&6; } +ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + +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 $? "C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details" "$LINENO" 5; } +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 + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 +$as_echo_n "checking for ANSI C header files... " >&6; } +if ${ac_cv_header_stdc+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#include +#include + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_header_stdc=yes +else + ac_cv_header_stdc=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +if test $ac_cv_header_stdc = yes; then + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "memchr" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "free" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. + if test "$cross_compiling" = yes; then : + : +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#if ((' ' & 0x0FF) == 0x020) +# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +#else +# define ISLOWER(c) \ + (('a' <= (c) && (c) <= 'i') \ + || ('j' <= (c) && (c) <= 'r') \ + || ('s' <= (c) && (c) <= 'z')) +# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) +#endif + +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) +int +main () +{ + int i; + for (i = 0; i < 256; i++) + if (XOR (islower (i), ISLOWER (i)) + || toupper (i) != TOUPPER (i)) + return 2; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + +else + ac_cv_header_stdc=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 +$as_echo "$ac_cv_header_stdc" >&6; } +if test $ac_cv_header_stdc = yes; then + +$as_echo "#define STDC_HEADERS 1" >>confdefs.h + +fi + +# On IRIX 5.3, sys/types and inttypes.h are conflicting. +for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ + inttypes.h stdint.h unistd.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default +" +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + +for ac_header in dlfcn.h +do : + ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default +" +if test "x$ac_cv_header_dlfcn_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_DLFCN_H 1 +_ACEOF + +fi + +done + + + + + +# Set options +# Check whether --enable-static was given. +if test "${enable_static+set}" = set; then : + enableval=$enable_static; p=${PACKAGE-default} + case $enableval in + yes) enable_static=yes ;; + no) enable_static=no ;; + *) + enable_static=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, + for pkg in $enableval; do + IFS=$lt_save_ifs + if test "X$pkg" = "X$p"; then + enable_static=yes + fi + done + IFS=$lt_save_ifs + ;; + esac +else + enable_static=no +fi + + + + + + + +enable_win32_dll=yes + +case $host in +*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*) + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}as", so it can be a program name with args. +set dummy ${ac_tool_prefix}as; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AS+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AS"; then + ac_cv_prog_AS="$AS" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AS="${ac_tool_prefix}as" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AS=$ac_cv_prog_AS +if test -n "$AS"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AS" >&5 +$as_echo "$AS" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_AS"; then + ac_ct_AS=$AS + # Extract the first word of "as", so it can be a program name with args. +set dummy as; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AS+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AS"; then + ac_cv_prog_ac_ct_AS="$ac_ct_AS" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_AS="as" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_AS=$ac_cv_prog_ac_ct_AS +if test -n "$ac_ct_AS"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AS" >&5 +$as_echo "$ac_ct_AS" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_AS" = x; then + AS="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AS=$ac_ct_AS + fi +else + AS="$ac_cv_prog_AS" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. +set dummy ${ac_tool_prefix}dlltool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_DLLTOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$DLLTOOL"; then + ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +DLLTOOL=$ac_cv_prog_DLLTOOL +if test -n "$DLLTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 +$as_echo "$DLLTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_DLLTOOL"; then + ac_ct_DLLTOOL=$DLLTOOL + # Extract the first word of "dlltool", so it can be a program name with args. +set dummy dlltool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_DLLTOOL"; then + ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_DLLTOOL="dlltool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL +if test -n "$ac_ct_DLLTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 +$as_echo "$ac_ct_DLLTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_DLLTOOL" = x; then + DLLTOOL="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DLLTOOL=$ac_ct_DLLTOOL + fi +else + DLLTOOL="$ac_cv_prog_DLLTOOL" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. +set dummy ${ac_tool_prefix}objdump; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_OBJDUMP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$OBJDUMP"; then + ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +OBJDUMP=$ac_cv_prog_OBJDUMP +if test -n "$OBJDUMP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 +$as_echo "$OBJDUMP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_OBJDUMP"; then + ac_ct_OBJDUMP=$OBJDUMP + # Extract the first word of "objdump", so it can be a program name with args. +set dummy objdump; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OBJDUMP"; then + ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_OBJDUMP="objdump" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP +if test -n "$ac_ct_OBJDUMP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 +$as_echo "$ac_ct_OBJDUMP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_OBJDUMP" = x; then + OBJDUMP="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OBJDUMP=$ac_ct_OBJDUMP + fi +else + OBJDUMP="$ac_cv_prog_OBJDUMP" +fi + + ;; +esac + +test -z "$AS" && AS=as + + + + + +test -z "$DLLTOOL" && DLLTOOL=dlltool + + + + + +test -z "$OBJDUMP" && OBJDUMP=objdump + + + + + + + + enable_dlopen=no + + + + # Check whether --enable-shared was given. +if test "${enable_shared+set}" = set; then : + enableval=$enable_shared; p=${PACKAGE-default} + case $enableval in + yes) enable_shared=yes ;; + no) enable_shared=no ;; + *) + enable_shared=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, + for pkg in $enableval; do + IFS=$lt_save_ifs + if test "X$pkg" = "X$p"; then + enable_shared=yes + fi + done + IFS=$lt_save_ifs + ;; + esac +else + enable_shared=yes +fi + + + + + + + + + + + +# Check whether --with-pic was given. +if test "${with_pic+set}" = set; then : + withval=$with_pic; lt_p=${PACKAGE-default} + case $withval in + yes|no) pic_mode=$withval ;; + *) + pic_mode=default + # Look at the argument we got. We use all the common list separators. + lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, + for lt_pkg in $withval; do + IFS=$lt_save_ifs + if test "X$lt_pkg" = "X$lt_p"; then + pic_mode=yes + fi + done + IFS=$lt_save_ifs + ;; + esac +else + pic_mode=default +fi + + + + + + + + + # Check whether --enable-fast-install was given. +if test "${enable_fast_install+set}" = set; then : + enableval=$enable_fast_install; p=${PACKAGE-default} + case $enableval in + yes) enable_fast_install=yes ;; + no) enable_fast_install=no ;; + *) + enable_fast_install=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, + for pkg in $enableval; do + IFS=$lt_save_ifs + if test "X$pkg" = "X$p"; then + enable_fast_install=yes + fi + done + IFS=$lt_save_ifs + ;; + esac +else + enable_fast_install=yes +fi + + + + + + + + + shared_archive_member_spec= +case $host,$enable_shared in +power*-*-aix[5-9]*,yes) + { $as_echo "$as_me:${as_lineno-$LINENO}: checking which variant of shared library versioning to provide" >&5 +$as_echo_n "checking which variant of shared library versioning to provide... " >&6; } + +# Check whether --with-aix-soname was given. +if test "${with_aix_soname+set}" = set; then : + withval=$with_aix_soname; case $withval in + aix|svr4|both) + ;; + *) + as_fn_error $? "Unknown argument to --with-aix-soname" "$LINENO" 5 + ;; + esac + lt_cv_with_aix_soname=$with_aix_soname +else + if ${lt_cv_with_aix_soname+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_with_aix_soname=aix +fi + + with_aix_soname=$lt_cv_with_aix_soname +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_aix_soname" >&5 +$as_echo "$with_aix_soname" >&6; } + if test aix != "$with_aix_soname"; then + # For the AIX way of multilib, we name the shared archive member + # based on the bitwidth used, traditionally 'shr.o' or 'shr_64.o', + # and 'shr.imp' or 'shr_64.imp', respectively, for the Import File. + # Even when GNU compilers ignore OBJECT_MODE but need '-maix64' flag, + # the AIX toolchain works better with OBJECT_MODE set (default 32). + if test 64 = "${OBJECT_MODE-32}"; then + shared_archive_member_spec=shr_64 + else + shared_archive_member_spec=shr + fi + fi + ;; +*) + with_aix_soname=aix + ;; +esac + + + + + + + + + + +# This can be used to rebuild libtool when needed +LIBTOOL_DEPS=$ltmain + +# Always use our own libtool. +LIBTOOL='$(SHELL) $(top_builddir)/libtool' + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +test -z "$LN_S" && LN_S="ln -s" + + + + + + + + + + + + + + +if test -n "${ZSH_VERSION+set}"; then + setopt NO_GLOB_SUBST +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5 +$as_echo_n "checking for objdir... " >&6; } +if ${lt_cv_objdir+:} false; then : + $as_echo_n "(cached) " >&6 +else + rm -f .libs 2>/dev/null +mkdir .libs 2>/dev/null +if test -d .libs; then + lt_cv_objdir=.libs +else + # MS-DOS does not allow filenames that begin with a dot. + lt_cv_objdir=_libs +fi +rmdir .libs 2>/dev/null +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5 +$as_echo "$lt_cv_objdir" >&6; } +objdir=$lt_cv_objdir + + + + + +cat >>confdefs.h <<_ACEOF +#define LT_OBJDIR "$lt_cv_objdir/" +_ACEOF + + + + +case $host_os in +aix3*) + # AIX sometimes has problems with the GCC collect2 program. For some + # reason, if we set the COLLECT_NAMES environment variable, the problems + # vanish in a puff of smoke. + if test set != "${COLLECT_NAMES+set}"; then + COLLECT_NAMES= + export COLLECT_NAMES + fi + ;; +esac + +# Global variables: +ofile=libtool +can_build_shared=yes + +# All known linkers require a '.a' archive for static linking (except MSVC, +# which needs '.lib'). +libext=a + +with_gnu_ld=$lt_cv_prog_gnu_ld + +old_CC=$CC +old_CFLAGS=$CFLAGS + +# Set sane defaults for various variables +test -z "$CC" && CC=cc +test -z "$LTCC" && LTCC=$CC +test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS +test -z "$LD" && LD=ld +test -z "$ac_objext" && ac_objext=o + +func_cc_basename $compiler +cc_basename=$func_cc_basename_result + + +# Only perform the check for file, if the check method requires it +test -z "$MAGIC_CMD" && MAGIC_CMD=file +case $deplibs_check_method in +file_magic*) + if test "$file_magic_cmd" = '$MAGIC_CMD'; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5 +$as_echo_n "checking for ${ac_tool_prefix}file... " >&6; } +if ${lt_cv_path_MAGIC_CMD+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $MAGIC_CMD in +[\\/*] | ?:[\\/]*) + lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD=$MAGIC_CMD + lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR + ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" + for ac_dir in $ac_dummy; do + IFS=$lt_save_ifs + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/${ac_tool_prefix}file"; then + lt_cv_path_MAGIC_CMD=$ac_dir/"${ac_tool_prefix}file" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` + MAGIC_CMD=$lt_cv_path_MAGIC_CMD + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <<_LT_EOF 1>&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org + +_LT_EOF + fi ;; + esac + fi + break + fi + done + IFS=$lt_save_ifs + MAGIC_CMD=$lt_save_MAGIC_CMD + ;; +esac +fi + +MAGIC_CMD=$lt_cv_path_MAGIC_CMD +if test -n "$MAGIC_CMD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 +$as_echo "$MAGIC_CMD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + + +if test -z "$lt_cv_path_MAGIC_CMD"; then + if test -n "$ac_tool_prefix"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5 +$as_echo_n "checking for file... " >&6; } +if ${lt_cv_path_MAGIC_CMD+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $MAGIC_CMD in +[\\/*] | ?:[\\/]*) + lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD=$MAGIC_CMD + lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR + ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" + for ac_dir in $ac_dummy; do + IFS=$lt_save_ifs + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/file"; then + lt_cv_path_MAGIC_CMD=$ac_dir/"file" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` + MAGIC_CMD=$lt_cv_path_MAGIC_CMD + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <<_LT_EOF 1>&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org + +_LT_EOF + fi ;; + esac + fi + break + fi + done + IFS=$lt_save_ifs + MAGIC_CMD=$lt_save_MAGIC_CMD + ;; +esac +fi + +MAGIC_CMD=$lt_cv_path_MAGIC_CMD +if test -n "$MAGIC_CMD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 +$as_echo "$MAGIC_CMD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + else + MAGIC_CMD=: + fi +fi + + fi + ;; +esac + +# Use C for the default configuration in the libtool script + +lt_save_CC=$CC +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 + + +# Source file extension for C test sources. +ac_ext=c + +# Object file extension for compiled C test sources. +objext=o +objext=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="int some_variable = 0;" + +# Code to be used in simple link tests +lt_simple_link_test_code='int main(){return(0);}' + + + + + + + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC + +# Save the default compiler, since it gets overwritten when the other +# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. +compiler_DEFAULT=$CC + +# save warnings/boilerplate of simple test code +ac_outfile=conftest.$ac_objext +echo "$lt_simple_compile_test_code" >conftest.$ac_ext +eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_compiler_boilerplate=`cat conftest.err` +$RM conftest* + +ac_outfile=conftest.$ac_objext +echo "$lt_simple_link_test_code" >conftest.$ac_ext +eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_linker_boilerplate=`cat conftest.err` +$RM -r conftest* + + +## CAVEAT EMPTOR: +## There is no encapsulation within the following macros, do not change +## the running order or otherwise move them around unless you know exactly +## what you are doing... +if test -n "$compiler"; then + +lt_prog_compiler_no_builtin_flag= + +if test yes = "$GCC"; then + case $cc_basename in + nvcc*) + lt_prog_compiler_no_builtin_flag=' -Xcompiler -fno-builtin' ;; + *) + lt_prog_compiler_no_builtin_flag=' -fno-builtin' ;; + esac + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 +$as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } +if ${lt_cv_prog_compiler_rtti_exceptions+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_rtti_exceptions=no + ac_outfile=conftest.$ac_objext + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="-fno-rtti -fno-exceptions" ## exclude from sc_useless_quotes_in_assignment + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -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:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $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. + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_rtti_exceptions=yes + fi + fi + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 +$as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; } + +if test yes = "$lt_cv_prog_compiler_rtti_exceptions"; then + lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" +else + : +fi + +fi + + + + + + + lt_prog_compiler_wl= +lt_prog_compiler_pic= +lt_prog_compiler_static= + + + if test yes = "$GCC"; then + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_static='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test ia64 = "$host_cpu"; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static='-Bstatic' + fi + lt_prog_compiler_pic='-fPIC' + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + lt_prog_compiler_pic='-fPIC' + ;; + m68k) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the '-m68020' flag to GCC prevents building anything better, + # like '-m68040'. + lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4' + ;; + esac + ;; + + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + # Although the cygwin gcc ignores -fPIC, still need this for old-style + # (--disable-auto-import) libraries + lt_prog_compiler_pic='-DDLL_EXPORT' + case $host_os in + os2*) + lt_prog_compiler_static='$wl-static' + ;; + esac + ;; + + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + lt_prog_compiler_pic='-fno-common' + ;; + + haiku*) + # PIC is the default for Haiku. + # The "-static" flag exists, but is broken. + lt_prog_compiler_static= + ;; + + hpux*) + # PIC is the default for 64-bit PA HP-UX, but not for 32-bit + # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag + # sets the default TLS model and affects inlining. + case $host_cpu in + hppa*64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic='-fPIC' + ;; + esac + ;; + + interix[3-9]*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + + msdosdjgpp*) + # Just because we use GCC doesn't mean we suddenly get shared libraries + # on systems that don't support them. + lt_prog_compiler_can_build_shared=no + enable_shared=no + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + lt_prog_compiler_pic='-fPIC -shared' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + lt_prog_compiler_pic=-Kconform_pic + fi + ;; + + *) + lt_prog_compiler_pic='-fPIC' + ;; + esac + + case $cc_basename in + nvcc*) # Cuda Compiler Driver 2.2 + lt_prog_compiler_wl='-Xlinker ' + if test -n "$lt_prog_compiler_pic"; then + lt_prog_compiler_pic="-Xcompiler $lt_prog_compiler_pic" + fi + ;; + esac + else + # PORTME Check for flag to pass linker flags through the system compiler. + case $host_os in + aix*) + lt_prog_compiler_wl='-Wl,' + if test ia64 = "$host_cpu"; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static='-Bstatic' + else + lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp' + fi + ;; + + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + lt_prog_compiler_pic='-fno-common' + case $cc_basename in + nagfor*) + # NAG Fortran compiler + lt_prog_compiler_wl='-Wl,-Wl,,' + lt_prog_compiler_pic='-PIC' + lt_prog_compiler_static='-Bstatic' + ;; + esac + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + lt_prog_compiler_pic='-DDLL_EXPORT' + case $host_os in + os2*) + lt_prog_compiler_static='$wl-static' + ;; + esac + ;; + + hpux9* | hpux10* | hpux11*) + lt_prog_compiler_wl='-Wl,' + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic='+Z' + ;; + esac + # Is there a better lt_prog_compiler_static that works with the bundled CC? + lt_prog_compiler_static='$wl-a ${wl}archive' + ;; + + irix5* | irix6* | nonstopux*) + lt_prog_compiler_wl='-Wl,' + # PIC (with -KPIC) is the default. + lt_prog_compiler_static='-non_shared' + ;; + + linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + case $cc_basename in + # old Intel for x86_64, which still supported -KPIC. + ecc*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-static' + ;; + # icc used to be incompatible with GCC. + # ICC 10 doesn't accept -KPIC any more. + icc* | ifort*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fPIC' + lt_prog_compiler_static='-static' + ;; + # Lahey Fortran 8.1. + lf95*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='--shared' + lt_prog_compiler_static='--static' + ;; + nagfor*) + # NAG Fortran compiler + lt_prog_compiler_wl='-Wl,-Wl,,' + lt_prog_compiler_pic='-PIC' + lt_prog_compiler_static='-Bstatic' + ;; + tcc*) + # Fabrice Bellard et al's Tiny C Compiler + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fPIC' + lt_prog_compiler_static='-static' + ;; + pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) + # Portland Group compilers (*not* the Pentium gcc compiler, + # which looks to be a dead project) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fpic' + lt_prog_compiler_static='-Bstatic' + ;; + ccc*) + lt_prog_compiler_wl='-Wl,' + # All Alpha code is PIC. + lt_prog_compiler_static='-non_shared' + ;; + xl* | bgxl* | bgf* | mpixl*) + # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-qpic' + lt_prog_compiler_static='-qstaticlink' + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [1-7].* | *Sun*Fortran*\ 8.[0-3]*) + # Sun Fortran 8.3 passes all unrecognized flags to the linker + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + lt_prog_compiler_wl='' + ;; + *Sun\ F* | *Sun*Fortran*) + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + lt_prog_compiler_wl='-Qoption ld ' + ;; + *Sun\ C*) + # Sun C 5.9 + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + lt_prog_compiler_wl='-Wl,' + ;; + *Intel*\ [CF]*Compiler*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fPIC' + lt_prog_compiler_static='-static' + ;; + *Portland\ Group*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fpic' + lt_prog_compiler_static='-Bstatic' + ;; + esac + ;; + esac + ;; + + newsos6) + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + lt_prog_compiler_pic='-fPIC -shared' + ;; + + osf3* | osf4* | osf5*) + lt_prog_compiler_wl='-Wl,' + # All OSF/1 code is PIC. + lt_prog_compiler_static='-non_shared' + ;; + + rdos*) + lt_prog_compiler_static='-non_shared' + ;; + + solaris*) + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + case $cc_basename in + f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) + lt_prog_compiler_wl='-Qoption ld ';; + *) + lt_prog_compiler_wl='-Wl,';; + esac + ;; + + sunos4*) + lt_prog_compiler_wl='-Qoption ld ' + lt_prog_compiler_pic='-PIC' + lt_prog_compiler_static='-Bstatic' + ;; + + sysv4 | sysv4.2uw2* | sysv4.3*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + lt_prog_compiler_pic='-Kconform_pic' + lt_prog_compiler_static='-Bstatic' + fi + ;; + + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + unicos*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_can_build_shared=no + ;; + + uts4*) + lt_prog_compiler_pic='-pic' + lt_prog_compiler_static='-Bstatic' + ;; + + *) + lt_prog_compiler_can_build_shared=no + ;; + esac + fi + +case $host_os in + # For platforms that do not support PIC, -DPIC is meaningless: + *djgpp*) + lt_prog_compiler_pic= + ;; + *) + lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC" + ;; +esac + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 +$as_echo_n "checking for $compiler option to produce PIC... " >&6; } +if ${lt_cv_prog_compiler_pic+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_pic=$lt_prog_compiler_pic +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5 +$as_echo "$lt_cv_prog_compiler_pic" >&6; } +lt_prog_compiler_pic=$lt_cv_prog_compiler_pic + +# +# Check to make sure the PIC flag actually works. +# +if test -n "$lt_prog_compiler_pic"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 +$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; } +if ${lt_cv_prog_compiler_pic_works+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_pic_works=no + ac_outfile=conftest.$ac_objext + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$lt_prog_compiler_pic -DPIC" ## exclude from sc_useless_quotes_in_assignment + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -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:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $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. + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_pic_works=yes + fi + fi + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5 +$as_echo "$lt_cv_prog_compiler_pic_works" >&6; } + +if test yes = "$lt_cv_prog_compiler_pic_works"; then + case $lt_prog_compiler_pic in + "" | " "*) ;; + *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; + esac +else + lt_prog_compiler_pic= + lt_prog_compiler_can_build_shared=no +fi + +fi + + + + + + + + + + + +# +# Check to make sure the static flag actually works. +# +wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 +$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } +if ${lt_cv_prog_compiler_static_works+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_static_works=no + save_LDFLAGS=$LDFLAGS + LDFLAGS="$LDFLAGS $lt_tmp_static_flag" + echo "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&5 + $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_static_works=yes + fi + else + lt_cv_prog_compiler_static_works=yes + fi + fi + $RM -r conftest* + LDFLAGS=$save_LDFLAGS + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5 +$as_echo "$lt_cv_prog_compiler_static_works" >&6; } + +if test yes = "$lt_cv_prog_compiler_static_works"; then + : +else + lt_prog_compiler_static= +fi + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if ${lt_cv_prog_compiler_c_o+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_c_o=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -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:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:$LINENO: \$? = $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 + # So say no if there are warnings + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o=yes + fi + fi + chmod u+w . 2>&5 + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 +$as_echo "$lt_cv_prog_compiler_c_o" >&6; } + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if ${lt_cv_prog_compiler_c_o+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_c_o=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -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:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:$LINENO: \$? = $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 + # So say no if there are warnings + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o=yes + fi + fi + chmod u+w . 2>&5 + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 +$as_echo "$lt_cv_prog_compiler_c_o" >&6; } + + + + +hard_links=nottested +if test no = "$lt_cv_prog_compiler_c_o" && test no != "$need_locks"; then + # do not overwrite the value of need_locks provided by the user + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 +$as_echo_n "checking if we can lock with hard links... " >&6; } + hard_links=yes + $RM conftest* + ln conftest.a conftest.b 2>/dev/null && hard_links=no + touch conftest.a + ln conftest.a conftest.b 2>&5 || hard_links=no + ln conftest.a conftest.b 2>/dev/null && hard_links=no + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 +$as_echo "$hard_links" >&6; } + if test no = "$hard_links"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&5 +$as_echo "$as_me: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&2;} + need_locks=warn + fi +else + need_locks=no +fi + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } + + runpath_var= + allow_undefined_flag= + always_export_symbols=no + archive_cmds= + archive_expsym_cmds= + compiler_needs_object=no + enable_shared_with_static_runtimes=no + export_dynamic_flag_spec= + export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + hardcode_automatic=no + hardcode_direct=no + hardcode_direct_absolute=no + hardcode_libdir_flag_spec= + hardcode_libdir_separator= + hardcode_minus_L=no + hardcode_shlibpath_var=unsupported + inherit_rpath=no + link_all_deplibs=unknown + module_cmds= + module_expsym_cmds= + old_archive_from_new_cmds= + old_archive_from_expsyms_cmds= + thread_safe_flag_spec= + whole_archive_flag_spec= + # include_expsyms should be a list of space-separated symbols to be *always* + # included in the symbol list + include_expsyms= + # exclude_expsyms can be an extended regexp of symbols to exclude + # it will be wrapped by ' (' and ')$', so one must not match beginning or + # end of line. Example: 'a|bc|.*d.*' will exclude the symbols 'a' and 'bc', + # as well as any symbol that contains 'd'. + exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' + # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out + # platforms (ab)use it in PIC code, but their linkers get confused if + # the symbol is explicitly referenced. Since portable code cannot + # rely on this symbol name, it's probably fine to never include it in + # preloaded symbol tables. + # Exclude shared library initialization/finalization symbols. + extract_expsyms_cmds= + + case $host_os in + cygwin* | mingw* | pw32* | cegcc*) + # FIXME: the MSVC++ port hasn't been tested in a loooong time + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + if test yes != "$GCC"; then + with_gnu_ld=no + fi + ;; + interix*) + # we just hope/assume this is gcc and not c89 (= MSVC++) + with_gnu_ld=yes + ;; + openbsd* | bitrig*) + with_gnu_ld=no + ;; + esac + + ld_shlibs=yes + + # On some targets, GNU ld is compatible enough with the native linker + # that we're better off using the native interface for both. + lt_use_gnu_ld_interface=no + if test yes = "$with_gnu_ld"; then + case $host_os in + aix*) + # The AIX port of GNU ld has always aspired to compatibility + # with the native linker. However, as the warning in the GNU ld + # block says, versions before 2.19.5* couldn't really create working + # shared libraries, regardless of the interface used. + case `$LD -v 2>&1` in + *\ \(GNU\ Binutils\)\ 2.19.5*) ;; + *\ \(GNU\ Binutils\)\ 2.[2-9]*) ;; + *\ \(GNU\ Binutils\)\ [3-9]*) ;; + *) + lt_use_gnu_ld_interface=yes + ;; + esac + ;; + *) + lt_use_gnu_ld_interface=yes + ;; + esac + fi + + if test yes = "$lt_use_gnu_ld_interface"; then + # If archive_cmds runs LD, not CC, wlarc should be empty + wlarc='$wl' + + # Set some defaults for GNU ld with shared library support. These + # are reset later if shared libraries are not supported. Putting them + # here allows them to be overridden if necessary. + runpath_var=LD_RUN_PATH + hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' + export_dynamic_flag_spec='$wl--export-dynamic' + # ancient GNU ld didn't support --whole-archive et. al. + if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then + whole_archive_flag_spec=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' + else + whole_archive_flag_spec= + fi + supports_anon_versioning=no + case `$LD -v | $SED -e 's/(^)\+)\s\+//' 2>&1` in + *GNU\ gold*) supports_anon_versioning=yes ;; + *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 + *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... + *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... + *\ 2.11.*) ;; # other 2.11 versions + *) supports_anon_versioning=yes ;; + esac + + # See if GNU ld supports shared libraries. + case $host_os in + aix[3-9]*) + # On AIX/PPC, the GNU linker is very broken + if test ia64 != "$host_cpu"; then + ld_shlibs=no + cat <<_LT_EOF 1>&2 + +*** Warning: the GNU linker, at least up to release 2.19, is reported +*** to be unable to reliably create shared libraries on AIX. +*** Therefore, libtool is disabling shared libraries support. If you +*** really care for shared libraries, you may want to install binutils +*** 2.20 or above, or modify your PATH so that a non-GNU linker is found. +*** You will then need to restart the configuration process. + +_LT_EOF + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + archive_expsym_cmds='' + ;; + m68k) + archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + ;; + esac + ;; + + beos*) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + allow_undefined_flag=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + else + ld_shlibs=no + fi + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, + # as there is no search path for DLLs. + hardcode_libdir_flag_spec='-L$libdir' + export_dynamic_flag_spec='$wl--export-all-symbols' + allow_undefined_flag=unsupported + always_export_symbols=no + enable_shared_with_static_runtimes=yes + export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' + exclude_expsyms='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname' + + if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file, use it as + # is; otherwise, prepend EXPORTS... + archive_expsym_cmds='if test DEF = "`$SED -n -e '\''s/^[ ]*//'\'' -e '\''/^\(;.*\)*$/d'\'' -e '\''s/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p'\'' -e q $export_symbols`" ; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + ld_shlibs=no + fi + ;; + + haiku*) + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + link_all_deplibs=yes + ;; + + os2*) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + allow_undefined_flag=unsupported + shrext_cmds=.dll + archive_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + archive_expsym_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + prefix_cmds="$SED"~ + if test EXPORTS = "`$SED 1q $export_symbols`"; then + prefix_cmds="$prefix_cmds -e 1d"; + fi~ + prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ + cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + old_archive_From_new_cmds='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' + enable_shared_with_static_runtimes=yes + ;; + + interix[3-9]*) + hardcode_direct=no + hardcode_shlibpath_var=no + hardcode_libdir_flag_spec='$wl-rpath,$libdir' + export_dynamic_flag_spec='$wl-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + archive_expsym_cmds='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + + gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) + tmp_diet=no + if test linux-dietlibc = "$host_os"; then + case $cc_basename in + diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) + esac + fi + if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ + && test no = "$tmp_diet" + then + tmp_addflag=' $pic_flag' + tmp_sharedflag='-shared' + case $cc_basename,$host_cpu in + pgcc*) # Portland Group C compiler + whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' + tmp_addflag=' $pic_flag' + ;; + pgf77* | pgf90* | pgf95* | pgfortran*) + # Portland Group f77 and f90 compilers + whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' + tmp_addflag=' $pic_flag -Mnomain' ;; + ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 + tmp_addflag=' -i_dynamic' ;; + efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 + tmp_addflag=' -i_dynamic -nofor_main' ;; + ifc* | ifort*) # Intel Fortran compiler + tmp_addflag=' -nofor_main' ;; + lf95*) # Lahey Fortran 8.1 + whole_archive_flag_spec= + tmp_sharedflag='--shared' ;; + nagfor*) # NAGFOR 5.3 + tmp_sharedflag='-Wl,-shared' ;; + xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below) + tmp_sharedflag='-qmkshrobj' + tmp_addflag= ;; + nvcc*) # Cuda Compiler Driver 2.2 + whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' + compiler_needs_object=yes + ;; + esac + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) # Sun C 5.9 + whole_archive_flag_spec='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' + compiler_needs_object=yes + tmp_sharedflag='-G' ;; + *Sun\ F*) # Sun Fortran 8.3 + tmp_sharedflag='-G' ;; + esac + archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + + if test yes = "$supports_anon_versioning"; then + archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib' + fi + + case $cc_basename in + tcc*) + export_dynamic_flag_spec='-rdynamic' + ;; + xlf* | bgf* | bgxlf* | mpixlf*) + # IBM XL Fortran 10.1 on PPC cannot create shared libs itself + whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive' + hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' + archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' + if test yes = "$supports_anon_versioning"; then + archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' + fi + ;; + esac + else + ld_shlibs=no + fi + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' + wlarc= + else + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + fi + ;; + + solaris*) + if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then + ld_shlibs=no + cat <<_LT_EOF 1>&2 + +*** Warning: The releases 2.8.* of the GNU linker cannot reliably +*** create shared libraries on Solaris systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.9.1 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + + sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) + case `$LD -v 2>&1` in + *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) + ld_shlibs=no + cat <<_LT_EOF 1>&2 + +*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 cannot +*** reliably create shared libraries on SCO systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.16.91.0.3 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + ;; + *) + # For security reasons, it is highly recommended that you always + # use absolute paths for naming shared libraries, and exclude the + # DT_RUNPATH tag from executables and libraries. But doing so + # requires that you compile everything twice, which is a pain. + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + esac + ;; + + sunos4*) + archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' + wlarc= + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + *) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + esac + + if test no = "$ld_shlibs"; then + runpath_var= + hardcode_libdir_flag_spec= + export_dynamic_flag_spec= + whole_archive_flag_spec= + fi + else + # PORTME fill in a description of your system's linker (not GNU ld) + case $host_os in + aix3*) + allow_undefined_flag=unsupported + always_export_symbols=yes + archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' + # Note: this linker hardcodes the directories in LIBPATH if there + # are no directories specified by -L. + hardcode_minus_L=yes + if test yes = "$GCC" && test -z "$lt_prog_compiler_static"; then + # Neither direct hardcoding nor static linking is supported with a + # broken collect2. + hardcode_direct=unsupported + fi + ;; + + aix[4-9]*) + if test ia64 = "$host_cpu"; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag= + else + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to GNU nm, but means don't demangle to AIX nm. + # Without the "-l" option, or with the "-B" option, AIX nm treats + # weak defined symbols like other global defined symbols, whereas + # GNU nm marks them as "W". + # While the 'weak' keyword is ignored in the Export File, we need + # it in the Import File for the 'aix-soname' feature, so we have + # to replace the "-B" option with "-P" for AIX nm. + if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then + export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols' + else + export_symbols_cmds='`func_echo_all $NM | $SED -e '\''s/B\([^B]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && (substr(\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols' + fi + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # have runtime linking enabled, and use it for executables. + # For shared libraries, we enable/disable runtime linking + # depending on the kind of the shared library created - + # when "with_aix_soname,aix_use_runtimelinking" is: + # "aix,no" lib.a(lib.so.V) shared, rtl:no, for executables + # "aix,yes" lib.so shared, rtl:yes, for executables + # lib.a static archive + # "both,no" lib.so.V(shr.o) shared, rtl:yes + # lib.a(lib.so.V) shared, rtl:no, for executables + # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables + # lib.a(lib.so.V) shared, rtl:no + # "svr4,*" lib.so.V(shr.o) shared, rtl:yes, for executables + # lib.a static archive + case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) + for ld_flag in $LDFLAGS; do + if (test x-brtl = "x$ld_flag" || test x-Wl,-brtl = "x$ld_flag"); then + aix_use_runtimelinking=yes + break + fi + done + if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then + # With aix-soname=svr4, we create the lib.so.V shared archives only, + # so we don't have lib.a shared libs to link our executables. + # We have to force runtime linking in this case. + aix_use_runtimelinking=yes + LDFLAGS="$LDFLAGS -Wl,-brtl" + fi + ;; + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + archive_cmds='' + hardcode_direct=yes + hardcode_direct_absolute=yes + hardcode_libdir_separator=':' + link_all_deplibs=yes + file_list_spec='$wl-f,' + case $with_aix_soname,$aix_use_runtimelinking in + aix,*) ;; # traditional, no import file + svr4,* | *,yes) # use import file + # The Import File defines what to hardcode. + hardcode_direct=no + hardcode_direct_absolute=no + ;; + esac + + if test yes = "$GCC"; then + case $host_os in aix4.[012]|aix4.[012].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`$CC -print-prog-name=collect2` + if test -f "$collect2name" && + strings "$collect2name" | $GREP resolve_lib_name >/dev/null + then + # We have reworked collect2 + : + else + # We have old collect2 + hardcode_direct=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + hardcode_minus_L=yes + hardcode_libdir_flag_spec='-L$libdir' + hardcode_libdir_separator= + fi + ;; + esac + shared_flag='-shared' + if test yes = "$aix_use_runtimelinking"; then + shared_flag="$shared_flag "'$wl-G' + fi + # Need to ensure runtime linking is disabled for the traditional + # shared library, or the linker may eventually find shared libraries + # /with/ Import File - we do not want to mix them. + shared_flag_aix='-shared' + shared_flag_svr4='-shared $wl-G' + else + # not using gcc + if test ia64 = "$host_cpu"; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test yes = "$aix_use_runtimelinking"; then + shared_flag='$wl-G' + else + shared_flag='$wl-bM:SRE' + fi + shared_flag_aix='$wl-bM:SRE' + shared_flag_svr4='$wl-G' + fi + fi + + export_dynamic_flag_spec='$wl-bexpall' + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to export. + always_export_symbols=yes + if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + allow_undefined_flag='-berok' + # Determine the default libpath from the value encoded in an + # empty executable. + if test set = "${lt_cv_aix_libpath+set}"; then + aix_libpath=$lt_cv_aix_libpath +else + if ${lt_cv_aix_libpath_+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + + lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\([^ ]*\) *$/\1/ + p + } + }' + lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + # Check for a 64-bit object if we didn't find anything. + if test -z "$lt_cv_aix_libpath_"; then + lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + if test -z "$lt_cv_aix_libpath_"; then + lt_cv_aix_libpath_=/usr/lib:/lib + fi + +fi + + aix_libpath=$lt_cv_aix_libpath_ +fi + + hardcode_libdir_flag_spec='$wl-blibpath:$libdir:'"$aix_libpath" + archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag + else + if test ia64 = "$host_cpu"; then + hardcode_libdir_flag_spec='$wl-R $libdir:/usr/lib:/lib' + allow_undefined_flag="-z nodefs" + archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an + # empty executable. + if test set = "${lt_cv_aix_libpath+set}"; then + aix_libpath=$lt_cv_aix_libpath +else + if ${lt_cv_aix_libpath_+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + + lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\([^ ]*\) *$/\1/ + p + } + }' + lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + # Check for a 64-bit object if we didn't find anything. + if test -z "$lt_cv_aix_libpath_"; then + lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + if test -z "$lt_cv_aix_libpath_"; then + lt_cv_aix_libpath_=/usr/lib:/lib + fi + +fi + + aix_libpath=$lt_cv_aix_libpath_ +fi + + hardcode_libdir_flag_spec='$wl-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + no_undefined_flag=' $wl-bernotok' + allow_undefined_flag=' $wl-berok' + if test yes = "$with_gnu_ld"; then + # We only use this code for GNU lds that support --whole-archive. + whole_archive_flag_spec='$wl--whole-archive$convenience $wl--no-whole-archive' + else + # Exported symbols can be pulled into shared objects from archives + whole_archive_flag_spec='$convenience' + fi + archive_cmds_need_lc=yes + archive_expsym_cmds='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d' + # -brtl affects multiple linker settings, -berok does not and is overridden later + compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([, ]\\)%-berok\\1%g"`' + if test svr4 != "$with_aix_soname"; then + # This is similar to how AIX traditionally builds its shared libraries. + archive_expsym_cmds="$archive_expsym_cmds"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname' + fi + if test aix != "$with_aix_soname"; then + archive_expsym_cmds="$archive_expsym_cmds"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp' + else + # used by -dlpreopen to get the symbols + archive_expsym_cmds="$archive_expsym_cmds"'~$MV $output_objdir/$realname.d/$soname $output_objdir' + fi + archive_expsym_cmds="$archive_expsym_cmds"'~$RM -r $output_objdir/$realname.d' + fi + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + archive_expsym_cmds='' + ;; + m68k) + archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + ;; + esac + ;; + + bsdi[45]*) + export_dynamic_flag_spec=-rdynamic + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + case $cc_basename in + cl*) + # Native MSVC + hardcode_libdir_flag_spec=' ' + allow_undefined_flag=unsupported + always_export_symbols=yes + file_list_spec='@' + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=.dll + # FIXME: Setting linknames here is a bad hack. + archive_cmds='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames=' + archive_expsym_cmds='if test DEF = "`$SED -n -e '\''s/^[ ]*//'\'' -e '\''/^\(;.*\)*$/d'\'' -e '\''s/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p'\'' -e q $export_symbols`" ; then + cp "$export_symbols" "$output_objdir/$soname.def"; + echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp"; + else + $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp; + fi~ + $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ + linknames=' + # The linker will not automatically build a static lib if we build a DLL. + # _LT_TAGVAR(old_archive_from_new_cmds, )='true' + enable_shared_with_static_runtimes=yes + exclude_expsyms='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' + export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' + # Don't use ranlib + old_postinstall_cmds='chmod 644 $oldlib' + postlink_cmds='lt_outputfile="@OUTPUT@"~ + lt_tool_outputfile="@TOOL_OUTPUT@"~ + case $lt_outputfile in + *.exe|*.EXE) ;; + *) + lt_outputfile=$lt_outputfile.exe + lt_tool_outputfile=$lt_tool_outputfile.exe + ;; + esac~ + if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then + $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; + $RM "$lt_outputfile.manifest"; + fi' + ;; + *) + # Assume MSVC wrapper + hardcode_libdir_flag_spec=' ' + allow_undefined_flag=unsupported + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=.dll + # FIXME: Setting linknames here is a bad hack. + archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' + # The linker will automatically build a .lib file if we build a DLL. + old_archive_from_new_cmds='true' + # FIXME: Should let the user specify the lib program. + old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs' + enable_shared_with_static_runtimes=yes + ;; + esac + ;; + + darwin* | rhapsody*) + + + archive_cmds_need_lc=no + hardcode_direct=no + hardcode_automatic=yes + hardcode_shlibpath_var=unsupported + if test yes = "$lt_cv_ld_force_load"; then + whole_archive_flag_spec='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience $wl-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' + + else + whole_archive_flag_spec='' + fi + link_all_deplibs=yes + allow_undefined_flag=$_lt_dar_allow_undefined + case $cc_basename in + ifort*|nagfor*) _lt_dar_can_shared=yes ;; + *) _lt_dar_can_shared=$GCC ;; + esac + if test yes = "$_lt_dar_can_shared"; then + output_verbose_link_cmd=func_echo_all + archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dsymutil" + module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dsymutil" + archive_expsym_cmds="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil" + module_expsym_cmds="sed -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil" + + else + ld_shlibs=no + fi + + ;; + + dgux*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_shlibpath_var=no + ;; + + # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor + # support. Future versions do this automatically, but an explicit c++rt0.o + # does not break anything, and helps significantly (at the cost of a little + # extra space). + freebsd2.2*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + # Unfortunately, older versions of FreeBSD 2 do not have this feature. + freebsd2.*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes + hardcode_minus_L=yes + hardcode_shlibpath_var=no + ;; + + # FreeBSD 3 and greater uses gcc -shared to do shared libraries. + freebsd* | dragonfly*) + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + hpux9*) + if test yes = "$GCC"; then + archive_cmds='$RM $output_objdir/$soname~$CC -shared $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' + else + archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' + fi + hardcode_libdir_flag_spec='$wl+b $wl$libdir' + hardcode_libdir_separator=: + hardcode_direct=yes + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + export_dynamic_flag_spec='$wl-E' + ;; + + hpux10*) + if test yes,no = "$GCC,$with_gnu_ld"; then + archive_cmds='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' + fi + if test no = "$with_gnu_ld"; then + hardcode_libdir_flag_spec='$wl+b $wl$libdir' + hardcode_libdir_separator=: + hardcode_direct=yes + hardcode_direct_absolute=yes + export_dynamic_flag_spec='$wl-E' + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + fi + ;; + + hpux11*) + if test yes,no = "$GCC,$with_gnu_ld"; then + case $host_cpu in + hppa*64*) + archive_cmds='$CC -shared $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + archive_cmds='$CC -shared $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + archive_cmds='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + else + case $host_cpu in + hppa*64*) + archive_cmds='$CC -b $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + archive_cmds='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + + # Older versions of the 11.00 compiler do not understand -b yet + # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5 +$as_echo_n "checking if $CC understands -b... " >&6; } +if ${lt_cv_prog_compiler__b+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler__b=no + save_LDFLAGS=$LDFLAGS + LDFLAGS="$LDFLAGS -b" + echo "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&5 + $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler__b=yes + fi + else + lt_cv_prog_compiler__b=yes + fi + fi + $RM -r conftest* + LDFLAGS=$save_LDFLAGS + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5 +$as_echo "$lt_cv_prog_compiler__b" >&6; } + +if test yes = "$lt_cv_prog_compiler__b"; then + archive_cmds='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' +else + archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' +fi + + ;; + esac + fi + if test no = "$with_gnu_ld"; then + hardcode_libdir_flag_spec='$wl+b $wl$libdir' + hardcode_libdir_separator=: + + case $host_cpu in + hppa*64*|ia64*) + hardcode_direct=no + hardcode_shlibpath_var=no + ;; + *) + hardcode_direct=yes + hardcode_direct_absolute=yes + export_dynamic_flag_spec='$wl-E' + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + ;; + esac + fi + ;; + + irix5* | irix6* | nonstopux*) + if test yes = "$GCC"; then + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' + # Try to use the -exported_symbol ld option, if it does not + # work, assume that -exports_file does not work either and + # implicitly export all symbols. + # This should be the same for all languages, so no per-tag cache variable. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5 +$as_echo_n "checking whether the $host_os linker accepts -exported_symbol... " >&6; } +if ${lt_cv_irix_exported_symbol+:} false; then : + $as_echo_n "(cached) " >&6 +else + save_LDFLAGS=$LDFLAGS + LDFLAGS="$LDFLAGS -shared $wl-exported_symbol ${wl}foo $wl-update_registry $wl/dev/null" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +int foo (void) { return 0; } +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + lt_cv_irix_exported_symbol=yes +else + lt_cv_irix_exported_symbol=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS=$save_LDFLAGS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5 +$as_echo "$lt_cv_irix_exported_symbol" >&6; } + if test yes = "$lt_cv_irix_exported_symbol"; then + archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations $wl-exports_file $wl$export_symbols -o $lib' + fi + else + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -exports_file $export_symbols -o $lib' + fi + archive_cmds_need_lc='no' + hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' + hardcode_libdir_separator=: + inherit_rpath=yes + link_all_deplibs=yes + ;; + + linux*) + case $cc_basename in + tcc*) + # Fabrice Bellard et al's Tiny C Compiler + ld_shlibs=yes + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out + else + archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF + fi + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + newsos6) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes + hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' + hardcode_libdir_separator=: + hardcode_shlibpath_var=no + ;; + + *nto* | *qnx*) + ;; + + openbsd* | bitrig*) + if test -f /usr/libexec/ld.so; then + hardcode_direct=yes + hardcode_shlibpath_var=no + hardcode_direct_absolute=yes + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags $wl-retain-symbols-file,$export_symbols' + hardcode_libdir_flag_spec='$wl-rpath,$libdir' + export_dynamic_flag_spec='$wl-E' + else + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec='$wl-rpath,$libdir' + fi + else + ld_shlibs=no + fi + ;; + + os2*) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + allow_undefined_flag=unsupported + shrext_cmds=.dll + archive_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + archive_expsym_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + prefix_cmds="$SED"~ + if test EXPORTS = "`$SED 1q $export_symbols`"; then + prefix_cmds="$prefix_cmds -e 1d"; + fi~ + prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ + cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + old_archive_From_new_cmds='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' + enable_shared_with_static_runtimes=yes + ;; + + osf3*) + if test yes = "$GCC"; then + allow_undefined_flag=' $wl-expect_unresolved $wl\*' + archive_cmds='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' + else + allow_undefined_flag=' -expect_unresolved \*' + archive_cmds='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' + fi + archive_cmds_need_lc='no' + hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' + hardcode_libdir_separator=: + ;; + + osf4* | osf5*) # as osf3* with the addition of -msym flag + if test yes = "$GCC"; then + allow_undefined_flag=' $wl-expect_unresolved $wl\*' + archive_cmds='$CC -shared$allow_undefined_flag $pic_flag $libobjs $deplibs $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' + hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' + else + allow_undefined_flag=' -expect_unresolved \*' + archive_cmds='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' + archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ + $CC -shared$allow_undefined_flag $wl-input $wl$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~$RM $lib.exp' + + # Both c and cxx compiler support -rpath directly + hardcode_libdir_flag_spec='-rpath $libdir' + fi + archive_cmds_need_lc='no' + hardcode_libdir_separator=: + ;; + + solaris*) + no_undefined_flag=' -z defs' + if test yes = "$GCC"; then + wlarc='$wl' + archive_cmds='$CC -shared $pic_flag $wl-z ${wl}text $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -shared $pic_flag $wl-z ${wl}text $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + else + case `$CC -V 2>&1` in + *"Compilers 5.0"*) + wlarc='' + archive_cmds='$LD -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $linker_flags' + archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $LD -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' + ;; + *) + wlarc='$wl' + archive_cmds='$CC -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + ;; + esac + fi + hardcode_libdir_flag_spec='-R$libdir' + hardcode_shlibpath_var=no + case $host_os in + solaris2.[0-5] | solaris2.[0-5].*) ;; + *) + # The compiler driver will combine and reorder linker options, + # but understands '-z linker_flag'. GCC discards it without '$wl', + # but is careful enough not to reorder. + # Supported since Solaris 2.6 (maybe 2.5.1?) + if test yes = "$GCC"; then + whole_archive_flag_spec='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract' + else + whole_archive_flag_spec='-z allextract$convenience -z defaultextract' + fi + ;; + esac + link_all_deplibs=yes + ;; + + sunos4*) + if test sequent = "$host_vendor"; then + # Use $CC to link under sequent, because it throws in some extra .o + # files that make .init and .fini sections work. + archive_cmds='$CC -G $wl-h $soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' + fi + hardcode_libdir_flag_spec='-L$libdir' + hardcode_direct=yes + hardcode_minus_L=yes + hardcode_shlibpath_var=no + ;; + + sysv4) + case $host_vendor in + sni) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes # is this really true??? + ;; + siemens) + ## LD is ld it makes a PLAMLIB + ## CC just makes a GrossModule. + archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' + reload_cmds='$CC -r -o $output$reload_objs' + hardcode_direct=no + ;; + motorola) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=no #Motorola manual says yes, but my tests say they lie + ;; + esac + runpath_var='LD_RUN_PATH' + hardcode_shlibpath_var=no + ;; + + sysv4.3*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var=no + export_dynamic_flag_spec='-Bexport' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var=no + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + ld_shlibs=yes + fi + ;; + + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) + no_undefined_flag='$wl-z,text' + archive_cmds_need_lc=no + hardcode_shlibpath_var=no + runpath_var='LD_RUN_PATH' + + if test yes = "$GCC"; then + archive_cmds='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + sysv5* | sco3.2v5* | sco5v6*) + # Note: We CANNOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + no_undefined_flag='$wl-z,text' + allow_undefined_flag='$wl-z,nodefs' + archive_cmds_need_lc=no + hardcode_shlibpath_var=no + hardcode_libdir_flag_spec='$wl-R,$libdir' + hardcode_libdir_separator=':' + link_all_deplibs=yes + export_dynamic_flag_spec='$wl-Bexport' + runpath_var='LD_RUN_PATH' + + if test yes = "$GCC"; then + archive_cmds='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + uts4*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_shlibpath_var=no + ;; + + *) + ld_shlibs=no + ;; + esac + + if test sni = "$host_vendor"; then + case $host in + sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + export_dynamic_flag_spec='$wl-Blargedynsym' + ;; + esac + fi + fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5 +$as_echo "$ld_shlibs" >&6; } +test no = "$ld_shlibs" && can_build_shared=no + +with_gnu_ld=$with_gnu_ld + + + + + + + + + + + + + + + +# +# Do we need to explicitly link libc? +# +case "x$archive_cmds_need_lc" in +x|xyes) + # Assume -lc should be added + archive_cmds_need_lc=yes + + if test yes,yes = "$GCC,$enable_shared"; then + case $archive_cmds in + *'~'*) + # FIXME: we may have to deal with multi-command sequences. + ;; + '$CC '*) + # Test whether the compiler implicitly links with -lc since on some + # systems, -lgcc has to come before -lc. If gcc already passes -lc + # to ld, don't add -lc before -lgcc. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 +$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } +if ${lt_cv_archive_cmds_need_lc+:} false; then : + $as_echo_n "(cached) " >&6 +else + $RM conftest* + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$lt_prog_compiler_wl + pic_flag=$lt_prog_compiler_pic + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$allow_undefined_flag + allow_undefined_flag= + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 + (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + then + lt_cv_archive_cmds_need_lc=no + else + lt_cv_archive_cmds_need_lc=yes + fi + allow_undefined_flag=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5 +$as_echo "$lt_cv_archive_cmds_need_lc" >&6; } + archive_cmds_need_lc=$lt_cv_archive_cmds_need_lc + ;; + esac + fi + ;; +esac + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 +$as_echo_n "checking dynamic linker characteristics... " >&6; } + +if test yes = "$GCC"; then + case $host_os in + darwin*) lt_awk_arg='/^libraries:/,/LR/' ;; + *) lt_awk_arg='/^libraries:/' ;; + esac + case $host_os in + mingw* | cegcc*) lt_sed_strip_eq='s|=\([A-Za-z]:\)|\1|g' ;; + *) lt_sed_strip_eq='s|=/|/|g' ;; + esac + lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` + case $lt_search_path_spec in + *\;*) + # if the path contains ";" then we assume it to be the separator + # otherwise default to the standard path separator (i.e. ":") - it is + # assumed that no part of a normal pathname contains ";" but that should + # okay in the real world where ";" in dirpaths is itself problematic. + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` + ;; + *) + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` + ;; + esac + # Ok, now we have the path, separated by spaces, we can step through it + # and add multilib dir if necessary... + lt_tmp_lt_search_path_spec= + lt_multi_os_dir=/`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` + # ...but if some path component already ends with the multilib dir we assume + # that all is fine and trust -print-search-dirs as is (GCC 4.2? or newer). + case "$lt_multi_os_dir; $lt_search_path_spec " in + "/; "* | "/.; "* | "/./; "* | *"$lt_multi_os_dir "* | *"$lt_multi_os_dir/ "*) + lt_multi_os_dir= + ;; + esac + for lt_sys_path in $lt_search_path_spec; do + if test -d "$lt_sys_path$lt_multi_os_dir"; then + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path$lt_multi_os_dir" + elif test -n "$lt_multi_os_dir"; then + test -d "$lt_sys_path" && \ + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" + fi + done + lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' +BEGIN {RS = " "; FS = "/|\n";} { + lt_foo = ""; + lt_count = 0; + for (lt_i = NF; lt_i > 0; lt_i--) { + if ($lt_i != "" && $lt_i != ".") { + if ($lt_i == "..") { + lt_count++; + } else { + if (lt_count == 0) { + lt_foo = "/" $lt_i lt_foo; + } else { + lt_count--; + } + } + } + } + if (lt_foo != "") { lt_freq[lt_foo]++; } + if (lt_freq[lt_foo] == 1) { print lt_foo; } +}'` + # AWK program above erroneously prepends '/' to C:/dos/paths + # for these hosts. + case $host_os in + mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ + $SED 's|/\([A-Za-z]:\)|\1|g'` ;; + esac + sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` +else + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" +fi +library_names_spec= +libname_spec='lib$name' +soname_spec= +shrext_cmds=.so +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +shlibpath_overrides_runpath=unknown +version_type=none +dynamic_linker="$host_os ld.so" +sys_lib_dlsearch_path_spec="/lib /usr/lib" +need_lib_prefix=unknown +hardcode_into_libs=no + +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +need_version=unknown + + + +case $host_os in +aix3*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$release$shared_ext$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX 3 has no versioning support, so we append a major version to the name. + soname_spec='$libname$release$shared_ext$major' + ;; + +aix[4-9]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + hardcode_into_libs=yes + if test ia64 = "$host_cpu"; then + # AIX 5 supports IA64 + library_names_spec='$libname$release$shared_ext$major $libname$release$shared_ext$versuffix $libname$shared_ext' + shlibpath_var=LD_LIBRARY_PATH + else + # With GCC up to 2.95.x, collect2 would create an import file + # for dependence libraries. The import file would start with + # the line '#! .'. This would cause the generated library to + # depend on '.', always an invalid library. This was fixed in + # development snapshots of GCC prior to 3.0. + case $host_os in + aix4 | aix4.[01] | aix4.[01].*) + if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' + echo ' yes ' + echo '#endif'; } | $CC -E - | $GREP yes > /dev/null; then + : + else + can_build_shared=no + fi + ;; + esac + # Using Import Files as archive members, it is possible to support + # filename-based versioning of shared library archives on AIX. While + # this would work for both with and without runtime linking, it will + # prevent static linking of such archives. So we do filename-based + # shared library versioning with .so extension only, which is used + # when both runtime linking and shared linking is enabled. + # Unfortunately, runtime linking may impact performance, so we do + # not want this to be the default eventually. Also, we use the + # versioned .so libs for executables only if there is the -brtl + # linker flag in LDFLAGS as well, or --with-aix-soname=svr4 only. + # To allow for filename-based versioning support, we need to create + # libNAME.so.V as an archive file, containing: + # *) an Import File, referring to the versioned filename of the + # archive as well as the shared archive member, telling the + # bitwidth (32 or 64) of that shared object, and providing the + # list of exported symbols of that shared object, eventually + # decorated with the 'weak' keyword + # *) the shared object with the F_LOADONLY flag set, to really avoid + # it being seen by the linker. + # At run time we better use the real file rather than another symlink, + # but for link time we create the symlink libNAME.so -> libNAME.so.V + + case $with_aix_soname,$aix_use_runtimelinking in + # AIX (on Power*) has no versioning support, so currently we cannot hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + aix,yes) # traditional libtool + dynamic_linker='AIX unversionable lib.so' + # If using run time linking (on AIX 4.2 or later) use lib.so + # instead of lib.a to let people know that these are not + # typical AIX shared libraries. + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + ;; + aix,no) # traditional AIX only + dynamic_linker='AIX lib.a(lib.so.V)' + # We preserve .a as extension for shared libraries through AIX4.2 + # and later when we are not doing run time linking. + library_names_spec='$libname$release.a $libname.a' + soname_spec='$libname$release$shared_ext$major' + ;; + svr4,*) # full svr4 only + dynamic_linker="AIX lib.so.V($shared_archive_member_spec.o)" + library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' + # We do not specify a path in Import Files, so LIBPATH fires. + shlibpath_overrides_runpath=yes + ;; + *,yes) # both, prefer svr4 + dynamic_linker="AIX lib.so.V($shared_archive_member_spec.o), lib.a(lib.so.V)" + library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' + # unpreferred sharedlib libNAME.a needs extra handling + postinstall_cmds='test -n "$linkname" || linkname="$realname"~func_stripname "" ".so" "$linkname"~$install_shared_prog "$dir/$func_stripname_result.$libext" "$destdir/$func_stripname_result.$libext"~test -z "$tstripme" || test -z "$striplib" || $striplib "$destdir/$func_stripname_result.$libext"' + postuninstall_cmds='for n in $library_names $old_library; do :; done~func_stripname "" ".so" "$n"~test "$func_stripname_result" = "$n" || func_append rmfiles " $odir/$func_stripname_result.$libext"' + # We do not specify a path in Import Files, so LIBPATH fires. + shlibpath_overrides_runpath=yes + ;; + *,no) # both, prefer aix + dynamic_linker="AIX lib.a(lib.so.V), lib.so.V($shared_archive_member_spec.o)" + library_names_spec='$libname$release.a $libname.a' + soname_spec='$libname$release$shared_ext$major' + # unpreferred sharedlib libNAME.so.V and symlink libNAME.so need extra handling + postinstall_cmds='test -z "$dlname" || $install_shared_prog $dir/$dlname $destdir/$dlname~test -z "$tstripme" || test -z "$striplib" || $striplib $destdir/$dlname~test -n "$linkname" || linkname=$realname~func_stripname "" ".a" "$linkname"~(cd "$destdir" && $LN_S -f $dlname $func_stripname_result.so)' + postuninstall_cmds='test -z "$dlname" || func_append rmfiles " $odir/$dlname"~for n in $old_library $library_names; do :; done~func_stripname "" ".a" "$n"~func_append rmfiles " $odir/$func_stripname_result.so"' + ;; + esac + shlibpath_var=LIBPATH + fi + ;; + +amigaos*) + case $host_cpu in + powerpc) + # Since July 2007 AmigaOS4 officially supports .so libraries. + # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + ;; + m68k) + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' + ;; + esac + ;; + +beos*) + library_names_spec='$libname$shared_ext' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; + +bsdi[45]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" + sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" + # the default ld.so.conf also contains /usr/contrib/lib and + # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow + # libtool to hard-code these into programs + ;; + +cygwin* | mingw* | pw32* | cegcc*) + version_type=windows + shrext_cmds=.dll + need_version=no + need_lib_prefix=no + + case $GCC,$cc_basename in + yes,*) + # gcc + library_names_spec='$libname.dll.a' + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \$file`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname~ + if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then + eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; + fi' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + + case $host_os in + cygwin*) + # Cygwin DLLs use 'cyg' prefix rather than 'lib' + soname_spec='`echo $libname | sed -e 's/^lib/cyg/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' + + sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api" + ;; + mingw* | cegcc*) + # MinGW DLLs use traditional 'lib' prefix + soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' + ;; + pw32*) + # pw32 DLLs use 'pw' prefix rather than 'lib' + library_names_spec='`echo $libname | sed -e 's/^lib/pw/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' + ;; + esac + dynamic_linker='Win32 ld.exe' + ;; + + *,cl*) + # Native MSVC + libname_spec='$name' + soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' + library_names_spec='$libname.dll.lib' + + case $build_os in + mingw*) + sys_lib_search_path_spec= + lt_save_ifs=$IFS + IFS=';' + for lt_path in $LIB + do + IFS=$lt_save_ifs + # Let DOS variable expansion print the short 8.3 style file name. + lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` + sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" + done + IFS=$lt_save_ifs + # Convert to MSYS style. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` + ;; + cygwin*) + # Convert to unix form, then to dos form, then back to unix form + # but this time dos style (no spaces!) so that the unix form looks + # like /cygdrive/c/PROGRA~1:/cygdr... + sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` + sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` + sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + ;; + *) + sys_lib_search_path_spec=$LIB + if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then + # It is most probably a Windows format PATH. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + # FIXME: find the short name or the path components, as spaces are + # common. (e.g. "Program Files" -> "PROGRA~1") + ;; + esac + + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \$file`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + dynamic_linker='Win32 link.exe' + ;; + + *) + # Assume MSVC wrapper + library_names_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext $libname.lib' + dynamic_linker='Win32 ld.exe' + ;; + esac + # FIXME: first we should search . and the directory the executable is in + shlibpath_var=PATH + ;; + +darwin* | rhapsody*) + dynamic_linker="$host_os dyld" + version_type=darwin + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$major$shared_ext $libname$shared_ext' + soname_spec='$libname$release$major$shared_ext' + shlibpath_overrides_runpath=yes + shlibpath_var=DYLD_LIBRARY_PATH + shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' + + sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib" + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' + ;; + +dgux*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +freebsd* | dragonfly*) + # DragonFly does not have aout. When/if they implement a new + # versioning mechanism, adjust this. + if test -x /usr/bin/objformat; then + objformat=`/usr/bin/objformat` + else + case $host_os in + freebsd[23].*) objformat=aout ;; + *) objformat=elf ;; + esac + fi + version_type=freebsd-$objformat + case $version_type in + freebsd-elf*) + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' + need_version=yes + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case $host_os in + freebsd2.*) + shlibpath_overrides_runpath=yes + ;; + freebsd3.[01]* | freebsdelf3.[01]*) + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ + freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + *) # from 4.6 on, and DragonFly + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + esac + ;; + +haiku*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + dynamic_linker="$host_os runtime_loader" + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LIBRARY_PATH + shlibpath_overrides_runpath=no + sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' + hardcode_into_libs=yes + ;; + +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + version_type=sunos + need_lib_prefix=no + need_version=no + case $host_cpu in + ia64*) + shrext_cmds='.so' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.so" + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + if test 32 = "$HPUX_IA64_MODE"; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + sys_lib_dlsearch_path_spec=/usr/lib/hpux32 + else + sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + sys_lib_dlsearch_path_spec=/usr/lib/hpux64 + fi + ;; + hppa*64*) + shrext_cmds='.sl' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.sl" + shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + *) + shrext_cmds='.sl' + dynamic_linker="$host_os dld.sl" + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + ;; + esac + # HP-UX runs *really* slowly unless shared libraries are mode 555, ... + postinstall_cmds='chmod 555 $lib' + # or fails outright, so override atomically: + install_override_mode=555 + ;; + +interix[3-9]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) + if test yes = "$lt_cv_prog_gnu_ld"; then + version_type=linux # correct to gnu/linux during the next big refactor + else + version_type=irix + fi ;; + esac + need_lib_prefix=no + need_version=no + soname_spec='$libname$release$shared_ext$major' + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$release$shared_ext $libname$shared_ext' + case $host_os in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in # libtool.m4 will add one of these switches to LD + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") + libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") + libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") + libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac + ;; + esac + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib$libsuff /lib$libsuff /usr/local/lib$libsuff" + sys_lib_dlsearch_path_spec="/usr/lib$libsuff /lib$libsuff" + hardcode_into_libs=yes + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux*oldld* | linux*aout* | linux*coff*) + dynamic_linker=no + ;; + +linux*android*) + version_type=none # Android doesn't support versioned libraries. + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext' + soname_spec='$libname$release$shared_ext' + finish_cmds= + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + dynamic_linker='Android linker' + # Don't embed -rpath directories since the linker doesn't support them. + hardcode_libdir_flag_spec='-L$libdir' + ;; + +# This must be glibc/ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + + # Some binutils ld are patched to set DT_RUNPATH + if ${lt_cv_shlibpath_overrides_runpath+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_shlibpath_overrides_runpath=no + save_LDFLAGS=$LDFLAGS + save_libdir=$libdir + eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \ + LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\"" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : + lt_cv_shlibpath_overrides_runpath=yes +fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS=$save_LDFLAGS + libdir=$save_libdir + +fi + + shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath + + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + # Add ABI-specific directories to the system library path. + sys_lib_dlsearch_path_spec="/lib64 /usr/lib64 /lib /usr/lib" + + # Ideally, we could use ldconfig to report *all* directores which are + # searched for libraries, however this is still not possible. Aside from not + # being certain /sbin/ldconfig is available, command + # 'ldconfig -N -X -v | grep ^/' on 64bit Fedora does not report /usr/lib64, + # even though it is searched at run-time. Try to do the best guess by + # appending ld.so.conf contents (and includes) to the search path. + if test -f /etc/ld.so.conf; then + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` + sys_lib_dlsearch_path_spec="$sys_lib_dlsearch_path_spec $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; + +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + +newsos6) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +*nto* | *qnx*) + version_type=qnx + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='ldqnx.so' + ;; + +openbsd* | bitrig*) + version_type=sunos + sys_lib_dlsearch_path_spec=/usr/lib + need_lib_prefix=no + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then + need_version=no + else + need_version=yes + fi + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +os2*) + libname_spec='$name' + version_type=windows + shrext_cmds=.dll + need_version=no + need_lib_prefix=no + # OS/2 can only load a DLL with a base name of 8 characters or less. + soname_spec='`test -n "$os2dllname" && libname="$os2dllname"; + v=$($ECHO $release$versuffix | tr -d .-); + n=$($ECHO $libname | cut -b -$((8 - ${#v})) | tr . _); + $ECHO $n$v`$shared_ext' + library_names_spec='${libname}_dll.$libext' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=BEGINLIBPATH + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + postinstall_cmds='base_file=`basename \$file`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; $ECHO \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname~ + if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then + eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; + fi' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; $ECHO \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_lib_prefix=no + need_version=no + soname_spec='$libname$release$shared_ext$major' + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + +rdos*) + dynamic_linker=no + ;; + +solaris*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; + +sunos4*) + version_type=sunos + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test yes = "$with_gnu_ld"; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.3*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + need_lib_prefix=no + runpath_var=LD_RUN_PATH + ;; + siemens) + need_lib_prefix=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; + +sysv4*MP*) + if test -d /usr/nec; then + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$shared_ext.$versuffix $libname$shared_ext.$major $libname$shared_ext' + soname_spec='$libname$shared_ext.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + version_type=sco + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + if test yes = "$with_gnu_ld"; then + sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' + else + sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' + case $host_os in + sco3.2v5*) + sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" + ;; + esac + fi + sys_lib_dlsearch_path_spec='/usr/lib' + ;; + +tpf*) + # TPF is a cross-target only. Preferred cross-host = GNU/Linux. + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +uts4*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +*) + dynamic_linker=no + ;; +esac +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 +$as_echo "$dynamic_linker" >&6; } +test no = "$dynamic_linker" && can_build_shared=no + +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test yes = "$GCC"; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi + +if test set = "${lt_cv_sys_lib_search_path_spec+set}"; then + sys_lib_search_path_spec=$lt_cv_sys_lib_search_path_spec +fi + +if test set = "${lt_cv_sys_lib_dlsearch_path_spec+set}"; then + sys_lib_dlsearch_path_spec=$lt_cv_sys_lib_dlsearch_path_spec +fi + +# remember unaugmented sys_lib_dlsearch_path content for libtool script decls... +configure_time_dlsearch_path=$sys_lib_dlsearch_path_spec + +# ... but it needs LT_SYS_LIBRARY_PATH munging for other configure-time code +func_munge_path_list sys_lib_dlsearch_path_spec "$LT_SYS_LIBRARY_PATH" + +# to be used as default LT_SYS_LIBRARY_PATH value in generated libtool +configure_time_lt_sys_library_path=$LT_SYS_LIBRARY_PATH + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 +$as_echo_n "checking how to hardcode library paths into programs... " >&6; } +hardcode_action= +if test -n "$hardcode_libdir_flag_spec" || + test -n "$runpath_var" || + test yes = "$hardcode_automatic"; then + + # We can hardcode non-existent directories. + if test no != "$hardcode_direct" && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test no != "$_LT_TAGVAR(hardcode_shlibpath_var, )" && + test no != "$hardcode_minus_L"; then + # Linking always hardcodes the temporary library directory. + hardcode_action=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + hardcode_action=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + hardcode_action=unsupported +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5 +$as_echo "$hardcode_action" >&6; } + +if test relink = "$hardcode_action" || + test yes = "$inherit_rpath"; then + # Fast installation is not supported + enable_fast_install=no +elif test yes = "$shlibpath_overrides_runpath" || + test no = "$enable_shared"; then + # Fast installation is not necessary + enable_fast_install=needless +fi + + + + + + + if test yes != "$enable_dlopen"; then + enable_dlopen=unknown + enable_dlopen_self=unknown + enable_dlopen_self_static=unknown +else + lt_cv_dlopen=no + lt_cv_dlopen_libs= + + case $host_os in + beos*) + lt_cv_dlopen=load_add_on + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ;; + + mingw* | pw32* | cegcc*) + lt_cv_dlopen=LoadLibrary + lt_cv_dlopen_libs= + ;; + + cygwin*) + lt_cv_dlopen=dlopen + lt_cv_dlopen_libs= + ;; + + darwin*) + # if libdl is installed we need to link against it + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 +$as_echo_n "checking for dlopen in -ldl... " >&6; } +if ${ac_cv_lib_dl_dlopen+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldl $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dl_dlopen=yes +else + ac_cv_lib_dl_dlopen=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 +$as_echo "$ac_cv_lib_dl_dlopen" >&6; } +if test "x$ac_cv_lib_dl_dlopen" = xyes; then : + lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl +else + + lt_cv_dlopen=dyld + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + +fi + + ;; + + tpf*) + # Don't try to run any link tests for TPF. We know it's impossible + # because TPF is a cross-compiler, and we know how we open DSOs. + lt_cv_dlopen=dlopen + lt_cv_dlopen_libs= + lt_cv_dlopen_self=no + ;; + + *) + ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load" +if test "x$ac_cv_func_shl_load" = xyes; then : + lt_cv_dlopen=shl_load +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 +$as_echo_n "checking for shl_load in -ldld... " >&6; } +if ${ac_cv_lib_dld_shl_load+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldld $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char shl_load (); +int +main () +{ +return shl_load (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dld_shl_load=yes +else + ac_cv_lib_dld_shl_load=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 +$as_echo "$ac_cv_lib_dld_shl_load" >&6; } +if test "x$ac_cv_lib_dld_shl_load" = xyes; then : + lt_cv_dlopen=shl_load lt_cv_dlopen_libs=-ldld +else + ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" +if test "x$ac_cv_func_dlopen" = xyes; then : + lt_cv_dlopen=dlopen +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 +$as_echo_n "checking for dlopen in -ldl... " >&6; } +if ${ac_cv_lib_dl_dlopen+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldl $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dl_dlopen=yes +else + ac_cv_lib_dl_dlopen=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 +$as_echo "$ac_cv_lib_dl_dlopen" >&6; } +if test "x$ac_cv_lib_dl_dlopen" = xyes; then : + lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 +$as_echo_n "checking for dlopen in -lsvld... " >&6; } +if ${ac_cv_lib_svld_dlopen+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lsvld $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_svld_dlopen=yes +else + ac_cv_lib_svld_dlopen=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5 +$as_echo "$ac_cv_lib_svld_dlopen" >&6; } +if test "x$ac_cv_lib_svld_dlopen" = xyes; then : + lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-lsvld +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 +$as_echo_n "checking for dld_link in -ldld... " >&6; } +if ${ac_cv_lib_dld_dld_link+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldld $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dld_link (); +int +main () +{ +return dld_link (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dld_dld_link=yes +else + ac_cv_lib_dld_dld_link=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5 +$as_echo "$ac_cv_lib_dld_dld_link" >&6; } +if test "x$ac_cv_lib_dld_dld_link" = xyes; then : + lt_cv_dlopen=dld_link lt_cv_dlopen_libs=-ldld +fi + + +fi + + +fi + + +fi + + +fi + + +fi + + ;; + esac + + if test no = "$lt_cv_dlopen"; then + enable_dlopen=no + else + enable_dlopen=yes + fi + + case $lt_cv_dlopen in + dlopen) + save_CPPFLAGS=$CPPFLAGS + test yes = "$ac_cv_header_dlfcn_h" && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" + + save_LDFLAGS=$LDFLAGS + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" + + save_LIBS=$LIBS + LIBS="$lt_cv_dlopen_libs $LIBS" + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5 +$as_echo_n "checking whether a program can dlopen itself... " >&6; } +if ${lt_cv_dlopen_self+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test yes = "$cross_compiling"; then : + lt_cv_dlopen_self=cross +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext <<_LT_EOF +#line $LINENO "configure" +#include "confdefs.h" + +#if HAVE_DLFCN_H +#include +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +/* When -fvisibility=hidden is used, assume the code has been annotated + correspondingly for the symbols needed. */ +#if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) +int fnord () __attribute__((visibility("default"))); +#endif + +int fnord () { return 42; } +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else + { + if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + else puts (dlerror ()); + } + /* dlclose (self); */ + } + else + puts (dlerror ()); + + return status; +} +_LT_EOF + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s "conftest$ac_exeext" 2>/dev/null; then + (./conftest; exit; ) >&5 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; + x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; + x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;; + esac + else : + # compilation failed + lt_cv_dlopen_self=no + fi +fi +rm -fr conftest* + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5 +$as_echo "$lt_cv_dlopen_self" >&6; } + + if test yes = "$lt_cv_dlopen_self"; then + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5 +$as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; } +if ${lt_cv_dlopen_self_static+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test yes = "$cross_compiling"; then : + lt_cv_dlopen_self_static=cross +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext <<_LT_EOF +#line $LINENO "configure" +#include "confdefs.h" + +#if HAVE_DLFCN_H +#include +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +/* When -fvisibility=hidden is used, assume the code has been annotated + correspondingly for the symbols needed. */ +#if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) +int fnord () __attribute__((visibility("default"))); +#endif + +int fnord () { return 42; } +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else + { + if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + else puts (dlerror ()); + } + /* dlclose (self); */ + } + else + puts (dlerror ()); + + return status; +} +_LT_EOF + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s "conftest$ac_exeext" 2>/dev/null; then + (./conftest; exit; ) >&5 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; + x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; + x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;; + esac + else : + # compilation failed + lt_cv_dlopen_self_static=no + fi +fi +rm -fr conftest* + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5 +$as_echo "$lt_cv_dlopen_self_static" >&6; } + fi + + CPPFLAGS=$save_CPPFLAGS + LDFLAGS=$save_LDFLAGS + LIBS=$save_LIBS + ;; + esac + + case $lt_cv_dlopen_self in + yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; + *) enable_dlopen_self=unknown ;; + esac + + case $lt_cv_dlopen_self_static in + yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; + *) enable_dlopen_self_static=unknown ;; + esac +fi + + + + + + + + + + + + + + + + + +striplib= +old_striplib= +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5 +$as_echo_n "checking whether stripping libraries is possible... " >&6; } +if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then + test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" + test -z "$striplib" && striplib="$STRIP --strip-unneeded" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else +# FIXME - insert some real tests, host_os isn't really good enough + case $host_os in + darwin*) + if test -n "$STRIP"; then + striplib="$STRIP -x" + old_striplib="$STRIP -S" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + fi + ;; + *) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + ;; + esac +fi + + + + + + + + + + + + + # Report what library types will actually be built + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 +$as_echo_n "checking if libtool supports shared libraries... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 +$as_echo "$can_build_shared" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 +$as_echo_n "checking whether to build shared libraries... " >&6; } + test no = "$can_build_shared" && enable_shared=no + + # On AIX, shared libraries and static libraries use the same namespace, and + # are all built from PIC. + case $host_os in + aix3*) + test yes = "$enable_shared" && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + + aix[4-9]*) + if test ia64 != "$host_cpu"; then + case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in + yes,aix,yes) ;; # shared object as lib.so file only + yes,svr4,*) ;; # shared object as lib.so archive member only + yes,*) enable_static=no ;; # shared object in lib.a archive as well + esac + fi + ;; + esac + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 +$as_echo "$enable_shared" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 +$as_echo_n "checking whether to build static libraries... " >&6; } + # Make sure either enable_shared or enable_static is yes. + test yes = "$enable_shared" || enable_static=yes + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 +$as_echo "$enable_static" >&6; } + + + + +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 + +CC=$lt_save_CC + + + + + + + + + + + + + + + + ac_config_commands="$ac_config_commands libtool" + + + + +# Only expand once: + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNUC variadic macros" >&5 +$as_echo_n "checking for GNUC variadic macros... " >&6; } +if ${babl_cv_prog_gnuc_variadic_macros+:} false; then : + $as_echo_n "(cached) " >&6 +else + # gcc-2.95.x supports both gnu style and ISO varargs, but if -ansi + # is passed ISO vararg support is turned off, and there is no work + # around to turn it on, so we unconditionally turn it off. + { echo '#if __GNUC__ == 2 && __GNUC_MINOR__ == 95' + echo ' yes ' + echo '#endif'; } > conftest.c + if ${CPP} conftest.c | grep yes > /dev/null; then + babl_cv_prog_c_variadic_macros=no + babl_cv_prog_cxx_variadic_macros=no + fi + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +int a(int p1, int p2, int p3); +#define call_a(params...) a(1,params) +call_a(2,3); + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + babl_cv_prog_gnuc_variadic_macros=yes +else + babl_cv_prog_gnuc_variadic_macros=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $babl_cv_prog_gnuc_variadic_macros" >&5 +$as_echo "$babl_cv_prog_gnuc_variadic_macros" >&6; } +if test x$babl_cv_prog_gnuc_variadic_macros = xyes; then + +$as_echo "#define BABL_GNUC_VARIADIC_MACROS 1" >>confdefs.h + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ISO C99 variadic macros in C" >&5 +$as_echo_n "checking for ISO C99 variadic macros in C... " >&6; } +if ${babl_cv_prog_c_variadic_macros+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +int a(int p1, int p2, int p3); +#define call_a(...) a(1,__VA_ARGS__) +call_a(2,3); + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + babl_cv_prog_c_variadic_macros=yes +else + babl_cv_prog_c_variadic_macros=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $babl_cv_prog_c_variadic_macros" >&5 +$as_echo "$babl_cv_prog_c_variadic_macros" >&6; } +if test x$babl_cv_prog_c_variadic_macros = xyes ; then + +$as_echo "#define BABL_ISO_VARIADIC_MACROS 1" >>confdefs.h + +fi + +# No C++ compiler + babl_cv_prog_cxx_variadic_macros=no +if test x$babl_cv_prog_cxx_variadic_macros = xyes ; then + +$as_echo "#define BABL_ISO_CXX_VARIADIC_MACROS 1" >>confdefs.h + +fi + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable maintainer-specific portions of Makefiles" >&5 +$as_echo_n "checking whether to enable maintainer-specific portions of Makefiles... " >&6; } + # Check whether --enable-maintainer-mode was given. +if test "${enable_maintainer_mode+set}" = set; then : + enableval=$enable_maintainer_mode; USE_MAINTAINER_MODE=$enableval +else + USE_MAINTAINER_MODE=yes +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_MAINTAINER_MODE" >&5 +$as_echo "$USE_MAINTAINER_MODE" >&6; } + if test $USE_MAINTAINER_MODE = yes; then + MAINTAINER_MODE_TRUE= + MAINTAINER_MODE_FALSE='#' +else + MAINTAINER_MODE_TRUE='#' + MAINTAINER_MODE_FALSE= +fi + + MAINT=$MAINTAINER_MODE_TRUE + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 +$as_echo_n "checking for ANSI C header files... " >&6; } +if ${ac_cv_header_stdc+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#include +#include + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_header_stdc=yes +else + ac_cv_header_stdc=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +if test $ac_cv_header_stdc = yes; then + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "memchr" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "free" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. + if test "$cross_compiling" = yes; then : + : +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#if ((' ' & 0x0FF) == 0x020) +# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +#else +# define ISLOWER(c) \ + (('a' <= (c) && (c) <= 'i') \ + || ('j' <= (c) && (c) <= 'r') \ + || ('s' <= (c) && (c) <= 'z')) +# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) +#endif + +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) +int +main () +{ + int i; + for (i = 0; i < 256; i++) + if (XOR (islower (i), ISLOWER (i)) + || toupper (i) != TOUPPER (i)) + return 2; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + +else + ac_cv_header_stdc=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 +$as_echo "$ac_cv_header_stdc" >&6; } +if test $ac_cv_header_stdc = yes; then + +$as_echo "#define STDC_HEADERS 1" >>confdefs.h + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 +$as_echo_n "checking whether build environment is sane... " >&6; } +# Reject unsafe characters in $srcdir or the absolute working directory +# name. Accept space and tab only in the latter. +am_lf=' +' +case `pwd` in + *[\\\"\#\$\&\'\`$am_lf]*) + as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;; +esac +case $srcdir in + *[\\\"\#\$\&\'\`$am_lf\ \ ]*) + as_fn_error $? "unsafe srcdir value: '$srcdir'" "$LINENO" 5;; +esac + +# Do 'set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + am_has_slept=no + for am_try in 1 2; do + echo "timestamp, slept: $am_has_slept" > conftest.file + set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` + if test "$*" = "X"; then + # -L didn't work. + set X `ls -t "$srcdir/configure" conftest.file` + fi + if test "$*" != "X $srcdir/configure conftest.file" \ + && test "$*" != "X conftest.file $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + as_fn_error $? "ls -t appears to fail. Make sure there is not a broken + alias in your environment" "$LINENO" 5 + fi + if test "$2" = conftest.file || test $am_try -eq 2; then + break + fi + # Just in case. + sleep 1 + am_has_slept=yes + done + test "$2" = conftest.file + ) +then + # Ok. + : +else + as_fn_error $? "newly created file is older than distributed files! +Check your system clock" "$LINENO" 5 +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +# If we didn't sleep, we still need to ensure time stamps of config.status and +# generated files are strictly newer. +am_sleep_pid= +if grep 'slept: no' conftest.file >/dev/null 2>&1; then + ( sleep 1 ) & + am_sleep_pid=$! +fi + +rm -f conftest.file + + +WEBSITE_HOST=pippin.gimp.org + +WEBSITE_LOCATION=public_html/babl/ + + + +if eval "test x$GCC = xyes"; then + case " $CFLAGS " in + *\ \ -Wall\ \ *) ;; + *) CFLAGS="$CFLAGS -Wall" ;; + esac + + + extra_warnings= + for flag in '-Wdeclaration-after-statement'; do + if test -z "$extra_warnings"; then + extra_warnings_save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS $flag" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC understands $flag" >&5 +$as_echo_n "checking whether $CC understands $flag... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + extra_warnings_works=yes +else + extra_warnings_works=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $extra_warnings_works" >&5 +$as_echo "$extra_warnings_works" >&6; } + CFLAGS="$extra_warnings_save_CFLAGS" + if test "x$extra_warnings_works" = "xyes"; then + extra_warnings="$flag" + fi + fi + done + +CFLAGS="$CFLAGS $extra_warnings" + + + extra_warnings= + for flag in '-Wmissing-prototypes'; do + if test -z "$extra_warnings"; then + extra_warnings_save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS $flag" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC understands $flag" >&5 +$as_echo_n "checking whether $CC understands $flag... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + extra_warnings_works=yes +else + extra_warnings_works=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $extra_warnings_works" >&5 +$as_echo "$extra_warnings_works" >&6; } + CFLAGS="$extra_warnings_save_CFLAGS" + if test "x$extra_warnings_works" = "xyes"; then + extra_warnings="$flag" + fi + fi + done + +CFLAGS="$CFLAGS $extra_warnings" + + + extra_warnings= + for flag in '-Wmissing-declarations'; do + if test -z "$extra_warnings"; then + extra_warnings_save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS $flag" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC understands $flag" >&5 +$as_echo_n "checking whether $CC understands $flag... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + extra_warnings_works=yes +else + extra_warnings_works=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $extra_warnings_works" >&5 +$as_echo "$extra_warnings_works" >&6; } + CFLAGS="$extra_warnings_save_CFLAGS" + if test "x$extra_warnings_works" = "xyes"; then + extra_warnings="$flag" + fi + fi + done + +CFLAGS="$CFLAGS $extra_warnings" + + + extra_warnings= + for flag in '-Winit-self'; do + if test -z "$extra_warnings"; then + extra_warnings_save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS $flag" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC understands $flag" >&5 +$as_echo_n "checking whether $CC understands $flag... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + extra_warnings_works=yes +else + extra_warnings_works=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $extra_warnings_works" >&5 +$as_echo "$extra_warnings_works" >&6; } + CFLAGS="$extra_warnings_save_CFLAGS" + if test "x$extra_warnings_works" = "xyes"; then + extra_warnings="$flag" + fi + fi + done + +CFLAGS="$CFLAGS $extra_warnings" + + + extra_warnings= + for flag in '-Wpointer-arith'; do + if test -z "$extra_warnings"; then + extra_warnings_save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS $flag" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC understands $flag" >&5 +$as_echo_n "checking whether $CC understands $flag... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + extra_warnings_works=yes +else + extra_warnings_works=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $extra_warnings_works" >&5 +$as_echo "$extra_warnings_works" >&6; } + CFLAGS="$extra_warnings_save_CFLAGS" + if test "x$extra_warnings_works" = "xyes"; then + extra_warnings="$flag" + fi + fi + done + +CFLAGS="$CFLAGS $extra_warnings" + + + extra_warnings= + for flag in '-Wold-style-definition'; do + if test -z "$extra_warnings"; then + extra_warnings_save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS $flag" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC understands $flag" >&5 +$as_echo_n "checking whether $CC understands $flag... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + extra_warnings_works=yes +else + extra_warnings_works=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $extra_warnings_works" >&5 +$as_echo "$extra_warnings_works" >&6; } + CFLAGS="$extra_warnings_save_CFLAGS" + if test "x$extra_warnings_works" = "xyes"; then + extra_warnings="$flag" + fi + fi + done + +CFLAGS="$CFLAGS $extra_warnings" + +fi + +# Extract the first word of "rsvg-convert", so it can be a program name with args. +set dummy rsvg-convert; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_RSVG+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $RSVG in + [\\/]* | ?:[\\/]*) + ac_cv_path_RSVG="$RSVG" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_RSVG="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + test -z "$ac_cv_path_RSVG" && ac_cv_path_RSVG="no" + ;; +esac +fi +RSVG=$ac_cv_path_RSVG +if test -n "$RSVG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RSVG" >&5 +$as_echo "$RSVG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$RSVG" != "xno"; then + HAVE_RSVG_TRUE= + HAVE_RSVG_FALSE='#' +else + HAVE_RSVG_TRUE='#' + HAVE_RSVG_FALSE= +fi + + +# Extract the first word of "w3m", so it can be a program name with args. +set dummy w3m; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_W3M+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $W3M in + [\\/]* | ?:[\\/]*) + ac_cv_path_W3M="$W3M" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_W3M="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + test -z "$ac_cv_path_W3M" && ac_cv_path_W3M="no" + ;; +esac +fi +W3M=$ac_cv_path_W3M +if test -n "$W3M"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $W3M" >&5 +$as_echo "$W3M" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "x$W3M" != "xno"; then + HAVE_W3M_TRUE= + HAVE_W3M_FALSE='#' +else + HAVE_W3M_TRUE='#' + HAVE_W3M_FALSE= +fi + + +# Check whether --enable-docs was given. +if test "${enable_docs+set}" = set; then : + enableval=$enable_docs; +else + enable_docs="yes" +fi + + + if test "x$enable_docs" = "xyes"; then + ENABLE_DOCS_TRUE= + ENABLE_DOCS_FALSE='#' +else + ENABLE_DOCS_TRUE='#' + ENABLE_DOCS_FALSE= +fi + + +########################### +# Check target architecture +########################### + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for target architecture" >&5 +$as_echo_n "checking for target architecture... " >&6; } +case x"$target" in + xNONE | x) + target_or_host="$host" ;; + *) + target_or_host="$target" ;; +esac +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $target_or_host" >&5 +$as_echo "$target_or_host" >&6; } + +case "$target_or_host" in + i*86-*-*) + have_x86=yes + +$as_echo "#define ARCH_X86 1" >>confdefs.h + + ;; + x86_64-*-*) + have_x86=yes + +$as_echo "#define ARCH_X86 1" >>confdefs.h + + +$as_echo "#define ARCH_X86_64 1" >>confdefs.h + + ;; + ppc-*-* | powerpc-*) + have_ppc=yes + +$as_echo "#define ARCH_PPC 1" >>confdefs.h + + ;; + ppc64-*-* | powerpc64-*) + have_ppc=yes + +$as_echo "#define ARCH_PPC 1" >>confdefs.h + + +$as_echo "#define ARCH_PPC64 1" >>confdefs.h + + ;; + *) + ;; +esac + + +############################ +# Check how to find plug-ins +############################ + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the extension for shared libraries" >&5 +$as_echo_n "checking the extension for shared libraries... " >&6; } +case "$target_or_host" in + hppa*-hpux*) # HP/UX + shrext=.sl + ;; + *-*-mingw* | *-*-cygwin*) # windows + shrext=.dll + ;; + *) # linux (and BSD?) + shrext=.so + ;; +esac + +SHREXT=$shrext + + +cat >>confdefs.h <<_ACEOF +#define SHREXT "$shrext" +_ACEOF + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $shrext" >&5 +$as_echo "$shrext" >&6; } + + +################# +# Check for Win32 +################# + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for some Win32 platform" >&5 +$as_echo_n "checking for some Win32 platform... " >&6; } +case "$target_or_host" in + *-*-mingw* | *-*-cygwin*) + platform_win32=yes + ;; + *) + platform_win32=no + ;; +esac +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $platform_win32" >&5 +$as_echo "$platform_win32" >&6; } + if test "$platform_win32" = "yes"; then + PLATFORM_WIN32_TRUE= + PLATFORM_WIN32_FALSE='#' +else + PLATFORM_WIN32_TRUE='#' + PLATFORM_WIN32_FALSE= +fi + + +MATH_LIB=-lm +THREAD_LIB=-lpthread +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for native Win32" >&5 +$as_echo_n "checking for native Win32... " >&6; } +case "$target_or_host" in + *-*-mingw*) + os_win32=yes + PATH_SEP=';' + DIR_SEP='\\' + MATH_LIB= + THREAD_LIB= + ;; + *) + os_win32=no + PATH_SEP=':' + DIR_SEP='/' + ;; +esac +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $os_win32" >&5 +$as_echo "$os_win32" >&6; } + + + + + + if test "$os_win32" = "yes"; then + OS_WIN32_TRUE= + OS_WIN32_FALSE='#' +else + OS_WIN32_TRUE='#' + OS_WIN32_FALSE= +fi + + if test "$os_win32" != "yes"; then + OS_UNIX_TRUE= + OS_UNIX_FALSE='#' +else + OS_UNIX_TRUE='#' + OS_UNIX_FALSE= +fi + + + + + +######################## +# Check for MMX assembly +######################## + +# Check whether --enable-mmx was given. +if test "${enable_mmx+set}" = set; then : + enableval=$enable_mmx; +else + enable_mmx=$have_x86 +fi + + +# Check whether --enable-sse was given. +if test "${enable_sse+set}" = set; then : + enableval=$enable_sse; +else + enable_sse=$enable_mmx +fi + + +# Check whether --enable-sse2 was given. +if test "${enable_sse2+set}" = set; then : + enableval=$enable_sse2; +else + enable_sse2=$enable_sse +fi + + +# Check whether --enable-sse4_1 was given. +if test "${enable_sse4_1+set}" = set; then : + enableval=$enable_sse4_1; +else + enable_sse4_1=$enable_sse +fi + + +# Check whether --enable-f16c was given. +if test "${enable_f16c+set}" = set; then : + enableval=$enable_f16c; +else + enable_f16c=$enable_sse +fi + + +if test "x$enable_mmx" = xyes; then + + MMX_EXTRA_CFLAGS= + for flag in '-mmmx'; do + if test -z "$MMX_EXTRA_CFLAGS"; then + MMX_EXTRA_CFLAGS_save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS $flag" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC understands $flag" >&5 +$as_echo_n "checking whether $CC understands $flag... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + MMX_EXTRA_CFLAGS_works=yes +else + MMX_EXTRA_CFLAGS_works=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MMX_EXTRA_CFLAGS_works" >&5 +$as_echo "$MMX_EXTRA_CFLAGS_works" >&6; } + CFLAGS="$MMX_EXTRA_CFLAGS_save_CFLAGS" + if test "x$MMX_EXTRA_CFLAGS_works" = "xyes"; then + MMX_EXTRA_CFLAGS="$flag" + fi + fi + done + + SSE_EXTRA_CFLAGS= + SSE2_EXTRA_CFLAGS= + SSE4_1_EXTRA_CFLAGS= + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we can compile MMX code" >&5 +$as_echo_n "checking whether we can compile MMX code... " >&6; } + + mmx_save_CFLAGS="$CFLAGS" + CFLAGS="$mmx_save_CFLAGS $MMX_EXTRA_CFLAGS" + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +asm ("movq 0, %mm0"); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + +$as_echo "#define USE_MMX 1" >>confdefs.h + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + + if test "x$enable_sse" = xyes; then + + fpmath_flag= + for flag in '-mfpmath=sse'; do + if test -z "$fpmath_flag"; then + fpmath_flag_save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS $flag" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC understands $flag" >&5 +$as_echo_n "checking whether $CC understands $flag... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + fpmath_flag_works=yes +else + fpmath_flag_works=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $fpmath_flag_works" >&5 +$as_echo "$fpmath_flag_works" >&6; } + CFLAGS="$fpmath_flag_save_CFLAGS" + if test "x$fpmath_flag_works" = "xyes"; then + fpmath_flag="$flag" + fi + fi + done + + if test "x$platform_win32" = xyes; then + + stack_align= + for flag in '-mstackrealign'; do + if test -z "$stack_align"; then + stack_align_save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS $flag" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC understands $flag" >&5 +$as_echo_n "checking whether $CC understands $flag... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + stack_align_works=yes +else + stack_align_works=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $stack_align_works" >&5 +$as_echo "$stack_align_works" >&6; } + CFLAGS="$stack_align_save_CFLAGS" + if test "x$stack_align_works" = "xyes"; then + stack_align="$flag" + fi + fi + done + + fi + SSE_EXTRA_CFLAGS="$MMX_EXTRA_CFLAGS $stack_align $fpmath_flag" + + + sse_flag= + for flag in '-msse'; do + if test -z "$sse_flag"; then + sse_flag_save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS $flag" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC understands $flag" >&5 +$as_echo_n "checking whether $CC understands $flag... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + sse_flag_works=yes +else + sse_flag_works=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $sse_flag_works" >&5 +$as_echo "$sse_flag_works" >&6; } + CFLAGS="$sse_flag_save_CFLAGS" + if test "x$sse_flag_works" = "xyes"; then + sse_flag="$flag" + fi + fi + done + + SSE_EXTRA_CFLAGS="$SSE_EXTRA_CFLAGS $sse_flag" + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we can compile SSE code" >&5 +$as_echo_n "checking whether we can compile SSE code... " >&6; } + + CFLAGS="$CFLAGS $sse_flag" + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +asm ("movntps %xmm0, 0"); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + +$as_echo "#define USE_SSE 1" >>confdefs.h + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +else + enable_sse=no + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: The assembler does not support the SSE command set." >&5 +$as_echo "$as_me: WARNING: The assembler does not support the SSE command set." >&2;} + +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + + if test "x$enable_sse2" = xyes; then + + sse2_flag= + for flag in '-msse2'; do + if test -z "$sse2_flag"; then + sse2_flag_save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS $flag" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC understands $flag" >&5 +$as_echo_n "checking whether $CC understands $flag... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + sse2_flag_works=yes +else + sse2_flag_works=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $sse2_flag_works" >&5 +$as_echo "$sse2_flag_works" >&6; } + CFLAGS="$sse2_flag_save_CFLAGS" + if test "x$sse2_flag_works" = "xyes"; then + sse2_flag="$flag" + fi + fi + done + + SSE2_EXTRA_CFLAGS="$SSE_EXTRA_CFLAGS $sse2_flag" + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we can compile SSE2 code" >&5 +$as_echo_n "checking whether we can compile SSE2 code... " >&6; } + + CFLAGS="$CFLAGS $sse2_flag" + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +asm ("punpckhwd %xmm0,%xmm1"); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + +$as_echo "#define USE_SSE2 1" >>confdefs.h + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +else + enable_sse2=no + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: The assembler does not support the SSE2 command set." >&5 +$as_echo "$as_me: WARNING: The assembler does not support the SSE2 command set." >&2;} + +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + + if test "x$enable_sse4_1" = xyes; then + + sse4_1_flag= + for flag in '-msse4.1'; do + if test -z "$sse4_1_flag"; then + sse4_1_flag_save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS $flag" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC understands $flag" >&5 +$as_echo_n "checking whether $CC understands $flag... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + sse4_1_flag_works=yes +else + sse4_1_flag_works=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $sse4_1_flag_works" >&5 +$as_echo "$sse4_1_flag_works" >&6; } + CFLAGS="$sse4_1_flag_save_CFLAGS" + if test "x$sse4_1_flag_works" = "xyes"; then + sse4_1_flag="$flag" + fi + fi + done + + SSE4_1_EXTRA_CFLAGS="$SSE_EXTRA_CFLAGS $sse4_1_flag" + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we can compile SSE4_1 code" >&5 +$as_echo_n "checking whether we can compile SSE4_1 code... " >&6; } + + CFLAGS="$CFLAGS $sse4_1_flag" + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +asm ("pmovzxbd %xmm0,%xmm1"); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + +$as_echo "#define USE_SSE4_1 1" >>confdefs.h + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +else + enable_sse4_1=no + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: The assembler does not support the SSE4_1 command set." >&5 +$as_echo "$as_me: WARNING: The assembler does not support the SSE4_1 command set." >&2;} + +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi + fi + + CFLAGS="$mmx_save_CFLAGS" + + if test "x$enable_f16c" = xyes; then + + f16c_flag= + for flag in '-mf16c'; do + if test -z "$f16c_flag"; then + f16c_flag_save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS $flag" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC understands $flag" >&5 +$as_echo_n "checking whether $CC understands $flag... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + f16c_flag_works=yes +else + f16c_flag_works=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $f16c_flag_works" >&5 +$as_echo "$f16c_flag_works" >&6; } + CFLAGS="$f16c_flag_save_CFLAGS" + if test "x$f16c_flag_works" = "xyes"; then + f16c_flag="$flag" + fi + fi + done + + F16C_EXTRA_CFLAGS="$SSE_EXTRA_CFLAGS $f16c_flag" + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we can compile half-floating point code" >&5 +$as_echo_n "checking whether we can compile half-floating point code... " >&6; } + + CFLAGS="$CFLAGS $sse_flag $f16c_flag" + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main () +{ +__m128 val = _mm_cvtph_ps ((__m128i)_mm_setzero_ps()); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + +$as_echo "#define USE_F16C 1" >>confdefs.h + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +else + enable_f16c=no + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: The compiler does not support f16c intrinsics." >&5 +$as_echo "$as_me: WARNING: The compiler does not support f16c intrinsics." >&2;} + +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi + + fi + +else + enable_mmx=no + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: The assembler does not support the MMX command set." >&5 +$as_echo "$as_me: WARNING: The assembler does not support the MMX command set." >&2;} + +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + + CFLAGS="$mmx_save_CFLAGS" + + + + + + +fi + + +############################ +# Check for AltiVec assembly +############################ + +# Check whether --enable-altivec was given. +if test "${enable_altivec+set}" = set; then : + enableval=$enable_altivec; +else + enable_altivec=$have_ppc +fi + + +if test "x$enable_altivec" = xyes; then + + + altivec_flag= + for flag in '-faltivec' '-maltivec -mabi=altivec'; do + if test -z "$altivec_flag"; then + altivec_flag_save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS $flag" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC understands $flag" >&5 +$as_echo_n "checking whether $CC understands $flag... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + altivec_flag_works=yes +else + altivec_flag_works=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $altivec_flag_works" >&5 +$as_echo "$altivec_flag_works" >&6; } + CFLAGS="$altivec_flag_save_CFLAGS" + if test "x$altivec_flag_works" = "xyes"; then + altivec_flag="$flag" + fi + fi + done + + + ALTIVEC_EXTRA_CFLAGS= + case "$altivec_flag" in + -maltivec*) + altivec_save_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="$altivec_save_CPPFLAGS $altivec_flag" + for ac_header in altivec.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "altivec.h" "ac_cv_header_altivec_h" "$ac_includes_default" +if test "x$ac_cv_header_altivec_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_ALTIVEC_H 1 +_ACEOF + ALTIVEC_EXTRA_CFLAGS="$altivec_flag" +fi + +done + + CPPFLAGS="$altivec_save_CPPFLAGS" + ;; + *) + ALTIVEC_EXTRA_CFLAGS="$altivec_flag" + ;; + esac + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we can compile AltiVec code" >&5 +$as_echo_n "checking whether we can compile AltiVec code... " >&6; } + + can_use_altivec=no + if test -z "$ALTIVEC_EXTRA_CFLAGS"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: The compiler does not support the AltiVec command set." >&5 +$as_echo "$as_me: WARNING: The compiler does not support the AltiVec command set." >&2;} + else + case "$target_or_host" in + *-*-darwin*) + can_use_altivec=yes + +$as_echo "#define HAVE_ALTIVEC_SYSCTL 1" >>confdefs.h + + ;; + *) + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +asm ("vand %v0, %v0, %v0"); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + can_use_altivec=yes +else + can_use_altivec=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ;; + esac + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_use_altivec" >&5 +$as_echo "$can_use_altivec" >&6; } + + if test "x$can_use_altivec" = "xyes"; then + +$as_echo "#define USE_ALTIVEC 1" >>confdefs.h + + else + enable_altivec=no + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: The assembler does not support the AltiVec command set." >&5 +$as_echo "$as_me: WARNING: The assembler does not support the AltiVec command set." >&2;} + fi + fi + + enable_altivec="$can_use_altivec" +fi + + +################## +# Check for random +################## +have_srandom=no +ac_fn_c_check_func "$LINENO" "srandom" "ac_cv_func_srandom" +if test "x$ac_cv_func_srandom" = xyes; then : + have_srandom=yes +fi + + if test x$have_srandom = xyes; then + HAVE_SRANDOM_TRUE= + HAVE_SRANDOM_FALSE='#' +else + HAVE_SRANDOM_TRUE='#' + HAVE_SRANDOM_FALSE= +fi + + + +for ac_header in dl.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "dl.h" "ac_cv_header_dl_h" "$ac_includes_default" +if test "x$ac_cv_header_dl_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_DL_H 1 +_ACEOF + +fi + +done + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing dlopen" >&5 +$as_echo_n "checking for library containing dlopen... " >&6; } +if ${ac_cv_search_dlopen+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_func_search_save_LIBS=$LIBS +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +for ac_lib in '' dl; do + if test -z "$ac_lib"; then + ac_res="none required" + else + ac_res=-l$ac_lib + LIBS="-l$ac_lib $ac_func_search_save_LIBS" + fi + if ac_fn_c_try_link "$LINENO"; then : + ac_cv_search_dlopen=$ac_res +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext + if ${ac_cv_search_dlopen+:} false; then : + break +fi +done +if ${ac_cv_search_dlopen+:} false; then : + +else + ac_cv_search_dlopen=no +fi +rm conftest.$ac_ext +LIBS=$ac_func_search_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_dlopen" >&5 +$as_echo "$ac_cv_search_dlopen" >&6; } +ac_res=$ac_cv_search_dlopen +if test "$ac_res" != no; then : + test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing rint" >&5 +$as_echo_n "checking for library containing rint... " >&6; } +if ${ac_cv_search_rint+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_func_search_save_LIBS=$LIBS +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char rint (); +int +main () +{ +return rint (); + ; + return 0; +} +_ACEOF +for ac_lib in '' m; do + if test -z "$ac_lib"; then + ac_res="none required" + else + ac_res=-l$ac_lib + LIBS="-l$ac_lib $ac_func_search_save_LIBS" + fi + if ac_fn_c_try_link "$LINENO"; then : + ac_cv_search_rint=$ac_res +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext + if ${ac_cv_search_rint+:} false; then : + break +fi +done +if ${ac_cv_search_rint+:} false; then : + +else + ac_cv_search_rint=no +fi +rm conftest.$ac_ext +LIBS=$ac_func_search_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_rint" >&5 +$as_echo "$ac_cv_search_rint" >&6; } +ac_res=$ac_cv_search_rint +if test "$ac_res" != no; then : + test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" + +fi + + +ac_fn_c_check_func "$LINENO" "gettimeofday" "ac_cv_func_gettimeofday" +if test "x$ac_cv_func_gettimeofday" = xyes; then : + $as_echo "#define HAVE_GETTIMEOFDAY 1" >>confdefs.h + +else + case " $LIBOBJS " in + *" gettimeofday.$ac_objext "* ) ;; + *) LIBOBJS="$LIBOBJS gettimeofday.$ac_objext" + ;; +esac + +fi + + +for ac_func in rint +do : + ac_fn_c_check_func "$LINENO" "rint" "ac_cv_func_rint" +if test "x$ac_cv_func_rint" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_RINT 1 +_ACEOF + +fi +done + + +#BABL_PATH_SEPARATOR must be defined as a character. +#BABL_DIR_SEPARATOR must be defined as a string. + +cat >>confdefs.h <<_ACEOF +#define BABL_PATH_SEPARATOR '$PATH_SEP' +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define BABL_DIR_SEPARATOR "$DIR_SEP" +_ACEOF + + + +cat >>confdefs.h <<_ACEOF +#define BABL_LIBRARY "$PACKAGE_NAME-$BABL_API_VERSION" +_ACEOF + + + + + +ac_config_files="$ac_config_files Makefile babl.pc babl/Makefile babl/babl-version.h babl/base/Makefile docs/Makefile docs/index-static.html docs/graphics/Makefile tests/Makefile tools/Makefile extensions/Makefile INSTALL" + + +cat >confcache <<\_ACEOF +# This file is a shell script that caches the results of configure +# tests run on this system so they can be shared between configure +# scripts and configure runs, see configure's option --config-cache. +# It is not useful on other systems. If it contains results you don't +# want to keep, you may remove or edit it. +# +# config.status only pays attention to the cache file if you give it +# the --recheck option to rerun configure. +# +# `ac_cv_env_foo' variables (set or unset) will be overridden when +# loading this file, other *unset* `ac_cv_foo' will be assigned the +# following values. + +_ACEOF + +# The following way of writing the cache mishandles newlines in values, +# but we know of no workaround that is simple, portable, and efficient. +# So, we kill variables containing newlines. +# Ultrix sh set writes to stderr and can't be redirected directly, +# and sets the high bit in the cache file unless we assign to the vars. +( + for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; + esac ;; + esac + done + + (set) 2>&1 | + case $as_nl`(ac_space=' '; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + # `set' does not quote correctly, so add quotes: double-quote + # substitution turns \\\\ into \\, and sed turns \\ into \. + sed -n \ + "s/'/'\\\\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" + ;; #( + *) + # `set' quotes correctly as required by POSIX, so do not add quotes. + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) | + sed ' + /^ac_cv_env_/b end + t clear + :clear + s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ + t end + s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ + :end' >>confcache +if diff "$cache_file" confcache >/dev/null 2>&1; then :; else + if test -w "$cache_file"; then + if test "x$cache_file" != "x/dev/null"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 +$as_echo "$as_me: updating cache $cache_file" >&6;} + if test ! -f "$cache_file" || test -h "$cache_file"; then + cat confcache >"$cache_file" + else + case $cache_file in #( + */* | ?:*) + mv -f confcache "$cache_file"$$ && + mv -f "$cache_file"$$ "$cache_file" ;; #( + *) + mv -f confcache "$cache_file" ;; + esac + fi + fi + else + { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 +$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} + fi +fi +rm -f confcache + +test "x$prefix" = xNONE && prefix=$ac_default_prefix +# Let make expand exec_prefix. +test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' + +DEFS=-DHAVE_CONFIG_H + +ac_libobjs= +ac_ltlibobjs= +U= +for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue + # 1. Remove the extension, and $U if already installed. + ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' + ac_i=`$as_echo "$ac_i" | sed "$ac_script"` + # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR + # will be set to the directory where LIBOBJS objects are built. + as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" + as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' +done +LIBOBJS=$ac_libobjs + +LTLIBOBJS=$ac_ltlibobjs + + +if test -z "${BABL_UNSTABLE_TRUE}" && test -z "${BABL_UNSTABLE_FALSE}"; then + as_fn_error $? "conditional \"BABL_UNSTABLE\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5 +$as_echo_n "checking that generated files are newer than configure... " >&6; } + if test -n "$am_sleep_pid"; then + # Hide warnings about reused PIDs. + wait $am_sleep_pid 2>/dev/null + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: done" >&5 +$as_echo "done" >&6; } + if test -n "$EXEEXT"; then + am__EXEEXT_TRUE= + am__EXEEXT_FALSE='#' +else + am__EXEEXT_TRUE='#' + am__EXEEXT_FALSE= +fi + +if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then + as_fn_error $? "conditional \"AMDEP\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then + as_fn_error $? "conditional \"am__fastdepCC\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then + as_fn_error $? "conditional \"MAINTAINER_MODE\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5 +$as_echo_n "checking that generated files are newer than configure... " >&6; } + if test -n "$am_sleep_pid"; then + # Hide warnings about reused PIDs. + wait $am_sleep_pid 2>/dev/null + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: done" >&5 +$as_echo "done" >&6; } +if test -z "${HAVE_RSVG_TRUE}" && test -z "${HAVE_RSVG_FALSE}"; then + as_fn_error $? "conditional \"HAVE_RSVG\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${HAVE_W3M_TRUE}" && test -z "${HAVE_W3M_FALSE}"; then + as_fn_error $? "conditional \"HAVE_W3M\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${ENABLE_DOCS_TRUE}" && test -z "${ENABLE_DOCS_FALSE}"; then + as_fn_error $? "conditional \"ENABLE_DOCS\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${PLATFORM_WIN32_TRUE}" && test -z "${PLATFORM_WIN32_FALSE}"; then + as_fn_error $? "conditional \"PLATFORM_WIN32\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${OS_WIN32_TRUE}" && test -z "${OS_WIN32_FALSE}"; then + as_fn_error $? "conditional \"OS_WIN32\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${OS_UNIX_TRUE}" && test -z "${OS_UNIX_FALSE}"; then + as_fn_error $? "conditional \"OS_UNIX\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${HAVE_SRANDOM_TRUE}" && test -z "${HAVE_SRANDOM_FALSE}"; then + as_fn_error $? "conditional \"HAVE_SRANDOM\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi + +: "${CONFIG_STATUS=./config.status}" +ac_write_fail=0 +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files $CONFIG_STATUS" +{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 +$as_echo "$as_me: creating $CONFIG_STATUS" >&6;} +as_write_fail=0 +cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 +#! $SHELL +# Generated by $as_me. +# Run this file to recreate the current configuration. +# Compiler output produced by configure, useful for debugging +# configure, is in config.log if it exists. + +debug=false +ac_cs_recheck=false +ac_cs_silent=false + +SHELL=\${CONFIG_SHELL-$SHELL} +export SHELL +_ASEOF +cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi + + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in #( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +as_myself= +case $0 in #(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + + +# as_fn_error STATUS ERROR [LINENO LOG_FD] +# ---------------------------------------- +# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are +# provided, also output the error to LOG_FD, referencing LINENO. Then exit the +# script with STATUS, using 1 if that was 0. +as_fn_error () +{ + as_status=$1; test $as_status -eq 0 && as_status=1 + if test "$4"; then + as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + fi + $as_echo "$as_me: error: $2" >&2 + as_fn_exit $as_status +} # as_fn_error + + +# as_fn_set_status STATUS +# ----------------------- +# Set $? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} # as_fn_set_status + +# as_fn_exit STATUS +# ----------------- +# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} # as_fn_exit + +# as_fn_unset VAR +# --------------- +# Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset +# as_fn_append VAR VALUE +# ---------------------- +# Append the text in VALUE to the end of the definition contained in VAR. Take +# advantage of any shell optimizations that allow amortized linear growth over +# repeated appends, instead of the typical quadratic growth present in naive +# implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +# as_fn_arith ARG... +# ------------------ +# Perform arithmetic evaluation on the ARGs, and store the result in the +# global $as_val. Take advantage of shells that can avoid forks. The arguments +# must be portable across $(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in #((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; +esac + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -pR'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -pR' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -pR' + fi +else + as_ln_s='cp -pR' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + + +# as_fn_mkdir_p +# ------------- +# Create "$as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" + + +} # as_fn_mkdir_p +if mkdir -p . 2>/dev/null; then + as_mkdir_p='mkdir -p "$as_dir"' +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + + +# as_fn_executable_p FILE +# ----------------------- +# Test if FILE is an executable regular file. +as_fn_executable_p () +{ + test -f "$1" && test -x "$1" +} # as_fn_executable_p +as_test_x='test -x' +as_executable_p=as_fn_executable_p + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + +exec 6>&1 +## ----------------------------------- ## +## Main body of $CONFIG_STATUS script. ## +## ----------------------------------- ## +_ASEOF +test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# Save the log message, to keep $0 and so on meaningful, and to +# report actual input values of CONFIG_FILES etc. instead of their +# values after options handling. +ac_log=" +This file was extended by babl $as_me 0.1.18, which was +generated by GNU Autoconf 2.69. Invocation command line was + + CONFIG_FILES = $CONFIG_FILES + CONFIG_HEADERS = $CONFIG_HEADERS + CONFIG_LINKS = $CONFIG_LINKS + CONFIG_COMMANDS = $CONFIG_COMMANDS + $ $0 $@ + +on `(hostname || uname -n) 2>/dev/null | sed 1q` +" + +_ACEOF + +case $ac_config_files in *" +"*) set x $ac_config_files; shift; ac_config_files=$*;; +esac + +case $ac_config_headers in *" +"*) set x $ac_config_headers; shift; ac_config_headers=$*;; +esac + + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +# Files that config.status was made for. +config_files="$ac_config_files" +config_headers="$ac_config_headers" +config_commands="$ac_config_commands" + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +ac_cs_usage="\ +\`$as_me' instantiates files and other configuration actions +from templates according to the current configuration. Unless the files +and actions are specified as TAGs, all are instantiated by default. + +Usage: $0 [OPTION]... [TAG]... + + -h, --help print this help, then exit + -V, --version print version number and configuration settings, then exit + --config print configuration, then exit + -q, --quiet, --silent + do not print progress messages + -d, --debug don't remove temporary files + --recheck update $as_me by reconfiguring in the same conditions + --file=FILE[:TEMPLATE] + instantiate the configuration file FILE + --header=FILE[:TEMPLATE] + instantiate the configuration header FILE + +Configuration files: +$config_files + +Configuration headers: +$config_headers + +Configuration commands: +$config_commands + +Report bugs to the package provider." + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" +ac_cs_version="\\ +babl config.status 0.1.18 +configured by $0, generated by GNU Autoconf 2.69, + with options \\"\$ac_cs_config\\" + +Copyright (C) 2012 Free Software Foundation, Inc. +This config.status script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it." + +ac_pwd='$ac_pwd' +srcdir='$srcdir' +INSTALL='$INSTALL' +MKDIR_P='$MKDIR_P' +AWK='$AWK' +test -n "\$AWK" || AWK=awk +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# The default lists apply if the user does not specify any file. +ac_need_defaults=: +while test $# != 0 +do + case $1 in + --*=?*) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` + ac_shift=: + ;; + --*=) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg= + ac_shift=: + ;; + *) + ac_option=$1 + ac_optarg=$2 + ac_shift=shift + ;; + esac + + case $ac_option in + # Handling of the options. + -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) + ac_cs_recheck=: ;; + --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) + $as_echo "$ac_cs_version"; exit ;; + --config | --confi | --conf | --con | --co | --c ) + $as_echo "$ac_cs_config"; exit ;; + --debug | --debu | --deb | --de | --d | -d ) + debug=: ;; + --file | --fil | --fi | --f ) + $ac_shift + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + '') as_fn_error $? "missing file argument" ;; + esac + as_fn_append CONFIG_FILES " '$ac_optarg'" + ac_need_defaults=false;; + --header | --heade | --head | --hea ) + $ac_shift + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + as_fn_append CONFIG_HEADERS " '$ac_optarg'" + ac_need_defaults=false;; + --he | --h) + # Conflict between --help and --header + as_fn_error $? "ambiguous option: \`$1' +Try \`$0 --help' for more information.";; + --help | --hel | -h ) + $as_echo "$ac_cs_usage"; exit ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil | --si | --s) + ac_cs_silent=: ;; + + # This is an error. + -*) as_fn_error $? "unrecognized option: \`$1' +Try \`$0 --help' for more information." ;; + + *) as_fn_append ac_config_targets " $1" + ac_need_defaults=false ;; + + esac + shift +done + +ac_configure_extra_args= + +if $ac_cs_silent; then + exec 6>/dev/null + ac_configure_extra_args="$ac_configure_extra_args --silent" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +if \$ac_cs_recheck; then + set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion + shift + \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 + CONFIG_SHELL='$SHELL' + export CONFIG_SHELL + exec "\$@" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +exec 5>>config.log +{ + echo + sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX +## Running $as_me. ## +_ASBOX + $as_echo "$ac_log" +} >&5 + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +# +# INIT-COMMANDS +# +AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" + + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +sed_quote_subst='$sed_quote_subst' +double_quote_subst='$double_quote_subst' +delay_variable_subst='$delay_variable_subst' +macro_version='`$ECHO "$macro_version" | $SED "$delay_single_quote_subst"`' +macro_revision='`$ECHO "$macro_revision" | $SED "$delay_single_quote_subst"`' +enable_static='`$ECHO "$enable_static" | $SED "$delay_single_quote_subst"`' +AS='`$ECHO "$AS" | $SED "$delay_single_quote_subst"`' +DLLTOOL='`$ECHO "$DLLTOOL" | $SED "$delay_single_quote_subst"`' +OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`' +enable_shared='`$ECHO "$enable_shared" | $SED "$delay_single_quote_subst"`' +pic_mode='`$ECHO "$pic_mode" | $SED "$delay_single_quote_subst"`' +enable_fast_install='`$ECHO "$enable_fast_install" | $SED "$delay_single_quote_subst"`' +shared_archive_member_spec='`$ECHO "$shared_archive_member_spec" | $SED "$delay_single_quote_subst"`' +SHELL='`$ECHO "$SHELL" | $SED "$delay_single_quote_subst"`' +ECHO='`$ECHO "$ECHO" | $SED "$delay_single_quote_subst"`' +PATH_SEPARATOR='`$ECHO "$PATH_SEPARATOR" | $SED "$delay_single_quote_subst"`' +host_alias='`$ECHO "$host_alias" | $SED "$delay_single_quote_subst"`' +host='`$ECHO "$host" | $SED "$delay_single_quote_subst"`' +host_os='`$ECHO "$host_os" | $SED "$delay_single_quote_subst"`' +build_alias='`$ECHO "$build_alias" | $SED "$delay_single_quote_subst"`' +build='`$ECHO "$build" | $SED "$delay_single_quote_subst"`' +build_os='`$ECHO "$build_os" | $SED "$delay_single_quote_subst"`' +SED='`$ECHO "$SED" | $SED "$delay_single_quote_subst"`' +Xsed='`$ECHO "$Xsed" | $SED "$delay_single_quote_subst"`' +GREP='`$ECHO "$GREP" | $SED "$delay_single_quote_subst"`' +EGREP='`$ECHO "$EGREP" | $SED "$delay_single_quote_subst"`' +FGREP='`$ECHO "$FGREP" | $SED "$delay_single_quote_subst"`' +LD='`$ECHO "$LD" | $SED "$delay_single_quote_subst"`' +NM='`$ECHO "$NM" | $SED "$delay_single_quote_subst"`' +LN_S='`$ECHO "$LN_S" | $SED "$delay_single_quote_subst"`' +max_cmd_len='`$ECHO "$max_cmd_len" | $SED "$delay_single_quote_subst"`' +ac_objext='`$ECHO "$ac_objext" | $SED "$delay_single_quote_subst"`' +exeext='`$ECHO "$exeext" | $SED "$delay_single_quote_subst"`' +lt_unset='`$ECHO "$lt_unset" | $SED "$delay_single_quote_subst"`' +lt_SP2NL='`$ECHO "$lt_SP2NL" | $SED "$delay_single_quote_subst"`' +lt_NL2SP='`$ECHO "$lt_NL2SP" | $SED "$delay_single_quote_subst"`' +lt_cv_to_host_file_cmd='`$ECHO "$lt_cv_to_host_file_cmd" | $SED "$delay_single_quote_subst"`' +lt_cv_to_tool_file_cmd='`$ECHO "$lt_cv_to_tool_file_cmd" | $SED "$delay_single_quote_subst"`' +reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`' +reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`' +deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`' +file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`' +file_magic_glob='`$ECHO "$file_magic_glob" | $SED "$delay_single_quote_subst"`' +want_nocaseglob='`$ECHO "$want_nocaseglob" | $SED "$delay_single_quote_subst"`' +sharedlib_from_linklib_cmd='`$ECHO "$sharedlib_from_linklib_cmd" | $SED "$delay_single_quote_subst"`' +AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`' +AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`' +archiver_list_spec='`$ECHO "$archiver_list_spec" | $SED "$delay_single_quote_subst"`' +STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`' +RANLIB='`$ECHO "$RANLIB" | $SED "$delay_single_quote_subst"`' +old_postinstall_cmds='`$ECHO "$old_postinstall_cmds" | $SED "$delay_single_quote_subst"`' +old_postuninstall_cmds='`$ECHO "$old_postuninstall_cmds" | $SED "$delay_single_quote_subst"`' +old_archive_cmds='`$ECHO "$old_archive_cmds" | $SED "$delay_single_quote_subst"`' +lock_old_archive_extraction='`$ECHO "$lock_old_archive_extraction" | $SED "$delay_single_quote_subst"`' +CC='`$ECHO "$CC" | $SED "$delay_single_quote_subst"`' +CFLAGS='`$ECHO "$CFLAGS" | $SED "$delay_single_quote_subst"`' +compiler='`$ECHO "$compiler" | $SED "$delay_single_quote_subst"`' +GCC='`$ECHO "$GCC" | $SED "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_to_import='`$ECHO "$lt_cv_sys_global_symbol_to_import" | $SED "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address" | $SED "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $SED "$delay_single_quote_subst"`' +lt_cv_nm_interface='`$ECHO "$lt_cv_nm_interface" | $SED "$delay_single_quote_subst"`' +nm_file_list_spec='`$ECHO "$nm_file_list_spec" | $SED "$delay_single_quote_subst"`' +lt_sysroot='`$ECHO "$lt_sysroot" | $SED "$delay_single_quote_subst"`' +lt_cv_truncate_bin='`$ECHO "$lt_cv_truncate_bin" | $SED "$delay_single_quote_subst"`' +objdir='`$ECHO "$objdir" | $SED "$delay_single_quote_subst"`' +MAGIC_CMD='`$ECHO "$MAGIC_CMD" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_no_builtin_flag='`$ECHO "$lt_prog_compiler_no_builtin_flag" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_pic='`$ECHO "$lt_prog_compiler_pic" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_static='`$ECHO "$lt_prog_compiler_static" | $SED "$delay_single_quote_subst"`' +lt_cv_prog_compiler_c_o='`$ECHO "$lt_cv_prog_compiler_c_o" | $SED "$delay_single_quote_subst"`' +need_locks='`$ECHO "$need_locks" | $SED "$delay_single_quote_subst"`' +MANIFEST_TOOL='`$ECHO "$MANIFEST_TOOL" | $SED "$delay_single_quote_subst"`' +DSYMUTIL='`$ECHO "$DSYMUTIL" | $SED "$delay_single_quote_subst"`' +NMEDIT='`$ECHO "$NMEDIT" | $SED "$delay_single_quote_subst"`' +LIPO='`$ECHO "$LIPO" | $SED "$delay_single_quote_subst"`' +OTOOL='`$ECHO "$OTOOL" | $SED "$delay_single_quote_subst"`' +OTOOL64='`$ECHO "$OTOOL64" | $SED "$delay_single_quote_subst"`' +libext='`$ECHO "$libext" | $SED "$delay_single_quote_subst"`' +shrext_cmds='`$ECHO "$shrext_cmds" | $SED "$delay_single_quote_subst"`' +extract_expsyms_cmds='`$ECHO "$extract_expsyms_cmds" | $SED "$delay_single_quote_subst"`' +archive_cmds_need_lc='`$ECHO "$archive_cmds_need_lc" | $SED "$delay_single_quote_subst"`' +enable_shared_with_static_runtimes='`$ECHO "$enable_shared_with_static_runtimes" | $SED "$delay_single_quote_subst"`' +export_dynamic_flag_spec='`$ECHO "$export_dynamic_flag_spec" | $SED "$delay_single_quote_subst"`' +whole_archive_flag_spec='`$ECHO "$whole_archive_flag_spec" | $SED "$delay_single_quote_subst"`' +compiler_needs_object='`$ECHO "$compiler_needs_object" | $SED "$delay_single_quote_subst"`' +old_archive_from_new_cmds='`$ECHO "$old_archive_from_new_cmds" | $SED "$delay_single_quote_subst"`' +old_archive_from_expsyms_cmds='`$ECHO "$old_archive_from_expsyms_cmds" | $SED "$delay_single_quote_subst"`' +archive_cmds='`$ECHO "$archive_cmds" | $SED "$delay_single_quote_subst"`' +archive_expsym_cmds='`$ECHO "$archive_expsym_cmds" | $SED "$delay_single_quote_subst"`' +module_cmds='`$ECHO "$module_cmds" | $SED "$delay_single_quote_subst"`' +module_expsym_cmds='`$ECHO "$module_expsym_cmds" | $SED "$delay_single_quote_subst"`' +with_gnu_ld='`$ECHO "$with_gnu_ld" | $SED "$delay_single_quote_subst"`' +allow_undefined_flag='`$ECHO "$allow_undefined_flag" | $SED "$delay_single_quote_subst"`' +no_undefined_flag='`$ECHO "$no_undefined_flag" | $SED "$delay_single_quote_subst"`' +hardcode_libdir_flag_spec='`$ECHO "$hardcode_libdir_flag_spec" | $SED "$delay_single_quote_subst"`' +hardcode_libdir_separator='`$ECHO "$hardcode_libdir_separator" | $SED "$delay_single_quote_subst"`' +hardcode_direct='`$ECHO "$hardcode_direct" | $SED "$delay_single_quote_subst"`' +hardcode_direct_absolute='`$ECHO "$hardcode_direct_absolute" | $SED "$delay_single_quote_subst"`' +hardcode_minus_L='`$ECHO "$hardcode_minus_L" | $SED "$delay_single_quote_subst"`' +hardcode_shlibpath_var='`$ECHO "$hardcode_shlibpath_var" | $SED "$delay_single_quote_subst"`' +hardcode_automatic='`$ECHO "$hardcode_automatic" | $SED "$delay_single_quote_subst"`' +inherit_rpath='`$ECHO "$inherit_rpath" | $SED "$delay_single_quote_subst"`' +link_all_deplibs='`$ECHO "$link_all_deplibs" | $SED "$delay_single_quote_subst"`' +always_export_symbols='`$ECHO "$always_export_symbols" | $SED "$delay_single_quote_subst"`' +export_symbols_cmds='`$ECHO "$export_symbols_cmds" | $SED "$delay_single_quote_subst"`' +exclude_expsyms='`$ECHO "$exclude_expsyms" | $SED "$delay_single_quote_subst"`' +include_expsyms='`$ECHO "$include_expsyms" | $SED "$delay_single_quote_subst"`' +prelink_cmds='`$ECHO "$prelink_cmds" | $SED "$delay_single_quote_subst"`' +postlink_cmds='`$ECHO "$postlink_cmds" | $SED "$delay_single_quote_subst"`' +file_list_spec='`$ECHO "$file_list_spec" | $SED "$delay_single_quote_subst"`' +variables_saved_for_relink='`$ECHO "$variables_saved_for_relink" | $SED "$delay_single_quote_subst"`' +need_lib_prefix='`$ECHO "$need_lib_prefix" | $SED "$delay_single_quote_subst"`' +need_version='`$ECHO "$need_version" | $SED "$delay_single_quote_subst"`' +version_type='`$ECHO "$version_type" | $SED "$delay_single_quote_subst"`' +runpath_var='`$ECHO "$runpath_var" | $SED "$delay_single_quote_subst"`' +shlibpath_var='`$ECHO "$shlibpath_var" | $SED "$delay_single_quote_subst"`' +shlibpath_overrides_runpath='`$ECHO "$shlibpath_overrides_runpath" | $SED "$delay_single_quote_subst"`' +libname_spec='`$ECHO "$libname_spec" | $SED "$delay_single_quote_subst"`' +library_names_spec='`$ECHO "$library_names_spec" | $SED "$delay_single_quote_subst"`' +soname_spec='`$ECHO "$soname_spec" | $SED "$delay_single_quote_subst"`' +install_override_mode='`$ECHO "$install_override_mode" | $SED "$delay_single_quote_subst"`' +postinstall_cmds='`$ECHO "$postinstall_cmds" | $SED "$delay_single_quote_subst"`' +postuninstall_cmds='`$ECHO "$postuninstall_cmds" | $SED "$delay_single_quote_subst"`' +finish_cmds='`$ECHO "$finish_cmds" | $SED "$delay_single_quote_subst"`' +finish_eval='`$ECHO "$finish_eval" | $SED "$delay_single_quote_subst"`' +hardcode_into_libs='`$ECHO "$hardcode_into_libs" | $SED "$delay_single_quote_subst"`' +sys_lib_search_path_spec='`$ECHO "$sys_lib_search_path_spec" | $SED "$delay_single_quote_subst"`' +configure_time_dlsearch_path='`$ECHO "$configure_time_dlsearch_path" | $SED "$delay_single_quote_subst"`' +configure_time_lt_sys_library_path='`$ECHO "$configure_time_lt_sys_library_path" | $SED "$delay_single_quote_subst"`' +hardcode_action='`$ECHO "$hardcode_action" | $SED "$delay_single_quote_subst"`' +enable_dlopen='`$ECHO "$enable_dlopen" | $SED "$delay_single_quote_subst"`' +enable_dlopen_self='`$ECHO "$enable_dlopen_self" | $SED "$delay_single_quote_subst"`' +enable_dlopen_self_static='`$ECHO "$enable_dlopen_self_static" | $SED "$delay_single_quote_subst"`' +old_striplib='`$ECHO "$old_striplib" | $SED "$delay_single_quote_subst"`' +striplib='`$ECHO "$striplib" | $SED "$delay_single_quote_subst"`' + +LTCC='$LTCC' +LTCFLAGS='$LTCFLAGS' +compiler='$compiler_DEFAULT' + +# A function that is used when there is no print builtin or printf. +func_fallback_echo () +{ + eval 'cat <<_LTECHO_EOF +\$1 +_LTECHO_EOF' +} + +# Quote evaled strings. +for var in AS \ +DLLTOOL \ +OBJDUMP \ +SHELL \ +ECHO \ +PATH_SEPARATOR \ +SED \ +GREP \ +EGREP \ +FGREP \ +LD \ +NM \ +LN_S \ +lt_SP2NL \ +lt_NL2SP \ +reload_flag \ +deplibs_check_method \ +file_magic_cmd \ +file_magic_glob \ +want_nocaseglob \ +sharedlib_from_linklib_cmd \ +AR \ +AR_FLAGS \ +archiver_list_spec \ +STRIP \ +RANLIB \ +CC \ +CFLAGS \ +compiler \ +lt_cv_sys_global_symbol_pipe \ +lt_cv_sys_global_symbol_to_cdecl \ +lt_cv_sys_global_symbol_to_import \ +lt_cv_sys_global_symbol_to_c_name_address \ +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \ +lt_cv_nm_interface \ +nm_file_list_spec \ +lt_cv_truncate_bin \ +lt_prog_compiler_no_builtin_flag \ +lt_prog_compiler_pic \ +lt_prog_compiler_wl \ +lt_prog_compiler_static \ +lt_cv_prog_compiler_c_o \ +need_locks \ +MANIFEST_TOOL \ +DSYMUTIL \ +NMEDIT \ +LIPO \ +OTOOL \ +OTOOL64 \ +shrext_cmds \ +export_dynamic_flag_spec \ +whole_archive_flag_spec \ +compiler_needs_object \ +with_gnu_ld \ +allow_undefined_flag \ +no_undefined_flag \ +hardcode_libdir_flag_spec \ +hardcode_libdir_separator \ +exclude_expsyms \ +include_expsyms \ +file_list_spec \ +variables_saved_for_relink \ +libname_spec \ +library_names_spec \ +soname_spec \ +install_override_mode \ +finish_eval \ +old_striplib \ +striplib; do + case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in + *[\\\\\\\`\\"\\\$]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +# Double-quote double-evaled strings. +for var in reload_cmds \ +old_postinstall_cmds \ +old_postuninstall_cmds \ +old_archive_cmds \ +extract_expsyms_cmds \ +old_archive_from_new_cmds \ +old_archive_from_expsyms_cmds \ +archive_cmds \ +archive_expsym_cmds \ +module_cmds \ +module_expsym_cmds \ +export_symbols_cmds \ +prelink_cmds \ +postlink_cmds \ +postinstall_cmds \ +postuninstall_cmds \ +finish_cmds \ +sys_lib_search_path_spec \ +configure_time_dlsearch_path \ +configure_time_lt_sys_library_path; do + case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in + *[\\\\\\\`\\"\\\$]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +ac_aux_dir='$ac_aux_dir' + +# See if we are running on zsh, and set the options that allow our +# commands through without removal of \ escapes INIT. +if test -n "\${ZSH_VERSION+set}"; then + setopt NO_GLOB_SUBST +fi + + + PACKAGE='$PACKAGE' + VERSION='$VERSION' + RM='$RM' + ofile='$ofile' + + + + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 + +# Handling of arguments. +for ac_config_target in $ac_config_targets +do + case $ac_config_target in + "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; + "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; + "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; + "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; + "babl.pc") CONFIG_FILES="$CONFIG_FILES babl.pc" ;; + "babl/Makefile") CONFIG_FILES="$CONFIG_FILES babl/Makefile" ;; + "babl/babl-version.h") CONFIG_FILES="$CONFIG_FILES babl/babl-version.h" ;; + "babl/base/Makefile") CONFIG_FILES="$CONFIG_FILES babl/base/Makefile" ;; + "docs/Makefile") CONFIG_FILES="$CONFIG_FILES docs/Makefile" ;; + "docs/index-static.html") CONFIG_FILES="$CONFIG_FILES docs/index-static.html" ;; + "docs/graphics/Makefile") CONFIG_FILES="$CONFIG_FILES docs/graphics/Makefile" ;; + "tests/Makefile") CONFIG_FILES="$CONFIG_FILES tests/Makefile" ;; + "tools/Makefile") CONFIG_FILES="$CONFIG_FILES tools/Makefile" ;; + "extensions/Makefile") CONFIG_FILES="$CONFIG_FILES extensions/Makefile" ;; + "INSTALL") CONFIG_FILES="$CONFIG_FILES INSTALL" ;; + + *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; + esac +done + + +# If the user did not use the arguments to specify the items to instantiate, +# then the envvar interface is used. Set only those that are not. +# We use the long form for the default assignment because of an extremely +# bizarre bug on SunOS 4.1.3. +if $ac_need_defaults; then + test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files + test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers + test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands +fi + +# Have a temporary directory for convenience. Make it in the build tree +# simply because there is no reason against having it here, and in addition, +# creating and moving files from /tmp can sometimes cause problems. +# Hook for its removal unless debugging. +# Note that there is a small window in which the directory will not be cleaned: +# after its creation but before its name has been assigned to `$tmp'. +$debug || +{ + tmp= ac_tmp= + trap 'exit_status=$? + : "${ac_tmp:=$tmp}" + { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status +' 0 + trap 'as_fn_exit 1' 1 2 13 15 +} +# Create a (secure) tmp directory for tmp files. + +{ + tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && + test -d "$tmp" +} || +{ + tmp=./conf$$-$RANDOM + (umask 077 && mkdir "$tmp") +} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 +ac_tmp=$tmp + +# Set up the scripts for CONFIG_FILES section. +# No need to generate them if there are no CONFIG_FILES. +# This happens for instance with `./config.status config.h'. +if test -n "$CONFIG_FILES"; then + + +ac_cr=`echo X | tr X '\015'` +# On cygwin, bash can eat \r inside `` if the user requested igncr. +# But we know of no other shell where ac_cr would be empty at this +# point, so we can use a bashism as a fallback. +if test "x$ac_cr" = x; then + eval ac_cr=\$\'\\r\' +fi +ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` +if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then + ac_cs_awk_cr='\\r' +else + ac_cs_awk_cr=$ac_cr +fi + +echo 'BEGIN {' >"$ac_tmp/subs1.awk" && +_ACEOF + + +{ + echo "cat >conf$$subs.awk <<_ACEOF" && + echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && + echo "_ACEOF" +} >conf$$subs.sh || + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 +ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` +ac_delim='%!_!# ' +for ac_last_try in false false false false false :; do + . ./conf$$subs.sh || + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 + + ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` + if test $ac_delim_n = $ac_delim_num; then + break + elif $ac_last_try; then + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done +rm -f conf$$subs.sh + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && +_ACEOF +sed -n ' +h +s/^/S["/; s/!.*/"]=/ +p +g +s/^[^!]*!// +:repl +t repl +s/'"$ac_delim"'$// +t delim +:nl +h +s/\(.\{148\}\)..*/\1/ +t more1 +s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ +p +n +b repl +:more1 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t nl +:delim +h +s/\(.\{148\}\)..*/\1/ +t more2 +s/["\\]/\\&/g; s/^/"/; s/$/"/ +p +b +:more2 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t delim +' >$CONFIG_STATUS || ac_write_fail=1 +rm -f conf$$subs.awk +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +_ACAWK +cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && + for (key in S) S_is_set[key] = 1 + FS = "" + +} +{ + line = $ 0 + nfields = split(line, field, "@") + substed = 0 + len = length(field[1]) + for (i = 2; i < nfields; i++) { + key = field[i] + keylen = length(key) + if (S_is_set[key]) { + value = S[key] + line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) + len += length(value) + length(field[++i]) + substed = 1 + } else + len += 1 + keylen + } + + print line +} + +_ACAWK +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then + sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" +else + cat +fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ + || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 +_ACEOF + +# VPATH may cause trouble with some makes, so we remove sole $(srcdir), +# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and +# trailing colons and then remove the whole line if VPATH becomes empty +# (actually we leave an empty line to preserve line numbers). +if test "x$srcdir" = x.; then + ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ +h +s/// +s/^/:/ +s/[ ]*$/:/ +s/:\$(srcdir):/:/g +s/:\${srcdir}:/:/g +s/:@srcdir@:/:/g +s/^:*// +s/:*$// +x +s/\(=[ ]*\).*/\1/ +G +s/\n// +s/^[^=]*=[ ]*$// +}' +fi + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +fi # test -n "$CONFIG_FILES" + +# Set up the scripts for CONFIG_HEADERS section. +# No need to generate them if there are no CONFIG_HEADERS. +# This happens for instance with `./config.status Makefile'. +if test -n "$CONFIG_HEADERS"; then +cat >"$ac_tmp/defines.awk" <<\_ACAWK || +BEGIN { +_ACEOF + +# Transform confdefs.h into an awk script `defines.awk', embedded as +# here-document in config.status, that substitutes the proper values into +# config.h.in to produce config.h. + +# Create a delimiter string that does not exist in confdefs.h, to ease +# handling of long lines. +ac_delim='%!_!# ' +for ac_last_try in false false :; do + ac_tt=`sed -n "/$ac_delim/p" confdefs.h` + if test -z "$ac_tt"; then + break + elif $ac_last_try; then + as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done + +# For the awk script, D is an array of macro values keyed by name, +# likewise P contains macro parameters if any. Preserve backslash +# newline sequences. + +ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* +sed -n ' +s/.\{148\}/&'"$ac_delim"'/g +t rset +:rset +s/^[ ]*#[ ]*define[ ][ ]*/ / +t def +d +:def +s/\\$// +t bsnl +s/["\\]/\\&/g +s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ +D["\1"]=" \3"/p +s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p +d +:bsnl +s/["\\]/\\&/g +s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ +D["\1"]=" \3\\\\\\n"\\/p +t cont +s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p +t cont +d +:cont +n +s/.\{148\}/&'"$ac_delim"'/g +t clear +:clear +s/\\$// +t bsnlc +s/["\\]/\\&/g; s/^/"/; s/$/"/p +d +:bsnlc +s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p +b cont +' >$CONFIG_STATUS || ac_write_fail=1 + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + for (key in D) D_is_set[key] = 1 + FS = "" +} +/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { + line = \$ 0 + split(line, arg, " ") + if (arg[1] == "#") { + defundef = arg[2] + mac1 = arg[3] + } else { + defundef = substr(arg[1], 2) + mac1 = arg[2] + } + split(mac1, mac2, "(") #) + macro = mac2[1] + prefix = substr(line, 1, index(line, defundef) - 1) + if (D_is_set[macro]) { + # Preserve the white space surrounding the "#". + print prefix "define", macro P[macro] D[macro] + next + } else { + # Replace #undef with comments. This is necessary, for example, + # in the case of _POSIX_SOURCE, which is predefined and required + # on some systems where configure will not decide to define it. + if (defundef == "undef") { + print "/*", prefix defundef, macro, "*/" + next + } + } +} +{ print } +_ACAWK +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 + as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 +fi # test -n "$CONFIG_HEADERS" + + +eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" +shift +for ac_tag +do + case $ac_tag in + :[FHLC]) ac_mode=$ac_tag; continue;; + esac + case $ac_mode$ac_tag in + :[FHL]*:*);; + :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; + :[FH]-) ac_tag=-:-;; + :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; + esac + ac_save_IFS=$IFS + IFS=: + set x $ac_tag + IFS=$ac_save_IFS + shift + ac_file=$1 + shift + + case $ac_mode in + :L) ac_source=$1;; + :[FH]) + ac_file_inputs= + for ac_f + do + case $ac_f in + -) ac_f="$ac_tmp/stdin";; + *) # Look for the file first in the build tree, then in the source tree + # (if the path is not absolute). The absolute path cannot be DOS-style, + # because $ac_f cannot contain `:'. + test -f "$ac_f" || + case $ac_f in + [\\/$]*) false;; + *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; + esac || + as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; + esac + case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac + as_fn_append ac_file_inputs " '$ac_f'" + done + + # Let's still pretend it is `configure' which instantiates (i.e., don't + # use $as_me), people would be surprised to read: + # /* config.h. Generated by config.status. */ + configure_input='Generated from '` + $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' + `' by configure.' + if test x"$ac_file" != x-; then + configure_input="$ac_file. $configure_input" + { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 +$as_echo "$as_me: creating $ac_file" >&6;} + fi + # Neutralize special characters interpreted by sed in replacement strings. + case $configure_input in #( + *\&* | *\|* | *\\* ) + ac_sed_conf_input=`$as_echo "$configure_input" | + sed 's/[\\\\&|]/\\\\&/g'`;; #( + *) ac_sed_conf_input=$configure_input;; + esac + + case $ac_tag in + *:-:* | *:-) cat >"$ac_tmp/stdin" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; + esac + ;; + esac + + ac_dir=`$as_dirname -- "$ac_file" || +$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$ac_file" : 'X\(//\)[^/]' \| \ + X"$ac_file" : 'X\(//\)$' \| \ + X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$ac_file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + as_dir="$ac_dir"; as_fn_mkdir_p + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + + case $ac_mode in + :F) + # + # CONFIG_FILE + # + + case $INSTALL in + [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; + *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; + esac + ac_MKDIR_P=$MKDIR_P + case $MKDIR_P in + [\\/$]* | ?:[\\/]* ) ;; + */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; + esac +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# If the template does not know about datarootdir, expand it. +# FIXME: This hack should be removed a few years after 2.60. +ac_datarootdir_hack=; ac_datarootdir_seen= +ac_sed_dataroot=' +/datarootdir/ { + p + q +} +/@datadir@/p +/@docdir@/p +/@infodir@/p +/@localedir@/p +/@mandir@/p' +case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in +*datarootdir*) ac_datarootdir_seen=yes;; +*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 +$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + ac_datarootdir_hack=' + s&@datadir@&$datadir&g + s&@docdir@&$docdir&g + s&@infodir@&$infodir&g + s&@localedir@&$localedir&g + s&@mandir@&$mandir&g + s&\\\${datarootdir}&$datarootdir&g' ;; +esac +_ACEOF + +# Neutralize VPATH when `$srcdir' = `.'. +# Shell code in configure.ac might set extrasub. +# FIXME: do we really want to maintain this feature? +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_sed_extra="$ac_vpsub +$extrasub +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +:t +/@[a-zA-Z_][a-zA-Z_0-9]*@/!b +s|@configure_input@|$ac_sed_conf_input|;t t +s&@top_builddir@&$ac_top_builddir_sub&;t t +s&@top_build_prefix@&$ac_top_build_prefix&;t t +s&@srcdir@&$ac_srcdir&;t t +s&@abs_srcdir@&$ac_abs_srcdir&;t t +s&@top_srcdir@&$ac_top_srcdir&;t t +s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t +s&@builddir@&$ac_builddir&;t t +s&@abs_builddir@&$ac_abs_builddir&;t t +s&@abs_top_builddir@&$ac_abs_top_builddir&;t t +s&@INSTALL@&$ac_INSTALL&;t t +s&@MKDIR_P@&$ac_MKDIR_P&;t t +$ac_datarootdir_hack +" +eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ + >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + +test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && + { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && + { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ + "$ac_tmp/out"`; test -z "$ac_out"; } && + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined" >&5 +$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined" >&2;} + + rm -f "$ac_tmp/stdin" + case $ac_file in + -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; + *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; + esac \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + ;; + :H) + # + # CONFIG_HEADER + # + if test x"$ac_file" != x-; then + { + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" + } >"$ac_tmp/config.h" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then + { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 +$as_echo "$as_me: $ac_file is unchanged" >&6;} + else + rm -f "$ac_file" + mv "$ac_tmp/config.h" "$ac_file" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + fi + else + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ + || as_fn_error $? "could not create -" "$LINENO" 5 + fi +# Compute "$ac_file"'s index in $config_headers. +_am_arg="$ac_file" +_am_stamp_count=1 +for _am_header in $config_headers :; do + case $_am_header in + $_am_arg | $_am_arg:* ) + break ;; + * ) + _am_stamp_count=`expr $_am_stamp_count + 1` ;; + esac +done +echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || +$as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$_am_arg" : 'X\(//\)[^/]' \| \ + X"$_am_arg" : 'X\(//\)$' \| \ + X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$_am_arg" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'`/stamp-h$_am_stamp_count + ;; + + :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 +$as_echo "$as_me: executing $ac_file commands" >&6;} + ;; + esac + + + case $ac_file$ac_mode in + "depfiles":C) test x"$AMDEP_TRUE" != x"" || { + # Older Autoconf quotes --file arguments for eval, but not when files + # are listed without --file. Let's play safe and only enable the eval + # if we detect the quoting. + case $CONFIG_FILES in + *\'*) eval set x "$CONFIG_FILES" ;; + *) set x $CONFIG_FILES ;; + esac + shift + for mf + do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named 'Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # Grep'ing the whole file is not good either: AIX grep has a line + # limit of 2048, but all sed's we know have understand at least 4000. + if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then + dirpart=`$as_dirname -- "$mf" || +$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$mf" : 'X\(//\)[^/]' \| \ + X"$mf" : 'X\(//\)$' \| \ + X"$mf" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$mf" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + else + continue + fi + # Extract the definition of DEPDIR, am__include, and am__quote + # from the Makefile without running 'make'. + DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` + test -z "$DEPDIR" && continue + am__include=`sed -n 's/^am__include = //p' < "$mf"` + test -z "$am__include" && continue + am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # Find all dependency output files, they are included files with + # $(DEPDIR) in their names. We invoke sed twice because it is the + # simplest approach to changing $(DEPDIR) to its actual value in the + # expansion. + for file in `sed -n " + s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`$as_dirname -- "$file" || +$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$file" : 'X\(//\)[^/]' \| \ + X"$file" : 'X\(//\)$' \| \ + X"$file" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + as_dir=$dirpart/$fdir; as_fn_mkdir_p + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done + done +} + ;; + "libtool":C) + + # See if we are running on zsh, and set the options that allow our + # commands through without removal of \ escapes. + if test -n "${ZSH_VERSION+set}"; then + setopt NO_GLOB_SUBST + fi + + cfgfile=${ofile}T + trap "$RM \"$cfgfile\"; exit 1" 1 2 15 + $RM "$cfgfile" + + cat <<_LT_EOF >> "$cfgfile" +#! $SHELL +# Generated automatically by $as_me ($PACKAGE) $VERSION +# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: +# NOTE: Changes made to this file will be lost: look at ltmain.sh. + +# Provide generalized library-building support services. +# Written by Gordon Matzigkeit, 1996 + +# Copyright (C) 2014 Free Software Foundation, Inc. +# This is free software; see the source for copying conditions. There is NO +# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +# GNU Libtool is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of of the License, or +# (at your option) any later version. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program or library that is built +# using GNU Libtool, you may include this file under the same +# distribution terms that you use for the rest of that program. +# +# GNU Libtool is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + + +# The names of the tagged configurations supported by this script. +available_tags='' + +# Configured defaults for sys_lib_dlsearch_path munging. +: \${LT_SYS_LIBRARY_PATH="$configure_time_lt_sys_library_path"} + +# ### BEGIN LIBTOOL CONFIG + +# Which release of libtool.m4 was used? +macro_version=$macro_version +macro_revision=$macro_revision + +# Whether or not to build static libraries. +build_old_libs=$enable_static + +# Assembler program. +AS=$lt_AS + +# DLL creation program. +DLLTOOL=$lt_DLLTOOL + +# Object dumper program. +OBJDUMP=$lt_OBJDUMP + +# Whether or not to build shared libraries. +build_libtool_libs=$enable_shared + +# What type of objects to build. +pic_mode=$pic_mode + +# Whether or not to optimize for fast installation. +fast_install=$enable_fast_install + +# Shared archive member basename,for filename based shared library versioning on AIX. +shared_archive_member_spec=$shared_archive_member_spec + +# Shell to use when invoking shell scripts. +SHELL=$lt_SHELL + +# An echo program that protects backslashes. +ECHO=$lt_ECHO + +# The PATH separator for the build system. +PATH_SEPARATOR=$lt_PATH_SEPARATOR + +# The host system. +host_alias=$host_alias +host=$host +host_os=$host_os + +# The build system. +build_alias=$build_alias +build=$build +build_os=$build_os + +# A sed program that does not truncate output. +SED=$lt_SED + +# Sed that helps us avoid accidentally triggering echo(1) options like -n. +Xsed="\$SED -e 1s/^X//" + +# A grep program that handles long lines. +GREP=$lt_GREP + +# An ERE matcher. +EGREP=$lt_EGREP + +# A literal string matcher. +FGREP=$lt_FGREP + +# A BSD- or MS-compatible name lister. +NM=$lt_NM + +# Whether we need soft or hard links. +LN_S=$lt_LN_S + +# What is the maximum length of a command? +max_cmd_len=$max_cmd_len + +# Object file suffix (normally "o"). +objext=$ac_objext + +# Executable file suffix (normally ""). +exeext=$exeext + +# whether the shell understands "unset". +lt_unset=$lt_unset + +# turn spaces into newlines. +SP2NL=$lt_lt_SP2NL + +# turn newlines into spaces. +NL2SP=$lt_lt_NL2SP + +# convert \$build file names to \$host format. +to_host_file_cmd=$lt_cv_to_host_file_cmd + +# convert \$build files to toolchain format. +to_tool_file_cmd=$lt_cv_to_tool_file_cmd + +# Method to check whether dependent libraries are shared objects. +deplibs_check_method=$lt_deplibs_check_method + +# Command to use when deplibs_check_method = "file_magic". +file_magic_cmd=$lt_file_magic_cmd + +# How to find potential files when deplibs_check_method = "file_magic". +file_magic_glob=$lt_file_magic_glob + +# Find potential files using nocaseglob when deplibs_check_method = "file_magic". +want_nocaseglob=$lt_want_nocaseglob + +# Command to associate shared and link libraries. +sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd + +# The archiver. +AR=$lt_AR + +# Flags to create an archive. +AR_FLAGS=$lt_AR_FLAGS + +# How to feed a file listing to the archiver. +archiver_list_spec=$lt_archiver_list_spec + +# A symbol stripping program. +STRIP=$lt_STRIP + +# Commands used to install an old-style archive. +RANLIB=$lt_RANLIB +old_postinstall_cmds=$lt_old_postinstall_cmds +old_postuninstall_cmds=$lt_old_postuninstall_cmds + +# Whether to use a lock for old archive extraction. +lock_old_archive_extraction=$lock_old_archive_extraction + +# A C compiler. +LTCC=$lt_CC + +# LTCC compiler flags. +LTCFLAGS=$lt_CFLAGS + +# Take the output of nm and produce a listing of raw symbols and C names. +global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe + +# Transform the output of nm in a proper C declaration. +global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl + +# Transform the output of nm into a list of symbols to manually relocate. +global_symbol_to_import=$lt_lt_cv_sys_global_symbol_to_import + +# Transform the output of nm in a C name address pair. +global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address + +# Transform the output of nm in a C name address pair when lib prefix is needed. +global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix + +# The name lister interface. +nm_interface=$lt_lt_cv_nm_interface + +# Specify filename containing input files for \$NM. +nm_file_list_spec=$lt_nm_file_list_spec + +# The root where to search for dependent libraries,and where our libraries should be installed. +lt_sysroot=$lt_sysroot + +# Command to truncate a binary pipe. +lt_truncate_bin=$lt_lt_cv_truncate_bin + +# The name of the directory that contains temporary libtool files. +objdir=$objdir + +# Used to examine libraries when file_magic_cmd begins with "file". +MAGIC_CMD=$MAGIC_CMD + +# Must we lock files when doing compilation? +need_locks=$lt_need_locks + +# Manifest tool. +MANIFEST_TOOL=$lt_MANIFEST_TOOL + +# Tool to manipulate archived DWARF debug symbol files on Mac OS X. +DSYMUTIL=$lt_DSYMUTIL + +# Tool to change global to local symbols on Mac OS X. +NMEDIT=$lt_NMEDIT + +# Tool to manipulate fat objects and archives on Mac OS X. +LIPO=$lt_LIPO + +# ldd/readelf like tool for Mach-O binaries on Mac OS X. +OTOOL=$lt_OTOOL + +# ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4. +OTOOL64=$lt_OTOOL64 + +# Old archive suffix (normally "a"). +libext=$libext + +# Shared library suffix (normally ".so"). +shrext_cmds=$lt_shrext_cmds + +# The commands to extract the exported symbol list from a shared archive. +extract_expsyms_cmds=$lt_extract_expsyms_cmds + +# Variables whose values should be saved in libtool wrapper scripts and +# restored at link time. +variables_saved_for_relink=$lt_variables_saved_for_relink + +# Do we need the "lib" prefix for modules? +need_lib_prefix=$need_lib_prefix + +# Do we need a version for libraries? +need_version=$need_version + +# Library versioning type. +version_type=$version_type + +# Shared library runtime path variable. +runpath_var=$runpath_var + +# Shared library path variable. +shlibpath_var=$shlibpath_var + +# Is shlibpath searched before the hard-coded library search path? +shlibpath_overrides_runpath=$shlibpath_overrides_runpath + +# Format of library name prefix. +libname_spec=$lt_libname_spec + +# List of archive names. First name is the real one, the rest are links. +# The last name is the one that the linker finds with -lNAME +library_names_spec=$lt_library_names_spec + +# The coded name of the library, if different from the real name. +soname_spec=$lt_soname_spec + +# Permission mode override for installation of shared libraries. +install_override_mode=$lt_install_override_mode + +# Command to use after installation of a shared archive. +postinstall_cmds=$lt_postinstall_cmds + +# Command to use after uninstallation of a shared archive. +postuninstall_cmds=$lt_postuninstall_cmds + +# Commands used to finish a libtool library installation in a directory. +finish_cmds=$lt_finish_cmds + +# As "finish_cmds", except a single script fragment to be evaled but +# not shown. +finish_eval=$lt_finish_eval + +# Whether we should hardcode library paths into libraries. +hardcode_into_libs=$hardcode_into_libs + +# Compile-time system search path for libraries. +sys_lib_search_path_spec=$lt_sys_lib_search_path_spec + +# Detected run-time system search path for libraries. +sys_lib_dlsearch_path_spec=$lt_configure_time_dlsearch_path + +# Explicit LT_SYS_LIBRARY_PATH set during ./configure time. +configure_time_lt_sys_library_path=$lt_configure_time_lt_sys_library_path + +# Whether dlopen is supported. +dlopen_support=$enable_dlopen + +# Whether dlopen of programs is supported. +dlopen_self=$enable_dlopen_self + +# Whether dlopen of statically linked programs is supported. +dlopen_self_static=$enable_dlopen_self_static + +# Commands to strip libraries. +old_striplib=$lt_old_striplib +striplib=$lt_striplib + + +# The linker used to build libraries. +LD=$lt_LD + +# How to create reloadable object files. +reload_flag=$lt_reload_flag +reload_cmds=$lt_reload_cmds + +# Commands used to build an old-style archive. +old_archive_cmds=$lt_old_archive_cmds + +# A language specific compiler. +CC=$lt_compiler + +# Is the compiler the GNU compiler? +with_gcc=$GCC + +# Compiler flag to turn off builtin functions. +no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag + +# Additional compiler flags for building library objects. +pic_flag=$lt_lt_prog_compiler_pic + +# How to pass a linker flag through the compiler. +wl=$lt_lt_prog_compiler_wl + +# Compiler flag to prevent dynamic linking. +link_static_flag=$lt_lt_prog_compiler_static + +# Does compiler simultaneously support -c and -o options? +compiler_c_o=$lt_lt_cv_prog_compiler_c_o + +# Whether or not to add -lc for building shared libraries. +build_libtool_need_lc=$archive_cmds_need_lc + +# Whether or not to disallow shared libs when runtime libs are static. +allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec=$lt_export_dynamic_flag_spec + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec=$lt_whole_archive_flag_spec + +# Whether the compiler copes with passing no objects directly. +compiler_needs_object=$lt_compiler_needs_object + +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds=$lt_old_archive_from_new_cmds + +# Create a temporary old-style archive to link instead of a shared archive. +old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds + +# Commands used to build a shared archive. +archive_cmds=$lt_archive_cmds +archive_expsym_cmds=$lt_archive_expsym_cmds + +# Commands used to build a loadable module if different from building +# a shared archive. +module_cmds=$lt_module_cmds +module_expsym_cmds=$lt_module_expsym_cmds + +# Whether we are building with GNU ld or not. +with_gnu_ld=$lt_with_gnu_ld + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag=$lt_allow_undefined_flag + +# Flag that enforces no undefined symbols. +no_undefined_flag=$lt_no_undefined_flag + +# Flag to hardcode \$libdir into a binary during linking. +# This must work even if \$libdir does not exist +hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec + +# Whether we need a single "-rpath" flag with a separated argument. +hardcode_libdir_separator=$lt_hardcode_libdir_separator + +# Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes +# DIR into the resulting binary. +hardcode_direct=$hardcode_direct + +# Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes +# DIR into the resulting binary and the resulting library dependency is +# "absolute",i.e impossible to change by setting \$shlibpath_var if the +# library is relocated. +hardcode_direct_absolute=$hardcode_direct_absolute + +# Set to "yes" if using the -LDIR flag during linking hardcodes DIR +# into the resulting binary. +hardcode_minus_L=$hardcode_minus_L + +# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR +# into the resulting binary. +hardcode_shlibpath_var=$hardcode_shlibpath_var + +# Set to "yes" if building a shared library automatically hardcodes DIR +# into the library and all subsequent libraries and executables linked +# against it. +hardcode_automatic=$hardcode_automatic + +# Set to yes if linker adds runtime paths of dependent libraries +# to runtime path list. +inherit_rpath=$inherit_rpath + +# Whether libtool must link a program against all its dependency libraries. +link_all_deplibs=$link_all_deplibs + +# Set to "yes" if exported symbols are required. +always_export_symbols=$always_export_symbols + +# The commands to list exported symbols. +export_symbols_cmds=$lt_export_symbols_cmds + +# Symbols that should not be listed in the preloaded symbols. +exclude_expsyms=$lt_exclude_expsyms + +# Symbols that must always be exported. +include_expsyms=$lt_include_expsyms + +# Commands necessary for linking programs (against libraries) with templates. +prelink_cmds=$lt_prelink_cmds + +# Commands necessary for finishing linking programs. +postlink_cmds=$lt_postlink_cmds + +# Specify filename containing input files. +file_list_spec=$lt_file_list_spec + +# How to hardcode a shared library path into an executable. +hardcode_action=$hardcode_action + +# ### END LIBTOOL CONFIG + +_LT_EOF + + cat <<'_LT_EOF' >> "$cfgfile" + +# ### BEGIN FUNCTIONS SHARED WITH CONFIGURE + +# func_munge_path_list VARIABLE PATH +# ----------------------------------- +# VARIABLE is name of variable containing _space_ separated list of +# directories to be munged by the contents of PATH, which is string +# having a format: +# "DIR[:DIR]:" +# string "DIR[ DIR]" will be prepended to VARIABLE +# ":DIR[:DIR]" +# string "DIR[ DIR]" will be appended to VARIABLE +# "DIRP[:DIRP]::[DIRA:]DIRA" +# string "DIRP[ DIRP]" will be prepended to VARIABLE and string +# "DIRA[ DIRA]" will be appended to VARIABLE +# "DIR[:DIR]" +# VARIABLE will be replaced by "DIR[ DIR]" +func_munge_path_list () +{ + case x$2 in + x) + ;; + *:) + eval $1=\"`$ECHO $2 | $SED 's/:/ /g'` \$$1\" + ;; + x:*) + eval $1=\"\$$1 `$ECHO $2 | $SED 's/:/ /g'`\" + ;; + *::*) + eval $1=\"\$$1\ `$ECHO $2 | $SED -e 's/.*:://' -e 's/:/ /g'`\" + eval $1=\"`$ECHO $2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \$$1\" + ;; + *) + eval $1=\"`$ECHO $2 | $SED 's/:/ /g'`\" + ;; + esac +} + + +# Calculate cc_basename. Skip known compiler wrappers and cross-prefix. +func_cc_basename () +{ + for cc_temp in $*""; do + case $cc_temp in + compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; + distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; + \-*) ;; + *) break;; + esac + done + func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` +} + + +# ### END FUNCTIONS SHARED WITH CONFIGURE + +_LT_EOF + + case $host_os in + aix3*) + cat <<\_LT_EOF >> "$cfgfile" +# AIX sometimes has problems with the GCC collect2 program. For some +# reason, if we set the COLLECT_NAMES environment variable, the problems +# vanish in a puff of smoke. +if test set != "${COLLECT_NAMES+set}"; then + COLLECT_NAMES= + export COLLECT_NAMES +fi +_LT_EOF + ;; + esac + + +ltmain=$ac_aux_dir/ltmain.sh + + + # We use sed instead of cat because bash on DJGPP gets confused if + # if finds mixed CR/LF and LF-only lines. Since sed operates in + # text mode, it properly converts lines to CR/LF. This bash problem + # is reportedly fixed, but why not run on old versions too? + sed '$q' "$ltmain" >> "$cfgfile" \ + || (rm -f "$cfgfile"; exit 1) + + mv -f "$cfgfile" "$ofile" || + (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") + chmod +x "$ofile" + + ;; + + esac +done # for ac_tag + + +as_fn_exit 0 +_ACEOF +ac_clean_files=$ac_clean_files_save + +test $ac_write_fail = 0 || + as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 + + +# configure is writing to config.log, and then calls config.status. +# config.status does its own redirection, appending to config.log. +# Unfortunately, on DOS this fails, as config.log is still kept open +# by configure, so config.status won't be able to write to it; its +# output is simply discarded. So we exec the FD to /dev/null, +# effectively closing config.log, so it can be properly (re)opened and +# appended to by config.status. When coming back to configure, we +# need to make the FD available again. +if test "$no_create" != yes; then + ac_cs_success=: + ac_config_status_args= + test "$silent" = yes && + ac_config_status_args="$ac_config_status_args --quiet" + exec 5>/dev/null + $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false + exec 5>>config.log + # Use ||, not &&, to avoid exiting from the if with $? = 1, which + # would make configure fail if this is the last instruction. + $ac_cs_success || as_fn_exit 1 +fi +if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 +$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} +fi + diff --git a/configure.ac b/configure.ac new file mode 100644 index 0000000..f813f56 --- /dev/null +++ b/configure.ac @@ -0,0 +1,523 @@ +dnl Process this file with autoconf to produce a configure script. + +AC_PREREQ(2.54) + +# Making releases on the stable branch: +# BABL_MICRO_VERSION += 1; +# BABL_INTERFACE_AGE += 1; +# BABL_BINARY_AGE += 1; +# if any functions have been added, +# set BABL_INTERFACE_AGE to 0. +# if backwards compatibility has been broken, +# set BABL_BINARY_AGE _and_ BABL_INTERFACE_AGE to 0. + + +m4_define([babl_major_version], [0]) +m4_define([babl_minor_version], [1]) +m4_define([babl_micro_version], [18]) +m4_define([babl_real_version], + [babl_major_version.babl_minor_version.babl_micro_version]) +m4_define([babl_version], [babl_real_version]) + +dnl Number of releases since we've added interfaces +m4_define([babl_interface_age], [1]) +m4_define([babl_binary_age], + [m4_eval(100 * babl_minor_version + babl_micro_version)]) + +# This is the X.Y used in -lbabl-X.Y +m4_define([babl_api_version], [babl_major_version.babl_minor_version]) + +m4_define([stability_version_number], + m4_if(m4_eval(babl_major_version || babl_minor_version), [0], + [babl_micro_version], [babl_minor_version])) +m4_define([babl_unstable], + m4_if(m4_eval(stability_version_number % 2), [1], [yes], [no])) +m4_define([babl_stable], + m4_if(m4_eval(stability_version_number % 2), [0], [yes], [no])) + +AC_INIT(babl, babl_major_version.babl_minor_version.babl_micro_version) + +AC_CONFIG_HEADERS([config.h]) +AC_CONFIG_SRCDIR(babl/babl.h) +AC_CONFIG_MACRO_DIR([m4]) + +BABL_MAJOR_VERSION=babl_major_version +BABL_MINOR_VERSION=babl_minor_version +BABL_MICRO_VERSION=babl_micro_version +BABL_INTERFACE_AGE=babl_interface_age +BABL_BINARY_AGE=babl_binary_age +BABL_VERSION=babl_version +BABL_REAL_VERSION=babl_real_version +BABL_API_VERSION=babl_api_version +AC_SUBST(BABL_MAJOR_VERSION) +AC_SUBST(BABL_MINOR_VERSION) +AC_SUBST(BABL_MICRO_VERSION) +AC_SUBST(BABL_INTERFACE_AGE) +AC_SUBST(BABL_BINARY_AGE) +AC_SUBST(BABL_VERSION) +AC_SUBST(BABL_REAL_VERSION) +AC_SUBST(BABL_API_VERSION) + +BABL_RELEASE=babl_api_version +AC_SUBST(BABL_RELEASE) + +dnl The symbol BABL_UNSTABLE is defined above for substitution in +dnl Makefiles and conditionally defined here as a preprocessor symbol +dnl and automake conditional. +BABL_UNSTABLE=babl_unstable +if test "x$BABL_UNSTABLE" = "xyes"; then + AC_DEFINE(BABL_UNSTABLE, 1, + [Define to 1 if this is an unstable version of BABL]) +fi +AM_CONDITIONAL(BABL_UNSTABLE, test "x$BABL_UNSTABLE" = "xyes") +AC_SUBST(BABL_UNSTABLE) + + +# libtool versioning +m4_define([lt_current], [m4_eval(100 * babl_minor_version + babl_micro_version - babl_interface_age)]) +m4_define([lt_revision], [babl_interface_age]) +m4_define([lt_age], [m4_eval(babl_binary_age - babl_interface_age)]) +BABL_LIBRARY_VERSION="lt_current:lt_revision:lt_age" +BABL_CURRENT_MINUS_AGE=m4_eval(lt_current - lt_age) +AC_SUBST(BABL_LIBRARY_VERSION) +AC_SUBST(BABL_CURRENT_MINUS_AGE) + +dnl ========================================================================== + +AC_CANONICAL_SYSTEM +AM_INIT_AUTOMAKE([1.11 foreign no-define dist-bzip2 no-dist-gzip -Wno-portability]) + +# Enable silent build rules by default, requires at least +# Automake-1.11. Disable by either passing --disable-silent-rules to +# configure or passing V=1 to make +m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])]) + +# Prefer clang on OSX, because GCC isn't updated + +case "$build_os" in + darwin10.* | darwin9.* | darwin8.*) + ;; + darwin*) + prefered_cc="clang" + prefered_cxx="clang++" + ;; + *) + ;; +esac + +if test -z "$CC" && test -n "$prefered_cc"; then + AC_MSG_NOTICE([setting CC to $prefered_cc for $build_os]) + CC=$prefered_cc +fi + +if test -z "$CXX" && test -n "$prefered_cc"; then + AC_MSG_NOTICE([setting CXX to $prefered_cxx for $build_os]) + CXX=$prefered_cxx +fi + +# Check for programs +AC_PROG_CC +AC_PROG_CC_C99 + +# Initialize libtool +LT_PREREQ([2.2]) +LT_INIT([disable-static win32-dll]) + +BABL_VARIADIC_MACROS + +dnl Initialize maintainer mode +AM_MAINTAINER_MODE([enable]) + +AC_HEADER_STDC +AM_SANITY_CHECK + +WEBSITE_HOST=pippin.gimp.org +AC_SUBST(WEBSITE_HOST) +WEBSITE_LOCATION=public_html/babl/ +AC_SUBST(WEBSITE_LOCATION) + + +if eval "test x$GCC = xyes"; then + case " $CFLAGS " in + *[\ \ ]-Wall[\ \ ]*) ;; + *) CFLAGS="$CFLAGS -Wall" ;; + esac + +BABL_DETECT_CFLAGS(extra_warnings, '-Wdeclaration-after-statement') +CFLAGS="$CFLAGS $extra_warnings" + +BABL_DETECT_CFLAGS(extra_warnings, '-Wmissing-prototypes') +CFLAGS="$CFLAGS $extra_warnings" + +BABL_DETECT_CFLAGS(extra_warnings, '-Wmissing-declarations') +CFLAGS="$CFLAGS $extra_warnings" + +BABL_DETECT_CFLAGS(extra_warnings, '-Winit-self') +CFLAGS="$CFLAGS $extra_warnings" + +BABL_DETECT_CFLAGS(extra_warnings, '-Wpointer-arith') +CFLAGS="$CFLAGS $extra_warnings" + +BABL_DETECT_CFLAGS(extra_warnings, '-Wold-style-definition') +CFLAGS="$CFLAGS $extra_warnings" + +fi + +AC_PATH_PROG(RSVG, rsvg-convert, no) +AM_CONDITIONAL(HAVE_RSVG, test "x$RSVG" != "xno") + +AC_PATH_PROG(W3M, w3m, no) +AM_CONDITIONAL(HAVE_W3M, test "x$W3M" != "xno") + +dnl disable docs generation. +AC_ARG_ENABLE([docs], + [ --disable-docs disable docs generation (default=no)],, + enable_docs="yes") + +AM_CONDITIONAL(ENABLE_DOCS, test "x$enable_docs" = "xyes") + +########################### +# Check target architecture +########################### + +AC_MSG_CHECKING([for target architecture]) +case x"$target" in + xNONE | x) + target_or_host="$host" ;; + *) + target_or_host="$target" ;; +esac +AC_MSG_RESULT([$target_or_host]) + +case "$target_or_host" in + i*86-*-*) + have_x86=yes + AC_DEFINE(ARCH_X86, 1, [Define to 1 if you are compiling for ix86.]) + ;; + x86_64-*-*) + have_x86=yes + AC_DEFINE(ARCH_X86, 1, [Define to 1 if you are compiling for ix86.]) + AC_DEFINE(ARCH_X86_64, 1, [Define to 1 if you are compiling for amd64.]) + ;; + ppc-*-* | powerpc-*) + have_ppc=yes + AC_DEFINE(ARCH_PPC, 1, [Define to 1 if you are compiling for PowerPC.]) + ;; + ppc64-*-* | powerpc64-*) + have_ppc=yes + AC_DEFINE(ARCH_PPC, 1, [Define to 1 if you are compiling for PowerPC.]) + AC_DEFINE(ARCH_PPC64, 1, [Define to 1 if you are compiling for PowerPC64.]) + ;; + *) + ;; +esac + + +############################ +# Check how to find plug-ins +############################ + +AC_MSG_CHECKING([the extension for shared libraries]) +case "$target_or_host" in + hppa*-hpux*) # HP/UX + shrext=.sl + ;; + *-*-mingw* | *-*-cygwin*) # windows + shrext=.dll + ;; + *) # linux (and BSD?) + shrext=.so + ;; +esac + +SHREXT=$shrext +AC_SUBST(SHREXT) +AC_DEFINE_UNQUOTED(SHREXT, "$shrext", [File extension for shared libraries]) +AC_MSG_RESULT([$shrext]) + +dnl =========================================================================== + +################# +# Check for Win32 +################# + +AC_MSG_CHECKING([for some Win32 platform]) +case "$target_or_host" in + *-*-mingw* | *-*-cygwin*) + platform_win32=yes + ;; + *) + platform_win32=no + ;; +esac +AC_MSG_RESULT([$platform_win32]) +AM_CONDITIONAL(PLATFORM_WIN32, test "$platform_win32" = "yes") + +MATH_LIB=-lm +THREAD_LIB=-lpthread +AC_MSG_CHECKING([for native Win32]) +case "$target_or_host" in + *-*-mingw*) + os_win32=yes + PATH_SEP=';' + DIR_SEP='\\' + MATH_LIB= + THREAD_LIB= + ;; + *) + os_win32=no + PATH_SEP=':' + DIR_SEP='/' + ;; +esac +AC_MSG_RESULT([$os_win32]) +AC_SUBST(PATH_SEP) +AC_SUBST(DIR_SEP) +AC_SUBST(MATH_LIB) +AC_SUBST(THREAD_LIB) + +AM_CONDITIONAL(OS_WIN32, test "$os_win32" = "yes") +AM_CONDITIONAL(OS_UNIX, test "$os_win32" != "yes") + + +dnl =========================================================================== + + +######################## +# Check for MMX assembly +######################## + +AC_ARG_ENABLE(mmx, + [ --enable-mmx enable MMX support (default=auto)],, + enable_mmx=$have_x86) + +AC_ARG_ENABLE(sse, + [ --enable-sse enable SSE support (default=auto)],, + enable_sse=$enable_mmx) + +AC_ARG_ENABLE(sse2, + [ --enable-sse2 enable SSE2 support (default=auto)],, + enable_sse2=$enable_sse) + +AC_ARG_ENABLE(sse4_1, + [ --enable-sse4_1 enable SSE4_1 support (default=auto)],, + enable_sse4_1=$enable_sse) + +AC_ARG_ENABLE(f16c, + [ --enable-f16c enable hardware half-float support (default=auto)],, + enable_f16c=$enable_sse) + +if test "x$enable_mmx" = xyes; then + BABL_DETECT_CFLAGS(MMX_EXTRA_CFLAGS, '-mmmx') + SSE_EXTRA_CFLAGS= + SSE2_EXTRA_CFLAGS= + SSE4_1_EXTRA_CFLAGS= + + AC_MSG_CHECKING(whether we can compile MMX code) + + mmx_save_CFLAGS="$CFLAGS" + CFLAGS="$mmx_save_CFLAGS $MMX_EXTRA_CFLAGS" + + AC_COMPILE_IFELSE([AC_LANG_PROGRAM(,[asm ("movq 0, %mm0");])], + + AC_DEFINE(USE_MMX, 1, [Define to 1 if MMX assembly is available.]) + AC_MSG_RESULT(yes) + + if test "x$enable_sse" = xyes; then + BABL_DETECT_CFLAGS(fpmath_flag, '-mfpmath=sse') + if test "x$platform_win32" = xyes; then + BABL_DETECT_CFLAGS(stack_align, '-mstackrealign') + fi + SSE_EXTRA_CFLAGS="$MMX_EXTRA_CFLAGS $stack_align $fpmath_flag" + + BABL_DETECT_CFLAGS(sse_flag, '-msse') + SSE_EXTRA_CFLAGS="$SSE_EXTRA_CFLAGS $sse_flag" + + AC_MSG_CHECKING(whether we can compile SSE code) + + CFLAGS="$CFLAGS $sse_flag" + + AC_COMPILE_IFELSE([AC_LANG_PROGRAM(,[asm ("movntps %xmm0, 0");])], + AC_DEFINE(USE_SSE, 1, [Define to 1 if SSE assembly is available.]) + AC_MSG_RESULT(yes) + , + enable_sse=no + AC_MSG_RESULT(no) + AC_MSG_WARN([The assembler does not support the SSE command set.]) + ) + + if test "x$enable_sse2" = xyes; then + BABL_DETECT_CFLAGS(sse2_flag, '-msse2') + SSE2_EXTRA_CFLAGS="$SSE_EXTRA_CFLAGS $sse2_flag" + + AC_MSG_CHECKING(whether we can compile SSE2 code) + + CFLAGS="$CFLAGS $sse2_flag" + + AC_COMPILE_IFELSE([AC_LANG_PROGRAM(,[asm ("punpckhwd %xmm0,%xmm1");])], + AC_DEFINE(USE_SSE2, 1, [Define to 1 if SSE2 assembly is available.]) + AC_MSG_RESULT(yes) + , + enable_sse2=no + AC_MSG_RESULT(no) + AC_MSG_WARN([The assembler does not support the SSE2 command set.]) + ) + + if test "x$enable_sse4_1" = xyes; then + BABL_DETECT_CFLAGS(sse4_1_flag, '-msse4.1') + SSE4_1_EXTRA_CFLAGS="$SSE_EXTRA_CFLAGS $sse4_1_flag" + + AC_MSG_CHECKING(whether we can compile SSE4_1 code) + + CFLAGS="$CFLAGS $sse4_1_flag" + + AC_COMPILE_IFELSE([AC_LANG_PROGRAM(,[asm ("pmovzxbd %xmm0,%xmm1");])], + AC_DEFINE(USE_SSE4_1, 1, [Define to 1 if SSE4_1 assembly is available.]) + AC_MSG_RESULT(yes) + , + enable_sse4_1=no + AC_MSG_RESULT(no) + AC_MSG_WARN([The assembler does not support the SSE4_1 command set.]) + ) + fi + fi + + CFLAGS="$mmx_save_CFLAGS" + + if test "x$enable_f16c" = xyes; then + BABL_DETECT_CFLAGS(f16c_flag, '-mf16c') + F16C_EXTRA_CFLAGS="$SSE_EXTRA_CFLAGS $f16c_flag" + + AC_MSG_CHECKING(whether we can compile half-floating point code) + + CFLAGS="$CFLAGS $sse_flag $f16c_flag" + + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([#include ],[__m128 val = _mm_cvtph_ps ((__m128i)_mm_setzero_ps());])], + AC_DEFINE(USE_F16C, 1, [Define to 1 if f16c intrinsics are available.]) + AC_MSG_RESULT(yes) + , + enable_f16c=no + AC_MSG_RESULT(no) + AC_MSG_WARN([The compiler does not support f16c intrinsics.]) + ) + fi + + fi + , + enable_mmx=no + AC_MSG_RESULT(no) + AC_MSG_WARN([The assembler does not support the MMX command set.]) + ) + + CFLAGS="$mmx_save_CFLAGS" + + AC_SUBST(MMX_EXTRA_CFLAGS) + AC_SUBST(SSE_EXTRA_CFLAGS) + AC_SUBST(SSE2_EXTRA_CFLAGS) + AC_SUBST(SSE4_1_EXTRA_CFLAGS) + AC_SUBST(F16C_EXTRA_CFLAGS) +fi + + +############################ +# Check for AltiVec assembly +############################ + +AC_ARG_ENABLE(altivec, + [ --enable-altivec enable AltiVec support (default=auto)],, + enable_altivec=$have_ppc) + +if test "x$enable_altivec" = xyes; then + + BABL_DETECT_CFLAGS(altivec_flag, '-faltivec' '-maltivec -mabi=altivec') + + ALTIVEC_EXTRA_CFLAGS= + case "$altivec_flag" in + -maltivec*) + altivec_save_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="$altivec_save_CPPFLAGS $altivec_flag" + AC_CHECK_HEADERS(altivec.h, [ALTIVEC_EXTRA_CFLAGS="$altivec_flag"]) + CPPFLAGS="$altivec_save_CPPFLAGS" + ;; + *) + ALTIVEC_EXTRA_CFLAGS="$altivec_flag" + ;; + esac + AC_SUBST(ALTIVEC_EXTRA_CFLAGS) + + AC_MSG_CHECKING(whether we can compile AltiVec code) + + can_use_altivec=no + if test -z "$ALTIVEC_EXTRA_CFLAGS"; then + AC_MSG_RESULT(no) + AC_MSG_WARN([The compiler does not support the AltiVec command set.]) + else + case "$target_or_host" in + *-*-darwin*) + can_use_altivec=yes + AC_DEFINE(HAVE_ALTIVEC_SYSCTL, 1, + [Define to 1 if the altivec runtime test should use a sysctl.]) + ;; + *) + AC_COMPILE_IFELSE([AC_LANG_PROGRAM(,[asm ("vand %v0, %v0, %v0");])], + can_use_altivec=yes, can_use_altivec=no) + ;; + esac + AC_MSG_RESULT($can_use_altivec) + + if test "x$can_use_altivec" = "xyes"; then + AC_DEFINE(USE_ALTIVEC, 1, [Define to 1 if AltiVec support is available.]) + else + enable_altivec=no + AC_MSG_WARN([The assembler does not support the AltiVec command set.]) + fi + fi + + enable_altivec="$can_use_altivec" +fi + + +################## +# Check for random +################## +have_srandom=no +AC_CHECK_FUNC(srandom, have_srandom=yes) +AM_CONDITIONAL([HAVE_SRANDOM], [test x$have_srandom = xyes]) + +dnl =========================================================================== + +AC_CHECK_HEADERS(dl.h) + +AC_SEARCH_LIBS([dlopen], [dl]) +AC_SEARCH_LIBS([rint], [m]) + +AC_REPLACE_FUNCS(gettimeofday) +AC_CHECK_FUNCS(rint) + +#BABL_PATH_SEPARATOR must be defined as a character. +#BABL_DIR_SEPARATOR must be defined as a string. +AC_DEFINE_UNQUOTED(BABL_PATH_SEPARATOR, '$PATH_SEP', [separator between paths in BABL_PATH]) +AC_DEFINE_UNQUOTED(BABL_DIR_SEPARATOR, "$DIR_SEP", [separator between directories in BABL_PATH]) + +AC_DEFINE_UNQUOTED(BABL_LIBRARY, "$PACKAGE_NAME-$BABL_API_VERSION", [name of BABL library]) + + + +dnl =========================================================================== + +AC_CONFIG_FILES( +Makefile +babl.pc +babl/Makefile +babl/babl-version.h +babl/base/Makefile +docs/Makefile +docs/index-static.html +docs/graphics/Makefile +tests/Makefile +tools/Makefile +extensions/Makefile +INSTALL +) + +AC_OUTPUT diff --git a/depcomp b/depcomp new file mode 100755 index 0000000..fc98710 --- /dev/null +++ b/depcomp @@ -0,0 +1,791 @@ +#! /bin/sh +# depcomp - compile a program generating dependencies as side-effects + +scriptversion=2013-05-30.07; # UTC + +# Copyright (C) 1999-2014 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# Originally written by Alexandre Oliva . + +case $1 in + '') + echo "$0: No command. Try '$0 --help' for more information." 1>&2 + exit 1; + ;; + -h | --h*) + cat <<\EOF +Usage: depcomp [--help] [--version] PROGRAM [ARGS] + +Run PROGRAMS ARGS to compile a file, generating dependencies +as side-effects. + +Environment variables: + depmode Dependency tracking mode. + source Source file read by 'PROGRAMS ARGS'. + object Object file output by 'PROGRAMS ARGS'. + DEPDIR directory where to store dependencies. + depfile Dependency file to output. + tmpdepfile Temporary file to use when outputting dependencies. + libtool Whether libtool is used (yes/no). + +Report bugs to . +EOF + exit $? + ;; + -v | --v*) + echo "depcomp $scriptversion" + exit $? + ;; +esac + +# Get the directory component of the given path, and save it in the +# global variables '$dir'. Note that this directory component will +# be either empty or ending with a '/' character. This is deliberate. +set_dir_from () +{ + case $1 in + */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;; + *) dir=;; + esac +} + +# Get the suffix-stripped basename of the given path, and save it the +# global variable '$base'. +set_base_from () +{ + base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'` +} + +# If no dependency file was actually created by the compiler invocation, +# we still have to create a dummy depfile, to avoid errors with the +# Makefile "include basename.Plo" scheme. +make_dummy_depfile () +{ + echo "#dummy" > "$depfile" +} + +# Factor out some common post-processing of the generated depfile. +# Requires the auxiliary global variable '$tmpdepfile' to be set. +aix_post_process_depfile () +{ + # If the compiler actually managed to produce a dependency file, + # post-process it. + if test -f "$tmpdepfile"; then + # Each line is of the form 'foo.o: dependency.h'. + # Do two passes, one to just change these to + # $object: dependency.h + # and one to simply output + # dependency.h: + # which is needed to avoid the deleted-header problem. + { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile" + sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile" + } > "$depfile" + rm -f "$tmpdepfile" + else + make_dummy_depfile + fi +} + +# A tabulation character. +tab=' ' +# A newline character. +nl=' +' +# Character ranges might be problematic outside the C locale. +# These definitions help. +upper=ABCDEFGHIJKLMNOPQRSTUVWXYZ +lower=abcdefghijklmnopqrstuvwxyz +digits=0123456789 +alpha=${upper}${lower} + +if test -z "$depmode" || test -z "$source" || test -z "$object"; then + echo "depcomp: Variables source, object and depmode must be set" 1>&2 + exit 1 +fi + +# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. +depfile=${depfile-`echo "$object" | + sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} +tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} + +rm -f "$tmpdepfile" + +# Avoid interferences from the environment. +gccflag= dashmflag= + +# Some modes work just like other modes, but use different flags. We +# parameterize here, but still list the modes in the big case below, +# to make depend.m4 easier to write. Note that we *cannot* use a case +# here, because this file can only contain one case statement. +if test "$depmode" = hp; then + # HP compiler uses -M and no extra arg. + gccflag=-M + depmode=gcc +fi + +if test "$depmode" = dashXmstdout; then + # This is just like dashmstdout with a different argument. + dashmflag=-xM + depmode=dashmstdout +fi + +cygpath_u="cygpath -u -f -" +if test "$depmode" = msvcmsys; then + # This is just like msvisualcpp but w/o cygpath translation. + # Just convert the backslash-escaped backslashes to single forward + # slashes to satisfy depend.m4 + cygpath_u='sed s,\\\\,/,g' + depmode=msvisualcpp +fi + +if test "$depmode" = msvc7msys; then + # This is just like msvc7 but w/o cygpath translation. + # Just convert the backslash-escaped backslashes to single forward + # slashes to satisfy depend.m4 + cygpath_u='sed s,\\\\,/,g' + depmode=msvc7 +fi + +if test "$depmode" = xlc; then + # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information. + gccflag=-qmakedep=gcc,-MF + depmode=gcc +fi + +case "$depmode" in +gcc3) +## gcc 3 implements dependency tracking that does exactly what +## we want. Yay! Note: for some reason libtool 1.4 doesn't like +## it if -MD -MP comes after the -MF stuff. Hmm. +## Unfortunately, FreeBSD c89 acceptance of flags depends upon +## the command line argument order; so add the flags where they +## appear in depend2.am. Note that the slowdown incurred here +## affects only configure: in makefiles, %FASTDEP% shortcuts this. + for arg + do + case $arg in + -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; + *) set fnord "$@" "$arg" ;; + esac + shift # fnord + shift # $arg + done + "$@" + stat=$? + if test $stat -ne 0; then + rm -f "$tmpdepfile" + exit $stat + fi + mv "$tmpdepfile" "$depfile" + ;; + +gcc) +## Note that this doesn't just cater to obsosete pre-3.x GCC compilers. +## but also to in-use compilers like IMB xlc/xlC and the HP C compiler. +## (see the conditional assignment to $gccflag above). +## There are various ways to get dependency output from gcc. Here's +## why we pick this rather obscure method: +## - Don't want to use -MD because we'd like the dependencies to end +## up in a subdir. Having to rename by hand is ugly. +## (We might end up doing this anyway to support other compilers.) +## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like +## -MM, not -M (despite what the docs say). Also, it might not be +## supported by the other compilers which use the 'gcc' depmode. +## - Using -M directly means running the compiler twice (even worse +## than renaming). + if test -z "$gccflag"; then + gccflag=-MD, + fi + "$@" -Wp,"$gccflag$tmpdepfile" + stat=$? + if test $stat -ne 0; then + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + echo "$object : \\" > "$depfile" + # The second -e expression handles DOS-style file names with drive + # letters. + sed -e 's/^[^:]*: / /' \ + -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" +## This next piece of magic avoids the "deleted header file" problem. +## The problem is that when a header file which appears in a .P file +## is deleted, the dependency causes make to die (because there is +## typically no way to rebuild the header). We avoid this by adding +## dummy dependencies for each header file. Too bad gcc doesn't do +## this for us directly. +## Some versions of gcc put a space before the ':'. On the theory +## that the space means something, we add a space to the output as +## well. hp depmode also adds that space, but also prefixes the VPATH +## to the object. Take care to not repeat it in the output. +## Some versions of the HPUX 10.20 sed can't process this invocation +## correctly. Breaking it into two sed invocations is a workaround. + tr ' ' "$nl" < "$tmpdepfile" \ + | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \ + | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +hp) + # This case exists only to let depend.m4 do its work. It works by + # looking at the text of this script. This case will never be run, + # since it is checked for above. + exit 1 + ;; + +sgi) + if test "$libtool" = yes; then + "$@" "-Wp,-MDupdate,$tmpdepfile" + else + "$@" -MDupdate "$tmpdepfile" + fi + stat=$? + if test $stat -ne 0; then + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + + if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files + echo "$object : \\" > "$depfile" + # Clip off the initial element (the dependent). Don't try to be + # clever and replace this with sed code, as IRIX sed won't handle + # lines with more than a fixed number of characters (4096 in + # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; + # the IRIX cc adds comments like '#:fec' to the end of the + # dependency line. + tr ' ' "$nl" < "$tmpdepfile" \ + | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \ + | tr "$nl" ' ' >> "$depfile" + echo >> "$depfile" + # The second pass generates a dummy entry for each header file. + tr ' ' "$nl" < "$tmpdepfile" \ + | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ + >> "$depfile" + else + make_dummy_depfile + fi + rm -f "$tmpdepfile" + ;; + +xlc) + # This case exists only to let depend.m4 do its work. It works by + # looking at the text of this script. This case will never be run, + # since it is checked for above. + exit 1 + ;; + +aix) + # The C for AIX Compiler uses -M and outputs the dependencies + # in a .u file. In older versions, this file always lives in the + # current directory. Also, the AIX compiler puts '$object:' at the + # start of each line; $object doesn't have directory information. + # Version 6 uses the directory in both cases. + set_dir_from "$object" + set_base_from "$object" + if test "$libtool" = yes; then + tmpdepfile1=$dir$base.u + tmpdepfile2=$base.u + tmpdepfile3=$dir.libs/$base.u + "$@" -Wc,-M + else + tmpdepfile1=$dir$base.u + tmpdepfile2=$dir$base.u + tmpdepfile3=$dir$base.u + "$@" -M + fi + stat=$? + if test $stat -ne 0; then + rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" + exit $stat + fi + + for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" + do + test -f "$tmpdepfile" && break + done + aix_post_process_depfile + ;; + +tcc) + # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26 + # FIXME: That version still under development at the moment of writing. + # Make that this statement remains true also for stable, released + # versions. + # It will wrap lines (doesn't matter whether long or short) with a + # trailing '\', as in: + # + # foo.o : \ + # foo.c \ + # foo.h \ + # + # It will put a trailing '\' even on the last line, and will use leading + # spaces rather than leading tabs (at least since its commit 0394caf7 + # "Emit spaces for -MD"). + "$@" -MD -MF "$tmpdepfile" + stat=$? + if test $stat -ne 0; then + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'. + # We have to change lines of the first kind to '$object: \'. + sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile" + # And for each line of the second kind, we have to emit a 'dep.h:' + # dummy dependency, to avoid the deleted-header problem. + sed -n -e 's|^ *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile" + rm -f "$tmpdepfile" + ;; + +## The order of this option in the case statement is important, since the +## shell code in configure will try each of these formats in the order +## listed in this file. A plain '-MD' option would be understood by many +## compilers, so we must ensure this comes after the gcc and icc options. +pgcc) + # Portland's C compiler understands '-MD'. + # Will always output deps to 'file.d' where file is the root name of the + # source file under compilation, even if file resides in a subdirectory. + # The object file name does not affect the name of the '.d' file. + # pgcc 10.2 will output + # foo.o: sub/foo.c sub/foo.h + # and will wrap long lines using '\' : + # foo.o: sub/foo.c ... \ + # sub/foo.h ... \ + # ... + set_dir_from "$object" + # Use the source, not the object, to determine the base name, since + # that's sadly what pgcc will do too. + set_base_from "$source" + tmpdepfile=$base.d + + # For projects that build the same source file twice into different object + # files, the pgcc approach of using the *source* file root name can cause + # problems in parallel builds. Use a locking strategy to avoid stomping on + # the same $tmpdepfile. + lockdir=$base.d-lock + trap " + echo '$0: caught signal, cleaning up...' >&2 + rmdir '$lockdir' + exit 1 + " 1 2 13 15 + numtries=100 + i=$numtries + while test $i -gt 0; do + # mkdir is a portable test-and-set. + if mkdir "$lockdir" 2>/dev/null; then + # This process acquired the lock. + "$@" -MD + stat=$? + # Release the lock. + rmdir "$lockdir" + break + else + # If the lock is being held by a different process, wait + # until the winning process is done or we timeout. + while test -d "$lockdir" && test $i -gt 0; do + sleep 1 + i=`expr $i - 1` + done + fi + i=`expr $i - 1` + done + trap - 1 2 13 15 + if test $i -le 0; then + echo "$0: failed to acquire lock after $numtries attempts" >&2 + echo "$0: check lockdir '$lockdir'" >&2 + exit 1 + fi + + if test $stat -ne 0; then + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + # Each line is of the form `foo.o: dependent.h', + # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. + # Do two passes, one to just change these to + # `$object: dependent.h' and one to simply `dependent.h:'. + sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" + # Some versions of the HPUX 10.20 sed can't process this invocation + # correctly. Breaking it into two sed invocations is a workaround. + sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \ + | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +hp2) + # The "hp" stanza above does not work with aCC (C++) and HP's ia64 + # compilers, which have integrated preprocessors. The correct option + # to use with these is +Maked; it writes dependencies to a file named + # 'foo.d', which lands next to the object file, wherever that + # happens to be. + # Much of this is similar to the tru64 case; see comments there. + set_dir_from "$object" + set_base_from "$object" + if test "$libtool" = yes; then + tmpdepfile1=$dir$base.d + tmpdepfile2=$dir.libs/$base.d + "$@" -Wc,+Maked + else + tmpdepfile1=$dir$base.d + tmpdepfile2=$dir$base.d + "$@" +Maked + fi + stat=$? + if test $stat -ne 0; then + rm -f "$tmpdepfile1" "$tmpdepfile2" + exit $stat + fi + + for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" + do + test -f "$tmpdepfile" && break + done + if test -f "$tmpdepfile"; then + sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile" + # Add 'dependent.h:' lines. + sed -ne '2,${ + s/^ *// + s/ \\*$// + s/$/:/ + p + }' "$tmpdepfile" >> "$depfile" + else + make_dummy_depfile + fi + rm -f "$tmpdepfile" "$tmpdepfile2" + ;; + +tru64) + # The Tru64 compiler uses -MD to generate dependencies as a side + # effect. 'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'. + # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put + # dependencies in 'foo.d' instead, so we check for that too. + # Subdirectories are respected. + set_dir_from "$object" + set_base_from "$object" + + if test "$libtool" = yes; then + # Libtool generates 2 separate objects for the 2 libraries. These + # two compilations output dependencies in $dir.libs/$base.o.d and + # in $dir$base.o.d. We have to check for both files, because + # one of the two compilations can be disabled. We should prefer + # $dir$base.o.d over $dir.libs/$base.o.d because the latter is + # automatically cleaned when .libs/ is deleted, while ignoring + # the former would cause a distcleancheck panic. + tmpdepfile1=$dir$base.o.d # libtool 1.5 + tmpdepfile2=$dir.libs/$base.o.d # Likewise. + tmpdepfile3=$dir.libs/$base.d # Compaq CCC V6.2-504 + "$@" -Wc,-MD + else + tmpdepfile1=$dir$base.d + tmpdepfile2=$dir$base.d + tmpdepfile3=$dir$base.d + "$@" -MD + fi + + stat=$? + if test $stat -ne 0; then + rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" + exit $stat + fi + + for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" + do + test -f "$tmpdepfile" && break + done + # Same post-processing that is required for AIX mode. + aix_post_process_depfile + ;; + +msvc7) + if test "$libtool" = yes; then + showIncludes=-Wc,-showIncludes + else + showIncludes=-showIncludes + fi + "$@" $showIncludes > "$tmpdepfile" + stat=$? + grep -v '^Note: including file: ' "$tmpdepfile" + if test $stat -ne 0; then + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + echo "$object : \\" > "$depfile" + # The first sed program below extracts the file names and escapes + # backslashes for cygpath. The second sed program outputs the file + # name when reading, but also accumulates all include files in the + # hold buffer in order to output them again at the end. This only + # works with sed implementations that can handle large buffers. + sed < "$tmpdepfile" -n ' +/^Note: including file: *\(.*\)/ { + s//\1/ + s/\\/\\\\/g + p +}' | $cygpath_u | sort -u | sed -n ' +s/ /\\ /g +s/\(.*\)/'"$tab"'\1 \\/p +s/.\(.*\) \\/\1:/ +H +$ { + s/.*/'"$tab"'/ + G + p +}' >> "$depfile" + echo >> "$depfile" # make sure the fragment doesn't end with a backslash + rm -f "$tmpdepfile" + ;; + +msvc7msys) + # This case exists only to let depend.m4 do its work. It works by + # looking at the text of this script. This case will never be run, + # since it is checked for above. + exit 1 + ;; + +#nosideeffect) + # This comment above is used by automake to tell side-effect + # dependency tracking mechanisms from slower ones. + +dashmstdout) + # Important note: in order to support this mode, a compiler *must* + # always write the preprocessed file to stdout, regardless of -o. + "$@" || exit $? + + # Remove the call to Libtool. + if test "$libtool" = yes; then + while test "X$1" != 'X--mode=compile'; do + shift + done + shift + fi + + # Remove '-o $object'. + IFS=" " + for arg + do + case $arg in + -o) + shift + ;; + $object) + shift + ;; + *) + set fnord "$@" "$arg" + shift # fnord + shift # $arg + ;; + esac + done + + test -z "$dashmflag" && dashmflag=-M + # Require at least two characters before searching for ':' + # in the target name. This is to cope with DOS-style filenames: + # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise. + "$@" $dashmflag | + sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile" + rm -f "$depfile" + cat < "$tmpdepfile" > "$depfile" + # Some versions of the HPUX 10.20 sed can't process this sed invocation + # correctly. Breaking it into two sed invocations is a workaround. + tr ' ' "$nl" < "$tmpdepfile" \ + | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ + | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +dashXmstdout) + # This case only exists to satisfy depend.m4. It is never actually + # run, as this mode is specially recognized in the preamble. + exit 1 + ;; + +makedepend) + "$@" || exit $? + # Remove any Libtool call + if test "$libtool" = yes; then + while test "X$1" != 'X--mode=compile'; do + shift + done + shift + fi + # X makedepend + shift + cleared=no eat=no + for arg + do + case $cleared in + no) + set ""; shift + cleared=yes ;; + esac + if test $eat = yes; then + eat=no + continue + fi + case "$arg" in + -D*|-I*) + set fnord "$@" "$arg"; shift ;; + # Strip any option that makedepend may not understand. Remove + # the object too, otherwise makedepend will parse it as a source file. + -arch) + eat=yes ;; + -*|$object) + ;; + *) + set fnord "$@" "$arg"; shift ;; + esac + done + obj_suffix=`echo "$object" | sed 's/^.*\././'` + touch "$tmpdepfile" + ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" + rm -f "$depfile" + # makedepend may prepend the VPATH from the source file name to the object. + # No need to regex-escape $object, excess matching of '.' is harmless. + sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile" + # Some versions of the HPUX 10.20 sed can't process the last invocation + # correctly. Breaking it into two sed invocations is a workaround. + sed '1,2d' "$tmpdepfile" \ + | tr ' ' "$nl" \ + | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ + | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" "$tmpdepfile".bak + ;; + +cpp) + # Important note: in order to support this mode, a compiler *must* + # always write the preprocessed file to stdout. + "$@" || exit $? + + # Remove the call to Libtool. + if test "$libtool" = yes; then + while test "X$1" != 'X--mode=compile'; do + shift + done + shift + fi + + # Remove '-o $object'. + IFS=" " + for arg + do + case $arg in + -o) + shift + ;; + $object) + shift + ;; + *) + set fnord "$@" "$arg" + shift # fnord + shift # $arg + ;; + esac + done + + "$@" -E \ + | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ + -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ + | sed '$ s: \\$::' > "$tmpdepfile" + rm -f "$depfile" + echo "$object : \\" > "$depfile" + cat < "$tmpdepfile" >> "$depfile" + sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +msvisualcpp) + # Important note: in order to support this mode, a compiler *must* + # always write the preprocessed file to stdout. + "$@" || exit $? + + # Remove the call to Libtool. + if test "$libtool" = yes; then + while test "X$1" != 'X--mode=compile'; do + shift + done + shift + fi + + IFS=" " + for arg + do + case "$arg" in + -o) + shift + ;; + $object) + shift + ;; + "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") + set fnord "$@" + shift + shift + ;; + *) + set fnord "$@" "$arg" + shift + shift + ;; + esac + done + "$@" -E 2>/dev/null | + sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" + rm -f "$depfile" + echo "$object : \\" > "$depfile" + sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile" + echo "$tab" >> "$depfile" + sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +msvcmsys) + # This case exists only to let depend.m4 do its work. It works by + # looking at the text of this script. This case will never be run, + # since it is checked for above. + exit 1 + ;; + +none) + exec "$@" + ;; + +*) + echo "Unknown depmode $depmode" 1>&2 + exit 1 + ;; +esac + +exit 0 + +# Local Variables: +# mode: shell-script +# sh-indentation: 2 +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-time-zone: "UTC" +# time-stamp-end: "; # UTC" +# End: diff --git a/docs/COPYING b/docs/COPYING new file mode 100644 index 0000000..94a9ed0 --- /dev/null +++ b/docs/COPYING @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/docs/COPYING.LESSER b/docs/COPYING.LESSER new file mode 100644 index 0000000..fc8a5de --- /dev/null +++ b/docs/COPYING.LESSER @@ -0,0 +1,165 @@ + GNU LESSER GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + + This version of the GNU Lesser General Public License incorporates +the terms and conditions of version 3 of the GNU General Public +License, supplemented by the additional permissions listed below. + + 0. Additional Definitions. + + As used herein, "this License" refers to version 3 of the GNU Lesser +General Public License, and the "GNU GPL" refers to version 3 of the GNU +General Public License. + + "The Library" refers to a covered work governed by this License, +other than an Application or a Combined Work as defined below. + + An "Application" is any work that makes use of an interface provided +by the Library, but which is not otherwise based on the Library. +Defining a subclass of a class defined by the Library is deemed a mode +of using an interface provided by the Library. + + A "Combined Work" is a work produced by combining or linking an +Application with the Library. The particular version of the Library +with which the Combined Work was made is also called the "Linked +Version". + + The "Minimal Corresponding Source" for a Combined Work means the +Corresponding Source for the Combined Work, excluding any source code +for portions of the Combined Work that, considered in isolation, are +based on the Application, and not on the Linked Version. + + The "Corresponding Application Code" for a Combined Work means the +object code and/or source code for the Application, including any data +and utility programs needed for reproducing the Combined Work from the +Application, but excluding the System Libraries of the Combined Work. + + 1. Exception to Section 3 of the GNU GPL. + + You may convey a covered work under sections 3 and 4 of this License +without being bound by section 3 of the GNU GPL. + + 2. Conveying Modified Versions. + + If you modify a copy of the Library, and, in your modifications, a +facility refers to a function or data to be supplied by an Application +that uses the facility (other than as an argument passed when the +facility is invoked), then you may convey a copy of the modified +version: + + a) under this License, provided that you make a good faith effort to + ensure that, in the event an Application does not supply the + function or data, the facility still operates, and performs + whatever part of its purpose remains meaningful, or + + b) under the GNU GPL, with none of the additional permissions of + this License applicable to that copy. + + 3. Object Code Incorporating Material from Library Header Files. + + The object code form of an Application may incorporate material from +a header file that is part of the Library. You may convey such object +code under terms of your choice, provided that, if the incorporated +material is not limited to numerical parameters, data structure +layouts and accessors, or small macros, inline functions and templates +(ten or fewer lines in length), you do both of the following: + + a) Give prominent notice with each copy of the object code that the + Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the object code with a copy of the GNU GPL and this license + document. + + 4. Combined Works. + + You may convey a Combined Work under terms of your choice that, +taken together, effectively do not restrict modification of the +portions of the Library contained in the Combined Work and reverse +engineering for debugging such modifications, if you also do each of +the following: + + a) Give prominent notice with each copy of the Combined Work that + the Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the Combined Work with a copy of the GNU GPL and this license + document. + + c) For a Combined Work that displays copyright notices during + execution, include the copyright notice for the Library among + these notices, as well as a reference directing the user to the + copies of the GNU GPL and this license document. + + d) Do one of the following: + + 0) Convey the Minimal Corresponding Source under the terms of this + License, and the Corresponding Application Code in a form + suitable for, and under terms that permit, the user to + recombine or relink the Application with a modified version of + the Linked Version to produce a modified Combined Work, in the + manner specified by section 6 of the GNU GPL for conveying + Corresponding Source. + + 1) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (a) uses at run time + a copy of the Library already present on the user's computer + system, and (b) will operate properly with a modified version + of the Library that is interface-compatible with the Linked + Version. + + e) Provide Installation Information, but only if you would otherwise + be required to provide such information under section 6 of the + GNU GPL, and only to the extent that such information is + necessary to install and execute a modified version of the + Combined Work produced by recombining or relinking the + Application with a modified version of the Linked Version. (If + you use option 4d0, the Installation Information must accompany + the Minimal Corresponding Source and Corresponding Application + Code. If you use option 4d1, you must provide the Installation + Information in the manner specified by section 6 of the GNU GPL + for conveying Corresponding Source.) + + 5. Combined Libraries. + + You may place library facilities that are a work based on the +Library side by side in a single library together with other library +facilities that are not Applications and are not covered by this +License, and convey such a combined library under terms of your +choice, if you do both of the following: + + a) Accompany the combined library with a copy of the same work based + on the Library, uncombined with any other library facilities, + conveyed under the terms of this License. + + b) Give prominent notice with the combined library that part of it + is a work based on the Library, and explaining where to find the + accompanying uncombined form of the same work. + + 6. Revised Versions of the GNU Lesser General Public License. + + The Free Software Foundation may publish revised and/or new versions +of the GNU Lesser General Public License from time to time. Such new +versions will be similar in spirit to the present version, but may +differ in detail to address new problems or concerns. + + Each version is given a distinguishing version number. If the +Library as you received it specifies that a certain numbered version +of the GNU Lesser General Public License "or any later version" +applies to it, you have the option of following the terms and +conditions either of that published version or of any later version +published by the Free Software Foundation. If the Library as you +received it does not specify a version number of the GNU Lesser +General Public License, you may choose any version of the GNU Lesser +General Public License ever published by the Free Software Foundation. + + If the Library as you received it specifies that a proxy can decide +whether future versions of the GNU Lesser General Public License shall +apply, that proxy's public statement of acceptance of any version is +permanent authorization for you to choose that version for the +Library. diff --git a/docs/Makefile.am b/docs/Makefile.am new file mode 100644 index 0000000..17d01ca --- /dev/null +++ b/docs/Makefile.am @@ -0,0 +1,91 @@ +# programs used for doc creation +babl_fish_path_dhtml = $(top_builddir)/tests/babl_fish_path_dhtml$(EXEEXT) +babl_fish_path_fitness = $(top_builddir)/tests/babl_fish_path_fitness$(EXEEXT) +babl_html_dump = $(top_builddir)/tests/babl-html-dump$(EXEEXT) + +.SILENT: +SUBDIRS= graphics +DIST_SUBDIRS= graphics + +# The patterns used for html creation in the babl build system +# is very small, and should probably be documented in a tutorial. +# +# +# +HTML_FILES = index-static.html \ + index.html \ + BablFishPath.html + +EXTRA_DIST= \ + babl.css \ + tools/xml_insert.sh \ + tools/changelog2rss \ + index-static.html.in \ + COPYING \ + COPYING.LESSER + +BUILT_EXTRA_DIST = index.html BablFishPath.html BablFishPath.txt + +CLEANFILES = README changelog.rss +DISTCLEANFILES = index-static.html $(BUILT_EXTRA_DIST) + +all: $(HTML_FILES) + + +BablFishPath.html: $(babl_fish_path_dhtml) + echo -n "HTML:" + echo -n " $@" + export BABL_PATH="$(top_builddir)/extensions:$(top_builddir)/extensions/.libs"; $< > $@ &&\ + echo " [OK]" || echo " Fail" + +BablFishPath.txt: $(babl_fish_path_fitness) + echo -n "UTF8:" + echo -n " $@" + export BABL_PATH="$(top_builddir)/extensions:$(top_builddir)/extensions/.libs"; $< > $@ &&\ + echo " [OK]" || echo " Fail" + if [ "x"$$CRUCIBLE_ID != "x" ] ;then echo;echo;cat $@;echo;echo;fi + +index.html: index-static.html \ + $(babl_html_dump) \ + $(top_srcdir)/AUTHORS \ + $(top_srcdir)/TODO \ + $(top_srcdir)/NEWS \ + BablFishPath.txt \ + Makefile.am + echo -n "HTML: $@" + cp $< $@ + (which mktemp > /dev/null 2>&1 && TMPFILE=`mktemp` || TMPFILE="/tmp/babl_build_tempfile" ;\ + export BABL_PATH="$(top_builddir)/extensions:$(top_builddir)/extensions/.libs"; $(babl_html_dump) > $$TMPFILE;\ + $(SHELL) $(top_srcdir)/docs/tools/xml_insert.sh $@ BablBase $$TMPFILE;\ + rm -f $$TMPFILE ) + echo -n "." + + $(SHELL) $(top_srcdir)/docs/tools/xml_insert.sh $@ BablFishPath BablFishPath.txt + $(SHELL) $(top_srcdir)/docs/tools/xml_insert.sh $@ AUTHORS $(top_srcdir)/AUTHORS + $(SHELL) $(top_srcdir)/docs/tools/xml_insert.sh $@ TODO $(top_srcdir)/TODO + $(SHELL) $(top_srcdir)/docs/tools/xml_insert.sh $@ NEWS $(top_srcdir)/NEWS + echo " [OK]" + +distclean-local: + if test $(srcdir) = .; then :; else \ + rm -f $(BUILT_EXTRA_DIST); \ + fi + +web: all graphics + echo -n " WEB: " + ping -c 1 $(WEBSITE_HOST) >/dev/null && \ + (\ + scp *.txt *.html *.css\ + "$(WEBSITE_HOST):$(WEBSITE_LOCATION)/" >/dev/null && \ + echo -n "."; \ + scp graphics/*.png graphics/*.html\ + "$(WEBSITE_HOST):$(WEBSITE_LOCATION)/graphics/" >/dev/null\ + &&\ + echo "[OK]"\ + ||\ + echo "FAIL scp failed (does dirs exist?)."\ + )\ + || \ + (\ + echo "FAIL $(WEBSITE_HOST) not reachable."\ + ) diff --git a/docs/Makefile.in b/docs/Makefile.in new file mode 100644 index 0000000..ab49b72 --- /dev/null +++ b/docs/Makefile.in @@ -0,0 +1,744 @@ +# Makefile.in generated by automake 1.15 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2014 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +subdir = docs +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(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)/acinclude.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = index-static.html +CONFIG_CLEAN_VPATH_FILES = +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +SOURCES = +DIST_SOURCES = +RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ + ctags-recursive dvi-recursive html-recursive info-recursive \ + install-data-recursive install-dvi-recursive \ + install-exec-recursive install-html-recursive \ + install-info-recursive install-pdf-recursive \ + install-ps-recursive install-recursive installcheck-recursive \ + installdirs-recursive pdf-recursive ps-recursive \ + tags-recursive uninstall-recursive +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +am__recursive_targets = \ + $(RECURSIVE_TARGETS) \ + $(RECURSIVE_CLEAN_TARGETS) \ + $(am__extra_recursive_targets) +AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ + distdir +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +ETAGS = etags +CTAGS = ctags +am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/index-static.html.in \ + COPYING COPYING.LESSER +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +am__relativize = \ + dir0=`pwd`; \ + sed_first='s,^\([^/]*\)/.*$$,\1,'; \ + sed_rest='s,^[^/]*/*,,'; \ + sed_last='s,^.*/\([^/]*\)$$,\1,'; \ + sed_butlast='s,/*[^/]*$$,,'; \ + while test -n "$$dir1"; do \ + first=`echo "$$dir1" | sed -e "$$sed_first"`; \ + if test "$$first" != "."; then \ + if test "$$first" = ".."; then \ + dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ + dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ + else \ + first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ + if test "$$first2" = "$$first"; then \ + dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ + else \ + dir2="../$$dir2"; \ + fi; \ + dir0="$$dir0"/"$$first"; \ + fi; \ + fi; \ + dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ + done; \ + reldir="$$dir2" +ACLOCAL = @ACLOCAL@ +ALTIVEC_EXTRA_CFLAGS = @ALTIVEC_EXTRA_CFLAGS@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BABL_API_VERSION = @BABL_API_VERSION@ +BABL_BINARY_AGE = @BABL_BINARY_AGE@ +BABL_CURRENT_MINUS_AGE = @BABL_CURRENT_MINUS_AGE@ +BABL_INTERFACE_AGE = @BABL_INTERFACE_AGE@ +BABL_LIBRARY_VERSION = @BABL_LIBRARY_VERSION@ +BABL_MAJOR_VERSION = @BABL_MAJOR_VERSION@ +BABL_MICRO_VERSION = @BABL_MICRO_VERSION@ +BABL_MINOR_VERSION = @BABL_MINOR_VERSION@ +BABL_REAL_VERSION = @BABL_REAL_VERSION@ +BABL_RELEASE = @BABL_RELEASE@ +BABL_UNSTABLE = @BABL_UNSTABLE@ +BABL_VERSION = @BABL_VERSION@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DIR_SEP = @DIR_SEP@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F16C_EXTRA_CFLAGS = @F16C_EXTRA_CFLAGS@ +FGREP = @FGREP@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MATH_LIB = @MATH_LIB@ +MKDIR_P = @MKDIR_P@ +MMX_EXTRA_CFLAGS = @MMX_EXTRA_CFLAGS@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEP = @PATH_SEP@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +RANLIB = @RANLIB@ +RSVG = @RSVG@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHREXT = @SHREXT@ +SSE2_EXTRA_CFLAGS = @SSE2_EXTRA_CFLAGS@ +SSE4_1_EXTRA_CFLAGS = @SSE4_1_EXTRA_CFLAGS@ +SSE_EXTRA_CFLAGS = @SSE_EXTRA_CFLAGS@ +STRIP = @STRIP@ +THREAD_LIB = @THREAD_LIB@ +VERSION = @VERSION@ +W3M = @W3M@ +WEBSITE_HOST = @WEBSITE_HOST@ +WEBSITE_LOCATION = @WEBSITE_LOCATION@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ + +# programs used for doc creation +babl_fish_path_dhtml = $(top_builddir)/tests/babl_fish_path_dhtml$(EXEEXT) +babl_fish_path_fitness = $(top_builddir)/tests/babl_fish_path_fitness$(EXEEXT) +babl_html_dump = $(top_builddir)/tests/babl-html-dump$(EXEEXT) +SUBDIRS = graphics +DIST_SUBDIRS = graphics + +# The patterns used for html creation in the babl build system +# is very small, and should probably be documented in a tutorial. +# +# +# +HTML_FILES = index-static.html \ + index.html \ + BablFishPath.html + +EXTRA_DIST = \ + babl.css \ + tools/xml_insert.sh \ + tools/changelog2rss \ + index-static.html.in \ + COPYING \ + COPYING.LESSER + +BUILT_EXTRA_DIST = index.html BablFishPath.html BablFishPath.txt +CLEANFILES = README changelog.rss +DISTCLEANFILES = index-static.html $(BUILT_EXTRA_DIST) +all: all-recursive + +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign docs/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign docs/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +index-static.html: $(top_builddir)/config.status $(srcdir)/index-static.html.in + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +# This directory's subdirectories are mostly independent; you can cd +# into them and run 'make' without going through this Makefile. +# To change the values of 'make' variables: instead of editing Makefiles, +# (1) if the variable is set in 'config.status', edit 'config.status' +# (which will cause the Makefiles to be regenerated when you run 'make'); +# (2) otherwise, pass the desired values on the 'make' command line. +$(am__recursive_targets): + @fail=; \ + if $(am__make_keepgoing); then \ + failcom='fail=yes'; \ + else \ + failcom='exit 1'; \ + fi; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-recursive +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: ctags-recursive + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscopelist: cscopelist-recursive + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + $(am__make_dryrun) \ + || test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ + $(am__relativize); \ + new_distdir=$$reldir; \ + dir1=$$subdir; dir2="$(top_distdir)"; \ + $(am__relativize); \ + new_top_distdir=$$reldir; \ + echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ + echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ + ($(am__cd) $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$new_top_distdir" \ + distdir="$$new_distdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + am__skip_mode_fix=: \ + distdir) \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-recursive +all-am: Makefile +installdirs: installdirs-recursive +installdirs-am: +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-recursive + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-recursive + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-local \ + distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +html-am: + +info: info-recursive + +info-am: + +install-data-am: + +install-dvi: install-dvi-recursive + +install-dvi-am: + +install-exec-am: + +install-html: install-html-recursive + +install-html-am: + +install-info: install-info-recursive + +install-info-am: + +install-man: + +install-pdf: install-pdf-recursive + +install-pdf-am: + +install-ps: install-ps-recursive + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: + +.MAKE: $(am__recursive_targets) install-am install-strip + +.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ + check-am clean clean-generic clean-libtool cscopelist-am ctags \ + ctags-am distclean distclean-generic distclean-libtool \ + distclean-local distclean-tags distdir dvi dvi-am html html-am \ + info info-am install install-am install-data install-data-am \ + install-dvi install-dvi-am install-exec install-exec-am \ + install-html install-html-am install-info install-info-am \ + install-man install-pdf install-pdf-am install-ps \ + install-ps-am install-strip installcheck installcheck-am \ + installdirs installdirs-am maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \ + uninstall-am + +.PRECIOUS: Makefile + + +.SILENT: + +all: $(HTML_FILES) + +BablFishPath.html: $(babl_fish_path_dhtml) + echo -n "HTML:" + echo -n " $@" + export BABL_PATH="$(top_builddir)/extensions:$(top_builddir)/extensions/.libs"; $< > $@ &&\ + echo " [OK]" || echo " Fail" + +BablFishPath.txt: $(babl_fish_path_fitness) + echo -n "UTF8:" + echo -n " $@" + export BABL_PATH="$(top_builddir)/extensions:$(top_builddir)/extensions/.libs"; $< > $@ &&\ + echo " [OK]" || echo " Fail" + if [ "x"$$CRUCIBLE_ID != "x" ] ;then echo;echo;cat $@;echo;echo;fi + +index.html: index-static.html \ + $(babl_html_dump) \ + $(top_srcdir)/AUTHORS \ + $(top_srcdir)/TODO \ + $(top_srcdir)/NEWS \ + BablFishPath.txt \ + Makefile.am + echo -n "HTML: $@" + cp $< $@ + (which mktemp > /dev/null 2>&1 && TMPFILE=`mktemp` || TMPFILE="/tmp/babl_build_tempfile" ;\ + export BABL_PATH="$(top_builddir)/extensions:$(top_builddir)/extensions/.libs"; $(babl_html_dump) > $$TMPFILE;\ + $(SHELL) $(top_srcdir)/docs/tools/xml_insert.sh $@ BablBase $$TMPFILE;\ + rm -f $$TMPFILE ) + echo -n "." + + $(SHELL) $(top_srcdir)/docs/tools/xml_insert.sh $@ BablFishPath BablFishPath.txt + $(SHELL) $(top_srcdir)/docs/tools/xml_insert.sh $@ AUTHORS $(top_srcdir)/AUTHORS + $(SHELL) $(top_srcdir)/docs/tools/xml_insert.sh $@ TODO $(top_srcdir)/TODO + $(SHELL) $(top_srcdir)/docs/tools/xml_insert.sh $@ NEWS $(top_srcdir)/NEWS + echo " [OK]" + +distclean-local: + if test $(srcdir) = .; then :; else \ + rm -f $(BUILT_EXTRA_DIST); \ + fi + +web: all graphics + echo -n " WEB: " + ping -c 1 $(WEBSITE_HOST) >/dev/null && \ + (\ + scp *.txt *.html *.css\ + "$(WEBSITE_HOST):$(WEBSITE_LOCATION)/" >/dev/null && \ + echo -n "."; \ + scp graphics/*.png graphics/*.html\ + "$(WEBSITE_HOST):$(WEBSITE_LOCATION)/graphics/" >/dev/null\ + &&\ + echo "[OK]"\ + ||\ + echo "FAIL scp failed (does dirs exist?)."\ + )\ + || \ + (\ + echo "FAIL $(WEBSITE_HOST) not reachable."\ + ) + +# 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. +.NOEXPORT: diff --git a/docs/babl.css b/docs/babl.css new file mode 100644 index 0000000..79e62ec --- /dev/null +++ b/docs/babl.css @@ -0,0 +1,316 @@ + + body { + margin: 0; + padding: 0; + } + div.paper { + background-color: #fff; + margin: 1em; + margin-right: 3em; + margin-left: 280px; + } + iframe { + background-color: #aaa; + } + div.content { + padding: 1em; + padding-right: 3em; + padding-left: 2em; + max-width: 45em; + } + div.graphic { + position: absolute; + position: fixed; + color: #fff; + width: 256px; + height: 362px; + bottom: 0; + left: 0; + text-align: right; + padding-bottom: 1em; + } + p { + line-height: 1.2em; + } + h1 { + margin-top: 0em; + } + h1, h2, h3 { + color: #112266; + } + h1 { + font-size: 2em; + } + h2 { + font-size: 1.5em; + } + h3 { + font-size: 1.2em; + } + dl { + margin-top: 1em; + margin-bottom: 1em; + } + + div.expander { + border: 1px solid #bbb; + } + div.expander_title { + border-bottom: 1px solid #aaa; + } + div.expander_content { + margin-left: 3em; + display: none; + padding-bottom: 1em; + } + div.expander_content dl{ + margin: 0; + padding: 0; + } + + table th { + font-weight: normal; + background-color: #ccc; + text-align: left; + } + span.component { + background-color: #060; + padding-left: 0.5em; + padding-top: 0.1em; + padding-bottom: 0.1em; + display: block; + float: left; + overflow: hidden; + width: 4em; + color: white; + border: 1px solid gray; + border: 1px solid white; + clear: both; + } + span.type { + display: block; + background-color: #006; + padding-left: 0.5em; + clear: both; + padding-top: 0.1em; + padding-bottom: 0.1em; + float: left; + overflow: hidden; + width: 4em; + color: white; + border: 1px solid white; + } + + .nopad { + margin :0; + padding:0; + } + + td.component { + background-color: #060; + padding-left: 0.5em; + padding-top: 0.1em; + padding-bottom: 0.1em; + overflow: hidden; + width: 4em; + color: white; + border: 1px solid white; + } + td.type { + background-color: #006; + padding-left: 0.5em; + padding-top: 0.1em; + padding-bottom: 0.1em; + overflow: hidden; + width: 4em; + color: white; + border: 1px solid white; + } + span.spacer { + float: left; + display: block; + overflow: hidden; + width: 0.2em; + } + span.name { + width: 100%; + display: block; + overflow: hidden; + border-top: 1px solid #ccc; + } + span.string { + color: #060; + } + span.function { + color: #006; + } + span.paren { + color: #555; + } + span.NULL { + color: #555; + } + pre.authors { + font-size: 100%; + font-family: FreeSans, Verdana, sans-serif; + position: relative; + top: -2em; + } + img.BablFish { + float: right; + position: relative; + top: -8px; + border: none; + } + @media screen { + body { + background-color: #405070; + font-family: FreeSans, Verdana, sans-serif; + } + a { + text-decoration: none; + } + pre { + overflow: auto; + } + div.toc { + position: absolute; + position: fixed; + width: 256px; + top: 0; + left: 0; + padding-top: 2em; + z-index: 2; + } + div.toc ul { + padding-left: 0em; + float: right; + margin: 0; + } + div.toc li { + display: block; + padding-right: 1em; + } + div.toc li a{ + display: block; + padding-left: 1em; + padding-right: 1em; + color: #fff; + } + div.toc li a:hover { + color: #fff; + background-color: #506080; + } + div.paper { + max-width: 50em; + -moz-border-radius: 1em; + } + div.content { + } + div.graphic { + background: url("graphics/babl-a4poster.png"); + z-index: 1; + } + div.print { + display: none; + } + } + + @media print { + body { + background-color: none; + font-family: FreeSans, Verdana, sans-serif; + } + a, em { + /* XXX: work-around for rendering bug, should investigate whether + * this issue is fixed in the latest gecko + */ + padding-right: 3em; + padding-left: 1em; + } + a { + text-decoration: none; + } + + div.toc ul { + padding-left: 0em; + float: right; + margin: 0; + } + div.toc li { + display: block; + padding-right: 1em; + } + div.toc li a{ + display: block; + padding-left: 1em; + padding-right: 1em; + color: #fff; + } + div.toc li a:hover { + color: #fff; + background-color: #506080; + } + div.toc ul { + padding-left: 0em; + float: none; + margin: 0; + margin-left: 1em; + } + div.toc { + position: absolute; + width: 256px; + top: 0; + left: 2em; + padding-top: 2em; + z-index: 2; + } + div.toc ul { + margin-left: 0; + } + div.toc li a { + color : #000; + } + div toc h2 { + margin: 0; + padding: 0; + } + h1 { + margin-left: -0.75em; + } + h2 { + margin-left: -1em; + } + span.component { + background-color: #7f7; + color: black; + } + span.type { + background-color: #aaf; + color: black; + } + table th { + font-weight: bold; + } + div.print_title { + position: absolute; + top: 3em; + padding-left: 2em; + margin-left: 280px; + } + div.paper { + padding-top: 4em; + } + div.graphic { + background-color: #bbf; + height: 100%; + } + div.graphic img { + position: absolute; + bottom: 0; + left: 0; + } + div.screen { + display: none; + } + } diff --git a/docs/graphics/Makefile.am b/docs/graphics/Makefile.am new file mode 100644 index 0000000..f201be6 --- /dev/null +++ b/docs/graphics/Makefile.am @@ -0,0 +1,55 @@ +.SILENT: + +if HAVE_RSVG +PNG_FILES = \ + babl-a4poster.png \ + babl-16x16.png \ + babl-48x48.png +endif + +SVG_FILES = \ + babl-a4poster.svg \ + babl-16x16.svg \ + babl-48x48.svg + +EXTRA_DIST = \ + index.html \ + $(PNG_FILES) \ + $(SVG_FILES) + +MAINTAINERCLEANFILES = $(PNG_FILES) + +all: $(MAINTAINERCLEANFILES) + +RSVG_CMD = echo -n " SVG: $@" ;\ + $(RSVG) -o $@ $< \ + &&\ + echo " [OK]"\ + ||\ + echo " FAIL" + +if HAVE_RSVG +dist-check-rsvg: + +.svg.png: + $(RSVG_CMD) +#-e $@ $< 2>/dev/null + +# the png version of the a4 poster is used as a webgraphic +# , thus it is rendered with the background alpha set to +# 0.0 +babl-a4poster.png: babl-a4poster.svg + echo -n " SVG: $@" ;\ + $(RSVG) -w 256 -o $@ $< \ + &&\ + echo " [OK]"\ + ||\ + echo " FAIL" +else +dist-check-rsvg: + @echo "*** rsvg must be available in order to make dist" + @false +endif + + +dist-hook: dist-check-rsvg diff --git a/docs/graphics/Makefile.in b/docs/graphics/Makefile.in new file mode 100644 index 0000000..5484bb5 --- /dev/null +++ b/docs/graphics/Makefile.in @@ -0,0 +1,521 @@ +# Makefile.in generated by automake 1.15 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2014 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +subdir = docs/graphics +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(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)/acinclude.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +SOURCES = +DIST_SOURCES = +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +am__DIST_COMMON = $(srcdir)/Makefile.in +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALTIVEC_EXTRA_CFLAGS = @ALTIVEC_EXTRA_CFLAGS@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BABL_API_VERSION = @BABL_API_VERSION@ +BABL_BINARY_AGE = @BABL_BINARY_AGE@ +BABL_CURRENT_MINUS_AGE = @BABL_CURRENT_MINUS_AGE@ +BABL_INTERFACE_AGE = @BABL_INTERFACE_AGE@ +BABL_LIBRARY_VERSION = @BABL_LIBRARY_VERSION@ +BABL_MAJOR_VERSION = @BABL_MAJOR_VERSION@ +BABL_MICRO_VERSION = @BABL_MICRO_VERSION@ +BABL_MINOR_VERSION = @BABL_MINOR_VERSION@ +BABL_REAL_VERSION = @BABL_REAL_VERSION@ +BABL_RELEASE = @BABL_RELEASE@ +BABL_UNSTABLE = @BABL_UNSTABLE@ +BABL_VERSION = @BABL_VERSION@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DIR_SEP = @DIR_SEP@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F16C_EXTRA_CFLAGS = @F16C_EXTRA_CFLAGS@ +FGREP = @FGREP@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MATH_LIB = @MATH_LIB@ +MKDIR_P = @MKDIR_P@ +MMX_EXTRA_CFLAGS = @MMX_EXTRA_CFLAGS@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEP = @PATH_SEP@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +RANLIB = @RANLIB@ +RSVG = @RSVG@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHREXT = @SHREXT@ +SSE2_EXTRA_CFLAGS = @SSE2_EXTRA_CFLAGS@ +SSE4_1_EXTRA_CFLAGS = @SSE4_1_EXTRA_CFLAGS@ +SSE_EXTRA_CFLAGS = @SSE_EXTRA_CFLAGS@ +STRIP = @STRIP@ +THREAD_LIB = @THREAD_LIB@ +VERSION = @VERSION@ +W3M = @W3M@ +WEBSITE_HOST = @WEBSITE_HOST@ +WEBSITE_LOCATION = @WEBSITE_LOCATION@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +@HAVE_RSVG_TRUE@PNG_FILES = \ +@HAVE_RSVG_TRUE@ babl-a4poster.png \ +@HAVE_RSVG_TRUE@ babl-16x16.png \ +@HAVE_RSVG_TRUE@ babl-48x48.png + +SVG_FILES = \ + babl-a4poster.svg \ + babl-16x16.svg \ + babl-48x48.svg + +EXTRA_DIST = \ + index.html \ + $(PNG_FILES) \ + $(SVG_FILES) + +MAINTAINERCLEANFILES = $(PNG_FILES) +RSVG_CMD = echo -n " SVG: $@" ;\ + $(RSVG) -o $@ $< \ + &&\ + echo " [OK]"\ + ||\ + echo " FAIL" + +all: all-am + +.SUFFIXES: +.SUFFIXES: .png .svg +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign docs/graphics/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign docs/graphics/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +tags TAGS: + +ctags CTAGS: + +cscope cscopelist: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook +check-am: all-am +check: check-am +all-am: Makefile +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic clean-libtool \ + cscopelist-am ctags-am dist-hook distclean distclean-generic \ + distclean-libtool distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags-am uninstall uninstall-am + +.PRECIOUS: Makefile + +.SILENT: + +all: $(MAINTAINERCLEANFILES) + +@HAVE_RSVG_TRUE@dist-check-rsvg: + +@HAVE_RSVG_TRUE@.svg.png: +@HAVE_RSVG_TRUE@ $(RSVG_CMD) +#-e $@ $< 2>/dev/null + +# the png version of the a4 poster is used as a webgraphic +# , thus it is rendered with the background alpha set to +# 0.0 +@HAVE_RSVG_TRUE@babl-a4poster.png: babl-a4poster.svg +@HAVE_RSVG_TRUE@ echo -n " SVG: $@" ;\ +@HAVE_RSVG_TRUE@ $(RSVG) -w 256 -o $@ $< \ +@HAVE_RSVG_TRUE@ &&\ +@HAVE_RSVG_TRUE@ echo " [OK]"\ +@HAVE_RSVG_TRUE@ ||\ +@HAVE_RSVG_TRUE@ echo " FAIL" +@HAVE_RSVG_FALSE@dist-check-rsvg: +@HAVE_RSVG_FALSE@ @echo "*** rsvg must be available in order to make dist" +@HAVE_RSVG_FALSE@ @false + +dist-hook: dist-check-rsvg + +# 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. +.NOEXPORT: diff --git a/docs/graphics/babl-16x16.png b/docs/graphics/babl-16x16.png new file mode 100644 index 0000000..57ad178 Binary files /dev/null and b/docs/graphics/babl-16x16.png differ diff --git a/docs/graphics/babl-16x16.svg b/docs/graphics/babl-16x16.svg new file mode 100644 index 0000000..ea1a89d --- /dev/null +++ b/docs/graphics/babl-16x16.svg @@ -0,0 +1,524 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/graphics/babl-48x48.png b/docs/graphics/babl-48x48.png new file mode 100644 index 0000000..717e95d Binary files /dev/null and b/docs/graphics/babl-48x48.png differ diff --git a/docs/graphics/babl-48x48.svg b/docs/graphics/babl-48x48.svg new file mode 100644 index 0000000..70e93a1 --- /dev/null +++ b/docs/graphics/babl-48x48.svg @@ -0,0 +1,695 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + Babl icon + 2005-08-20 + + + Øyvind Kolås + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/graphics/babl-a4poster.png b/docs/graphics/babl-a4poster.png new file mode 100644 index 0000000..fa45bd8 Binary files /dev/null and b/docs/graphics/babl-a4poster.png differ diff --git a/docs/graphics/babl-a4poster.svg b/docs/graphics/babl-a4poster.svg new file mode 100644 index 0000000..d309b5c --- /dev/null +++ b/docs/graphics/babl-a4poster.svg @@ -0,0 +1,8107 @@ + + + + + + image/svg+xml + + + BablFish + 2005-08-20 + + + Øyvind Kolås + + + + + pippin.gimp.org + + + babl logo (as a poster) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/graphics/index.html b/docs/graphics/index.html new file mode 100644 index 0000000..091449c --- /dev/null +++ b/docs/graphics/index.html @@ -0,0 +1,56 @@ + + + + + + babl graphics + + + + + + + + + + + +
+
+ +

Babl graphics

+ +

The babl logo is a fish, the inspiration for babl itself, and it's + mascot is the original babel fish of Douglas Adams.

+ +

Icons

+ +

16x16 pixels

+ babl-16x16.png
+ Inkscape SVG source + +

48x48 pixels

+ babl-48x48.png
+ Inkscape SVG source + +

A4 poster

+ babl-a4poster.png
+ Inkscape SVG source + + +
+
+
+
+  +
+
+ + + diff --git a/docs/index-static.html.in b/docs/index-static.html.in new file mode 100644 index 0000000..709a948 --- /dev/null +++ b/docs/index-static.html.in @@ -0,0 +1,402 @@ + + + + + + + + babl-@BABL_VERSION@ + + + + + + + + + + + +
+ +
+ + + +
+
+
+ + +

+
+ babl is a dynamic, any to any, pixel format translation library. +
+

+ +

It allows converting between different methods of storing pixels known as pixel formats that have + with different bitdepths and other data representations, color models and + component permutations.

+ +

A vocabulary to formulate new pixel formats from existing + primitives is provided as well as the framework to add new color models and + data types. +

+ + + + + + + +

Features

+ +
    +
  • Fast.
  • +
  • Accurate.
  • +
  • Stable, small API.
  • +
  • Self profiling and optimizing.
  • +
  • ANSI C, works on win32, linux and mac, 32bit and 64bit systems.
  • +
  • Extendable with new formats, color models, components + and datatypes.
  • +
  • Reference 64bit floating point conversions for datatypes and color models.
  • +
+ +

GEGL through GeglBuffer provides + tiled buffers with on disk storage as well as linear buffers with accessor + functions for efficient data access transparently using babl fishes for + translation to the desired pixel formats.

+ + +

Download

+ +

The latest versioned development version of babl can be found in + ftp://ftp.gtk.org/pub/babl/. +

+ +

Babl uses git. The main repository is hosted by GNOME. + It can be browsed online and cloned with: +

+
git clone git://git.gnome.org/babl
+ +

The following is a list of the major changes that have gone into + each babl release. If there are significant improvements to babl when + a GEGL release is done a babl release is most often put out just prior + to the GEGL release.

+ + + For more news see git log. + + +

Documentation

+

When using BablFishes to do your conversions, you request a fish to + convert between two formats, and an optimal fish to babls capability is + provided that you can use to do your conversions. Babl also provides + the capability to describe new formats based on a vocabulary of user + registered color models and data types. +

+ +

Babl provides a base vocabulary in BablBase and some extensions + that are thought to be generally useful.

+ +

When performing further extensions to the vocabulary of babl, the + internal consistency is governed by reference conversions that operate + on double (64 bit floating point values). The only color model + created during BablCore bootstrap is RGBA (linear light RGB, + 0.0 - 1.0, with a linear 0.0 - 1.0 opacity channel) backed by the + double datatype. Defined similarily to scRGB using + 64bit floating point. +

+ +

If babls conversion isn't fast enough, you can provide + your own conversion shortcut between two formats. The registered + shortcut might also be used by babl as an intermediate conversion when + constructing BablFishes for other conversions. +

+ +

Babl extensions are shared objects. If you have already developed + some fast conversion functions, wrapping them as babl extensions should + not take much time and will speed up babl for other users as well. +

+ + +

Usage

+ +
babl_process (babl_fish (source_format, destination_format),
+              source_buffer, destination_buffer,
+              pixel_count);
+ +

The processing operation that babl performs is copying including + conversions if needed between linear buffers containing the same count + of pixels, with different pixel formats. +

+ +
+int width = 123, height = 581, pixel_count = width * height;
+
+const Babl *srgb             = babl_format ("R'G'B' u8");
+const Babl *lab              = babl_format ("CIE Lab float");
+const Babl *srgb_to_lab_fish = babl_fish (srgb, lab);
+
+float         *lab_buffer;
+unsigned char *srgb_buffer;
+
+babl_init ();
+
+srgb_buffer = malloc (pixel_count * babl_format_get_bytes_per_pixel (srgb));
+lab_buffer  = malloc (pixel_count * 3 * sizeof (float));
+
+...... load data into srgb_buffer .......
+
+babl_process (srgb_to_lab_fish, srgb_buffer, lab_buffer, pixel_count);
+
+...... do operation in lab space ........
+
+babl_process (babl_fish(lab, srgb),
+              lab_buffer, srgb_buffer, pixel_count);
+
+/* the data has now been transformed back to srgb data */
+ +

If the existing pixel formats are not sufficient for your conversion + needs, new ones can be created on the fly. The constructor + will provide the prior created one if duplicates are registered.

+
const Babl *format = babl_format_new (babl_model ("R'G'B'"),
+                                      babl_type ("u16"),
+                                      babl_component ("B'"),
+                                      babl_component ("G'"),
+                                      babl_component ("R'"),
+                                      NULL);
+ + + + + + +

Vocabulary

+ + + + + +

Shortcut Coverage

+

The diagram shown below visualizes the coverage of current shortcut + conversions. Dots indicate a direct conversion is provided for, the height + of the bar indicates the number of conversions steps needed in a chain of + conversions. + A DHTML version is also available. +

+
+
+
+ + +

Environment

+ +

If the environment variable BABL_STATS is set containting + a html pixel format conversion usage matrix will be written to + /tmp/babl-stats.html. This allows figuring out which + conversions is taking up time during processing, and what shortcuts extensions might be created or improved to + make babl do it's job faster. +

+ +

Through the environment variable BABL_TOLERANCE you can control + a speed/performance trade off that by default is set very low (0.000001) + values in the range 0.01-0.1 can provide reasonable preview performance + by allowing lower numerical accuracy

. + + + +

Extending

+ +

For samples of how the current internal API specification of + data types, color models, and conversions look in the extensions/ + directory. The tables in this HTML file is directly generated + based on the data registered by BablCore (double and RGBA), BablBase + (core datatypes, and RGB models), extensions (CIE Lab, naive CMYK, + various shortcut conversions). +

+ + + +

Directory Overview

+
babl-dist-root
+ │
+ ├──babl       the babl core
+ │   └──base   reference implementations for RGB and Grayscale Color Models,
+ │             8bit 16bit, and 32bit and 64bit floating point.
+ ├──extensions CIE-Lab color model as well as a naive-CMYK color model.
+ │             also contains a random cribbage of old conversion optimized
+ │             code from gggl. Finding more exsisting conversions in third
+ │             part libraries (hermes, lcms?, liboil?) could improve the
+ │             speed of babl.
+ ├──tests      tests used to keep babl sane during development.
+ └──docs       Documentation/webpage for babl (the document you are reading
+               originated there.
+ + + + + + + + + + +

Copyright

+ +

Babl is free software; you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 3 of the License, or (at your option) any later version.

+ + +

Authors

+ + + + /babl-@BABL_VERSION@ +
+
+
+
+  +
+
+ + + diff --git a/docs/tools/changelog2rss b/docs/tools/changelog2rss new file mode 100755 index 0000000..62b92f0 --- /dev/null +++ b/docs/tools/changelog2rss @@ -0,0 +1,117 @@ +#!/usr/bin/env ruby + +require 'parsedate' + +class ChangeLogEntry + attr_accessor :category, :time, :title, :content, :author + + def initialize category = 'foo', + time = Time.now, + title = 'no title', + author = 'no author set', + content = '' + @category = category + @time = time + @title = title + @content = content + @author = author + end + + def to_s + @title+@content + end + + def to_rss + str = "\n" + str += "#{author}, #{time.strftime '%y%m%d'}\n" + str += "#{time.to_s}\n" + str += "#{time.to_s}\n" + str += "#{content}\n" + str += "\n" + end +end + +$newest = Time.now + +class ChangeLog + attr_accessor :entries + attr_reader :title + + def initialize + @entries = Array.new + end + + def load file, title=File.basename(file) + @title = title + + entry = nil + + File.open file do + |file| + file.each_line do + |line| + if line =~ /^(\d\d\d\d-\d\d-\d\d.*) (.*) (.*)/ + @entries.push entry unless entry == nil + date = ParseDate.parsedate $1 + time = Time.mktime date[0], date[1], date[2], date[3] + + entry = ChangeLogEntry.new(title, time, line, $2) + else + entry.content += line unless entry == nil + end + end + + @entries.push entry unless entry == nil + end + end + + def sort! + @entries.reverse! + @entries = @entries.sort { |x,y| (x.time <=> y.time)* -1 } + end + + def to_s + previous_category = 'foo' + str = "A combination of ChangeLogs related to the aluminium platform" + + @entries.each do + |entry| + if entry.category != previous_category + str+="\n\n__"+entry.category + "_"*(78-entry.category.length) + "\n\n" + previous_category = entry.category + end + str += entry.to_s + end + str + end + + def to_rss + previous_category = 'foo' + str = "\n" + str += "\n" + str += "\n" + + str += "\n" + + str += "bazfoo\n" + str += "\n" + + @entries.each do + |entry| + str += entry.to_rss + end + + str += "\n" + str += "\n" + + str + end +end + +changelog = ChangeLog.new +changelog.load ARGV[0] +#changelog.load 'path to another changelog', 'name' + +changelog.sort! + +puts changelog.to_rss diff --git a/docs/tools/xml_insert.sh b/docs/tools/xml_insert.sh new file mode 100755 index 0000000..16b6b24 --- /dev/null +++ b/docs/tools/xml_insert.sh @@ -0,0 +1,103 @@ +#!/bin/sh +# +# Utility script to merge an xml snippet from one file into a document. +# +# To insert the file foo.inc into bar.xml, +# after the first line containing the marker enter +# +# xml_insert.sh bar.xml foo foo.inc +# +# 2005 © Øyvind Kolås +# +# FIXME: add argument checking / error handling + +: ${AWK="awk"} +: ${ECHO="echo"} +: ${MKDIR="mkdir"} +: ${SED="sed"} +: ${Xsed="$SED -e 1s/^X//"} + +# Global variables: +EXIT_SUCCESS=0 +EXIT_FAILURE=1 + +dirname="s,/[[^/]]*$,," +basename="s,^.*/,," + +# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh +# is ksh but when the shell is invoked as "sh" and the current value of +# the _XPG environment variable is not equal to 1 (one), the special +# positional parameter $0, within a function call, is the name of the +# function. +progpath="$0" + +# The name of this program: +# In the unlikely event $progname began with a '-', it would play havoc with +# func_echo (imagine progname=-n), so we prepend ./ in that case: +progname=`$ECHO "X$progpath" | $Xsed -e "$basename" -e 's,^-,./-,'` + +# func_error arg... +# Echo program name prefixed message to standard error. +func_error () +{ + $ECHO "$progname: "${1+"$@"} 1>&2 +} + +# func_fatal_error arg... +# Echo program name prefixed message to standard error, and exit. +func_fatal_error () +{ + func_error ${1+"$@"} + exit $EXIT_FAILURE +} + +# func_mktempdir [string] +# Make a temporary directory that won't clash with other running +# processes, and avoids race conditions if possible. If +# given, STRING is the basename for that directory. +func_mktempdir () +{ + my_template="${TMPDIR-/tmp}/${1-$progname}" + + if test "$opt_dry_run" = ":"; then + # Return a directory name, but don't create it in dry-run mode + my_tmpdir="${my_template}-$$" + else + + # If mktemp works, use that first and foremost + my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null` + + if test ! -d "$my_tmpdir"; then + # Failing that, at least try and use $RANDOM to avoid a race + my_tmpdir="${my_template}-${RANDOM-0}$$" + + save_mktempdir_umask=`umask` + umask 0077 + $MKDIR "$my_tmpdir" + umask $save_mktempdir_umask + fi + + # If we're not in dry-run mode, bomb out on failure + test -d "$my_tmpdir" || \ + func_fatal_error "cannot create temporary directory \`$my_tmpdir'" + fi + + $ECHO "X$my_tmpdir" | $Xsed +} + +tmp_dir="`func_mktempdir`" +tmp_file="$tmp_dir/one" + +cp $1 $tmp_file + +numlines=`wc -l $tmp_file | $AWK '{print $1;}'` +splitno=`$AWK "/<\!--$2-->/ { print NR; exit 0; }" $tmp_file` +tailno=`expr $numlines - $splitno` + +head -$splitno $tmp_file > $1 +cat $3 >> $1 +tail -$tailno $tmp_file >> $1 + +rm -rf $tmp_dir + +exit $? diff --git a/extensions/CIE.c b/extensions/CIE.c new file mode 100644 index 0000000..2e0aca2 --- /dev/null +++ b/extensions/CIE.c @@ -0,0 +1,1238 @@ +/* babl - dynamically extendable universal pixel conversion library. + * Copyright (C) 2005, 2014 Øyvind Kolås. + * Copyright (C) 2009, Martin Nordholts + * Copyright (C) 2014, Elle Stone + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, see + * . + */ + +#include "config.h" +#include +#include + +#include "babl.h" +#include "extensions/util.h" + +#define DEGREES_PER_RADIAN (180 / 3.14159265358979323846) +#define RADIANS_PER_DEGREE (1 / DEGREES_PER_RADIAN) + +#define LAB_EPSILON (216.0 / 24389.0) +#define LAB_KAPPA (24389.0 / 27.0) + +/* The constants below hard-code the D50-adapted sRGB ICC profile + * reference white, aka the ICC profile D50 illuminant. + * + * In a properly ICC profile color-managed application, the profile + * illuminant values should be retrieved from the image's + * ICC profile's illuminant. + * + * At present, the ICC profile illuminant is always D50. This might + * change when the next version of the ICC specs is released. + * + * As encoded in an actual V2 or V4 ICC profile, + * the illuminant values are hexadecimal-rounded, as are the following + * hard-coded D50 ICC profile illuminant values: + */ + +#define D50_WHITE_REF_X 0.964202880 +#define D50_WHITE_REF_Y 1.000000000 +#define D50_WHITE_REF_Z 0.824905400 + + +int init (void); + +static void types (void); +static void components (void); +static void models (void); +static void conversions (void); +static void formats (void); + +int +init (void) +{ + types (); + components (); + models (); + formats (); + conversions (); + return 0; +} + +static void +components (void) +{ + babl_component_new ("CIE L", NULL); + babl_component_new ("CIE a", "chroma", NULL); + babl_component_new ("CIE b", "chroma", NULL); + babl_component_new ("CIE C(ab)", "chroma", NULL); + babl_component_new ("CIE H(ab)", "chroma", NULL); + /* babl_component_new ("CIE X", NULL); + babl_component_new ("CIE Y", NULL); + babl_component_new ("CIE Z", NULL);*/ +} + +static void +models (void) +{ + babl_model_new ( + "name", "CIE Lab", + babl_component ("CIE L"), + babl_component ("CIE a"), + babl_component ("CIE b"), + NULL); + + babl_model_new ( + "name", "CIE Lab alpha", + babl_component ("CIE L"), + babl_component ("CIE a"), + babl_component ("CIE b"), + babl_component ("A"), + NULL); + + babl_model_new ( + "name", "CIE LCH(ab)", + babl_component ("CIE L"), + babl_component ("CIE C(ab)"), + babl_component ("CIE H(ab)"), + NULL); + + babl_model_new ( + "name", "CIE LCH(ab) alpha", + babl_component ("CIE L"), + babl_component ("CIE C(ab)"), + babl_component ("CIE H(ab)"), + babl_component ("A"), + NULL); + /*babl_model_new ( + "name", "CIE XYZ", + babl_component ("CIE X"), + babl_component ("CIE Y"), + babl_component ("CIE Z"), + NULL);*/ +} + +static void rgbcie_init (void); + +static inline void ab_to_CHab (double a, + double b, + double *to_C, + double *to_H); + +static inline void CHab_to_ab (double C, + double H, + double *to_a, + double *to_b); + +static inline void RGB_to_XYZ (double R, + double G, + double B, + double *to_X, + double *to_Y, + double *to_Z); + +static inline void XYZ_to_LAB (double X, + double Y, + double Z, + double *to_L, + double *to_a, + double *to_b + ); + +static inline void LAB_to_XYZ (double L, + double a, + double b, + double *to_X, + double *to_Y, + double *to_Z + ); + +static inline void XYZ_to_RGB (double X, + double Y, + double Z, + double *to_R, + double *to_G, + double *to_B); + +static long +rgba_to_lab (char *src, + char *dst, + long n) +{ + while (n--) + { + double R = ((double *) src)[0]; + double G = ((double *) src)[1]; + double B = ((double *) src)[2]; + double X, Y, Z, L, a, b; + + //convert RGB to XYZ + RGB_to_XYZ (R, G, B, &X, &Y, &Z); + + //convert XYZ to Lab + XYZ_to_LAB (X, Y, Z, &L, &a, &b); + + ((double *) dst)[0] = L; + ((double *) dst)[1] = a; + ((double *) dst)[2] = b; + + src += sizeof (double) * 4; + dst += sizeof (double) * 3; + } + return n; +} + +static long +lab_to_rgba (char *src, + char *dst, + long n) +{ + while (n--) + { + double L = ((double *) src)[0]; + double a = ((double *) src)[1]; + double b = ((double *) src)[2]; + + double X, Y, Z, R, G, B; + + //convert Lab to XYZ + LAB_to_XYZ (L, a, b, &X, &Y, &Z); + + //convert XYZ to RGB + XYZ_to_RGB (X, Y, Z, &R, &G, &B); + ((double *) dst)[0] = R; + ((double *) dst)[1] = G; + ((double *) dst)[2] = B; + ((double *) dst)[3] = 1.0; + + src += sizeof (double) * 3; + dst += sizeof (double) * 4; + } + return n; +} + + +static long +rgba_to_laba (char *src, + char *dst, + long n) +{ + while (n--) + { + double R = ((double *) src)[0]; + double G = ((double *) src)[1]; + double B = ((double *) src)[2]; + double alpha = ((double *) src)[3]; + double X, Y, Z, L, a, b; + + //convert RGB to XYZ + RGB_to_XYZ (R, G, B, &X, &Y, &Z); + + //convert XYZ to Lab + XYZ_to_LAB (X, Y, Z, &L, &a, &b); + + ((double *) dst)[0] = L; + ((double *) dst)[1] = a; + ((double *) dst)[2] = b; + ((double *) dst)[3] = alpha; + + src += sizeof (double) * 4; + dst += sizeof (double) * 4; + } + return n; +} + +static long +laba_to_rgba (char *src, + char *dst, + long n) +{ + while (n--) + { + double L = ((double *) src)[0]; + double a = ((double *) src)[1]; + double b = ((double *) src)[2]; + double alpha = ((double *) src)[3]; + + double X, Y, Z, R, G, B; + + //convert Lab to XYZ + LAB_to_XYZ (L, a, b, &X, &Y, &Z); + + //convert XYZ to RGB + XYZ_to_RGB (X, Y, Z, &R, &G, &B); + ((double *) dst)[0] = R; + ((double *) dst)[1] = G; + ((double *) dst)[2] = B; + ((double *) dst)[3] = alpha; + + src += sizeof (double) * 4; + dst += sizeof (double) * 4; + } + return n; +} + +static inline void +CHab_to_ab (double C, + double H, + double *to_a, + double *to_b) +{ + *to_a = cos (H * RADIANS_PER_DEGREE) * C; + *to_b = sin (H * RADIANS_PER_DEGREE) * C; +} + +static inline void +ab_to_CHab (double a, + double b, + double *to_C, + double *to_H) +{ + *to_C = sqrt ( (a * a) + (b * b) ); + *to_H = atan2 (b, a) * DEGREES_PER_RADIAN; + + // Keep H within the range 0-360 + if (*to_H < 0.0) + *to_H += 360; + +} + +static long +rgba_to_lchab (char *src, + char *dst, + long n) +{ + while (n--) + { + double R = ((double *) src)[0]; + double G = ((double *) src)[1]; + double B = ((double *) src)[2]; + double X, Y, Z, L, a, b, C, H; + + //convert RGB to XYZ + RGB_to_XYZ (R, G, B, &X, &Y, &Z); + + //convert XYZ to Lab + XYZ_to_LAB (X, Y, Z, &L, &a, &b); + + //convert Lab to LCH(ab) + ab_to_CHab (a, b, &C, &H); + + ((double *) dst)[0] = L; + ((double *) dst)[1] = C; + ((double *) dst)[2] = H; + + src += sizeof (double) * 4; + dst += sizeof (double) * 3; + } + return n; +} + +static long +lchab_to_rgba (char *src, + char *dst, + long n) +{ + while (n--) + { + double L = ((double *) src)[0]; + double C = ((double *) src)[1]; + double H = ((double *) src)[2]; + double a, b, X, Y, Z, R, G, B; + + //Convert LCH(ab) to Lab + CHab_to_ab (C, H, &a, &b); + + //Convert LAB to XYZ + LAB_to_XYZ (L, a, b, &X, &Y, &Z); + + //Convert XYZ to RGB + XYZ_to_RGB (X, Y, Z, &R, &G, &B); + + ((double *) dst)[0] = R; + ((double *) dst)[1] = G; + ((double *) dst)[2] = B; + ((double *) dst)[3] = 1.0; + + src += sizeof (double) * 3; + dst += sizeof (double) * 4; + } + return n; +} + + +static long +rgba_to_lchaba (char *src, + char *dst, + long n) +{ + while (n--) + { + double R = ((double *) src)[0]; + double G = ((double *) src)[1]; + double B = ((double *) src)[2]; + double alpha = ((double *) src)[3]; + double X, Y, Z, L, a, b, C, H; + + //convert RGB to XYZ + RGB_to_XYZ (R, G, B, &X, &Y, &Z); + + //convert XYZ to Lab + XYZ_to_LAB (X, Y, Z, &L, &a, &b); + + //convert Lab to LCH(ab) + ab_to_CHab (a, b, &C, &H); + + ((double *) dst)[0] = L; + ((double *) dst)[1] = C; + ((double *) dst)[2] = H; + ((double *) dst)[3] = alpha; + + src += sizeof (double) * 4; + dst += sizeof (double) * 4; + } + return n; +} + +static long +lchaba_to_rgba (char *src, + char *dst, + long n) +{ + while (n--) + { + double L = ((double *) src)[0]; + double C = ((double *) src)[1]; + double H = ((double *) src)[2]; + double alpha = ((double *) src)[3]; + double a, b, X, Y, Z, R, G, B; + + //Convert LCH(ab) to Lab + CHab_to_ab (C, H, &a, &b); + + //Convert Lab to XYZ + LAB_to_XYZ (L, a, b, &X, &Y, &Z); + + //Convert XYZ to RGB + XYZ_to_RGB (X, Y, Z, &R, &G, &B); + + ((double *) dst)[0] = R; + ((double *) dst)[1] = G; + ((double *) dst)[2] = B; + ((double *) dst)[3] = alpha; + + src += sizeof (double) * 4; + dst += sizeof (double) * 4; + } + return n; +} + +static inline float +cubef (float f) +{ + return f * f * f; +} + +static long +Yaf_to_Laf (float *src, + float *dst, + long samples) +{ + long n = samples; + + while (n--) + { + float yr = src[0]; + float a = src[1]; + float L = yr > LAB_EPSILON ? 116.0 * cbrtf (yr) - 16 : LAB_KAPPA * yr; + + dst[0] = L; + dst[1] = a; + + src += 2; + dst += 2; + } + + return samples; +} + +static long +rgbf_to_Labf (float *src, + float *dst, + long samples) +{ + long n = samples; + + while (n--) + { + float r = src[0]; + float g = src[1]; + float b = src[2]; + + float xr = 0.43603516f / D50_WHITE_REF_X * r + 0.38511658f / D50_WHITE_REF_X * g + 0.14305115f / D50_WHITE_REF_X * b; + float yr = 0.22248840f / D50_WHITE_REF_Y * r + 0.71690369f / D50_WHITE_REF_Y * g + 0.06060791f / D50_WHITE_REF_Y * b; + float zr = 0.01391602f / D50_WHITE_REF_Z * r + 0.09706116f / D50_WHITE_REF_Z * g + 0.71392822f / D50_WHITE_REF_Z * b; + + float fx = xr > LAB_EPSILON ? cbrtf (xr) : (LAB_KAPPA * xr + 16.0f) / 116.0f; + float fy = yr > LAB_EPSILON ? cbrtf (yr) : (LAB_KAPPA * yr + 16.0f) / 116.0f; + float fz = zr > LAB_EPSILON ? cbrtf (zr) : (LAB_KAPPA * zr + 16.0f) / 116.0f; + + float L = 116.0f * fy - 16.0f; + float A = 500.0f * (fx - fy); + float B = 200.0f * (fy - fz); + + dst[0] = L; + dst[1] = A; + dst[2] = B; + + src += 3; + dst += 3; + } + + return samples; +} + +static long +rgbaf_to_Labaf (float *src, + float *dst, + long samples) +{ + long n = samples; + + while (n--) + { + float r = src[0]; + float g = src[1]; + float b = src[2]; + float a = src[3]; + + float xr = 0.43603516f / D50_WHITE_REF_X * r + 0.38511658f / D50_WHITE_REF_X * g + 0.14305115f / D50_WHITE_REF_X * b; + float yr = 0.22248840f / D50_WHITE_REF_Y * r + 0.71690369f / D50_WHITE_REF_Y * g + 0.06060791f / D50_WHITE_REF_Y * b; + float zr = 0.01391602f / D50_WHITE_REF_Z * r + 0.09706116f / D50_WHITE_REF_Z * g + 0.71392822f / D50_WHITE_REF_Z * b; + + float fx = xr > LAB_EPSILON ? cbrtf (xr) : (LAB_KAPPA * xr + 16.0f) / 116.0f; + float fy = yr > LAB_EPSILON ? cbrtf (yr) : (LAB_KAPPA * yr + 16.0f) / 116.0f; + float fz = zr > LAB_EPSILON ? cbrtf (zr) : (LAB_KAPPA * zr + 16.0f) / 116.0f; + + float L = 116.0f * fy - 16.0f; + float A = 500.0f * (fx - fy); + float B = 200.0f * (fy - fz); + + dst[0] = L; + dst[1] = A; + dst[2] = B; + dst[3] = a; + + src += 4; + dst += 4; + } + + return samples; +} + +static long +Labf_to_rgbf (float *src, + float *dst, + long samples) +{ + long n = samples; + + while (n--) + { + float L = src[0]; + float A = src[1]; + float B = src[2]; + + float fy = (L + 16.0f) / 116.0f; + float fx = fy + A / 500.0f; + float fz = fy - B / 200.0f; + + float yr = L > LAB_KAPPA * LAB_EPSILON ? cubef (fy) : L / LAB_KAPPA; + float xr = cubef (fx) > LAB_EPSILON ? cubef (fx) : (fx * 116.0f - 16.0f) / LAB_KAPPA; + float zr = cubef (fz) > LAB_EPSILON ? cubef (fz) : (fz * 116.0f - 16.0f) / LAB_KAPPA; + + float r = 3.134274799724f * D50_WHITE_REF_X * xr -1.617275708956f * D50_WHITE_REF_Y * yr -0.490724283042f * D50_WHITE_REF_Z * zr; + float g = -0.978795575994f * D50_WHITE_REF_X * xr +1.916161689117f * D50_WHITE_REF_Y * yr +0.033453331711f * D50_WHITE_REF_Z * zr; + float b = 0.071976988401f * D50_WHITE_REF_X * xr -0.228984974402f * D50_WHITE_REF_Y * yr +1.405718224383f * D50_WHITE_REF_Z * zr; + + dst[0] = r; + dst[1] = g; + dst[2] = b; + + src += 3; + dst += 3; + } + + return samples; +} + +static long +Labaf_to_rgbaf (float *src, + float *dst, + long samples) +{ + long n = samples; + + while (n--) + { + float L = src[0]; + float A = src[1]; + float B = src[2]; + float a = src[3]; + + float fy = (L + 16.0f) / 116.0f; + float fx = fy + A / 500.0f; + float fz = fy - B / 200.0f; + + float yr = L > LAB_KAPPA * LAB_EPSILON ? cubef (fy) : L / LAB_KAPPA; + float xr = cubef (fx) > LAB_EPSILON ? cubef (fx) : (fx * 116.0f - 16.0f) / LAB_KAPPA; + float zr = cubef (fz) > LAB_EPSILON ? cubef (fz) : (fz * 116.0f - 16.0f) / LAB_KAPPA; + + float r = 3.134274799724f * D50_WHITE_REF_X * xr -1.617275708956f * D50_WHITE_REF_Y * yr -0.490724283042f * D50_WHITE_REF_Z * zr; + float g = -0.978795575994f * D50_WHITE_REF_X * xr +1.916161689117f * D50_WHITE_REF_Y * yr +0.033453331711f * D50_WHITE_REF_Z * zr; + float b = 0.071976988401f * D50_WHITE_REF_X * xr -0.228984974402f * D50_WHITE_REF_Y * yr +1.405718224383f * D50_WHITE_REF_Z * zr; + + dst[0] = r; + dst[1] = g; + dst[2] = b; + dst[3] = a; + + src += 4; + dst += 4; + } + + return samples; +} + +static void +conversions (void) +{ + babl_conversion_new ( + babl_model ("RGBA"), + babl_model ("CIE Lab"), + "linear", rgba_to_lab, + NULL + ); + babl_conversion_new ( + babl_model ("CIE Lab"), + babl_model ("RGBA"), + "linear", lab_to_rgba, + NULL + ); + babl_conversion_new ( + babl_model ("RGBA"), + babl_model ("CIE Lab alpha"), + "linear", rgba_to_laba, + NULL + ); + babl_conversion_new ( + babl_model ("CIE Lab alpha"), + babl_model ("RGBA"), + "linear", laba_to_rgba, + NULL + ); + babl_conversion_new ( + babl_format ("RGB float"), + babl_format ("CIE Lab float"), + "linear", rgbf_to_Labf, + NULL + ); + babl_conversion_new ( + babl_format ("CIE Lab float"), + babl_format ("RGB float"), + "linear", Labf_to_rgbf, + NULL + ); + babl_conversion_new ( + babl_format ("RGBA float"), + babl_format ("CIE Lab alpha float"), + "linear", rgbaf_to_Labaf, + NULL + ); + babl_conversion_new ( + babl_format ("CIE Lab alpha float"), + babl_format ("RGBA float"), + "linear", Labaf_to_rgbaf, + NULL + ); + babl_conversion_new ( + babl_format ("YA float"), + babl_format ("CIE L alpha float"), + "linear", Yaf_to_Laf, + NULL + ); + babl_conversion_new ( + babl_model ("RGBA"), + babl_model ("CIE LCH(ab)"), + "linear", rgba_to_lchab, + NULL + ); + babl_conversion_new ( + babl_model ("CIE LCH(ab)"), + babl_model ("RGBA"), + "linear", lchab_to_rgba, + NULL + ); + babl_conversion_new ( + babl_model ("RGBA"), + babl_model ("CIE LCH(ab) alpha"), + "linear", rgba_to_lchaba, + NULL + ); + babl_conversion_new ( + babl_model ("CIE LCH(ab) alpha"), + babl_model ("RGBA"), + "linear", lchaba_to_rgba, + NULL + ); + /*babl_conversion_new ( + babl_model ("RGBA"), + babl_model ("CIE XYZ"), + "linear", RGB_to_XYZ, + NULL + ); + babl_conversion_new ( + babl_model ("CIE XYZ"), + babl_model ("RGBA"), + "linear", XYZ_to_RGB, + NULL + );*/ + + rgbcie_init (); +} + +static void +formats (void) +{ + babl_format_new ( + "name", "CIE Lab float", + babl_model ("CIE Lab"), + + babl_type ("float"), + babl_component ("CIE L"), + babl_component ("CIE a"), + babl_component ("CIE b"), + NULL); + + /*babl_format_new ( + "name", "CIE XYZ float", + babl_model ("CIE XYZ"), + + babl_type ("float"), + babl_component ("CIE X"), + babl_component ("CIE Y"), + babl_component ("CIE Z"), + NULL);*/ + + babl_format_new ( + "name", "CIE Lab alpha float", + babl_model ("CIE Lab alpha"), + + babl_type ("float"), + babl_component ("CIE L"), + babl_component ("CIE a"), + babl_component ("CIE b"), + babl_component ("A"), + NULL); + + babl_format_new ( + "name", "CIE L alpha float", + babl_model ("CIE Lab alpha"), + babl_type ("float"), + babl_component ("CIE L"), + babl_component ("A"), + NULL); + + babl_format_new ( + "name", "CIE Lab u8", + babl_model ("CIE Lab"), + + babl_type ("CIE u8 L"), + babl_component ("CIE L"), + babl_type ("CIE u8 ab"), + babl_component ("CIE a"), + babl_type ("CIE u8 ab"), + babl_component ("CIE b"), + NULL); + + babl_format_new ( + "name", "CIE Lab u16", + babl_model ("CIE Lab"), + + babl_type ("CIE u16 L"), + babl_component ("CIE L"), + babl_type ("CIE u16 ab"), + babl_component ("CIE a"), + babl_type ("CIE u16 ab"), + babl_component ("CIE b"), + NULL); + + + babl_format_new ( + "name", "CIE LCH(ab) float", + babl_model ("CIE LCH(ab)"), + + babl_type ("float"), + babl_component ("CIE L"), + babl_component ("CIE C(ab)"), + babl_component ("CIE H(ab)"), + NULL); + + babl_format_new ( + "name", "CIE LCH(ab) alpha float", + babl_model ("CIE LCH(ab) alpha"), + + babl_type ("float"), + babl_component ("CIE L"), + babl_component ("CIE C(ab)"), + babl_component ("CIE H(ab)"), + babl_component ("A"), + NULL); +} + + +static inline long +convert_double_u8_scaled (double min_val, + double max_val, + unsigned char min, + unsigned char max, + char *src, + char *dst, + int src_pitch, + int dst_pitch, + long n) +{ + while (n--) + { + double dval = *(double *) src; + unsigned char u8val; + + if (dval < min_val) + u8val = min; + else if (dval > max_val) + u8val = max; + else + u8val = rint ((dval - min_val) / (max_val - min_val) * (max - min) + min); + + *(unsigned char *) dst = u8val; + src += src_pitch; + dst += dst_pitch; + } + return n; +} + +static inline long +convert_u8_double_scaled (double min_val, + double max_val, + unsigned char min, + unsigned char max, + char *src, + char *dst, + int src_pitch, + int dst_pitch, + long n) +{ + while (n--) + { + int u8val = *(unsigned char *) src; + double dval; + + if (u8val < min) + dval = min_val; + else if (u8val > max) + dval = max_val; + else + dval = (u8val - min) / (double) (max - min) * (max_val - min_val) + min_val; + + (*(double *) dst) = dval; + + dst += dst_pitch; + src += src_pitch; + } + return n; +} + +#define MAKE_CONVERSIONS(name, min_val, max_val, min, max) \ + static long \ + convert_ ## name ## _double (char *src, \ + char *dst, \ + int src_pitch, \ + int dst_pitch, \ + long n) \ + { \ + return convert_u8_double_scaled (min_val, max_val, min, max, \ + src, dst, src_pitch, dst_pitch, n); \ + } \ + static long \ + convert_double_ ## name (char *src, \ + char *dst, \ + int src_pitch, \ + int dst_pitch, \ + long n) \ + { \ + return convert_double_u8_scaled (min_val, max_val, min, max, \ + src, dst, src_pitch, dst_pitch, n); \ + } + +/* source ICC.1:2004-10 */ + +MAKE_CONVERSIONS (u8_l, 0.0, 100.0, 0x00, 0xff) +MAKE_CONVERSIONS (u8_ab, -128.0, 127.0, 0x00, 0xff) + +#undef MAKE_CONVERSIONS + +static void +types_u8 (void) +{ + babl_type_new ( + "CIE u8 L", + "integer", + "unsigned", + "bits", 8, + "min_val", 0.0, + "max_val", 100.0, + NULL + ); + + babl_type_new ( + "CIE u8 ab", + "integer", + "unsigned", + "bits", 8, + "min_val", -128.0, + "max_val", 127.0, + NULL + ); + + babl_conversion_new ( + babl_type ("CIE u8 L"), + babl_type ("double"), + "plane", convert_u8_l_double, + NULL + ); + babl_conversion_new ( + babl_type ("double"), + babl_type ("CIE u8 L"), + "plane", convert_double_u8_l, + NULL + ); + + babl_conversion_new ( + babl_type ("CIE u8 ab"), + babl_type ("double"), + "plane", convert_u8_ab_double, + NULL + ); + babl_conversion_new ( + babl_type ("double"), + babl_type ("CIE u8 ab"), + "plane", convert_double_u8_ab, + NULL + ); +} + +static inline long +convert_double_u16_scaled (double min_val, + double max_val, + unsigned short min, + unsigned short max, + char *src, + char *dst, + int src_pitch, + int dst_pitch, + long n) +{ + while (n--) + { + double dval = *(double *) src; + unsigned short u16val; + + if (dval < min_val) + u16val = min; + else if (dval > max_val) + u16val = max; + else + u16val = rint ((dval - min_val) / (max_val - min_val) * (max - min) + min); + + *(unsigned short *) dst = u16val; + dst += dst_pitch; + src += src_pitch; + } + return n; +} + +static inline long +convert_u16_double_scaled (double min_val, + double max_val, + unsigned short min, + unsigned short max, + char *src, + char *dst, + int src_pitch, + int dst_pitch, + long n) +{ + while (n--) + { + int u16val = *(unsigned short *) src; + double dval; + + if (u16val < min) + dval = min_val; + else if (u16val > max) + dval = max_val; + else + dval = (u16val - min) / (double) (max - min) * (max_val - min_val) + min_val; + + (*(double *) dst) = dval; + dst += dst_pitch; + src += src_pitch; + } + return n; +} + +#define MAKE_CONVERSIONS(name, min_val, max_val, min, max) \ + static long \ + convert_ ## name ## _double (char *src, \ + char *dst, \ + int src_pitch, \ + int dst_pitch, \ + long n) \ + { \ + return convert_u16_double_scaled (min_val, max_val, min, max, \ + src, dst, src_pitch, dst_pitch, n); \ + } \ + static long \ + convert_double_ ## name (char *src, \ + char *dst, \ + int src_pitch, \ + int dst_pitch, \ + long n) \ + { \ + return convert_double_u16_scaled (min_val, max_val, min, max, \ + src, dst, src_pitch, dst_pitch, n); \ + } + +MAKE_CONVERSIONS (u16_l, 0.0, 100.0, 0x00, 0xffff) +MAKE_CONVERSIONS (u16_ab, -128.0, 127.0, 0x00, 0xffff) + +#undef MAKE_CONVERSIONS + +static void +types_u16 (void) +{ + babl_type_new ( + "CIE u16 L", + "integer", + "unsigned", + "bits", 16, + "min_val", 0.0, + "max_val", 100.0, + NULL + ); + + babl_type_new ( + "CIE u16 ab", + "id", "CIE u8 ab", + "integer", + "unsigned", + "bits", 16, + "min_val", -128.0, + "max_val", 127.0, + NULL + ); + + + babl_conversion_new ( + babl_type ("CIE u16 L"), + babl_type ("double"), + "plane", convert_u16_l_double, + NULL + ); + babl_conversion_new ( + babl_type ("double"), + babl_type ("CIE u16 L"), + "plane", convert_double_u16_l, + NULL + ); + + babl_conversion_new ( + babl_type ("CIE u16 ab"), + babl_type ("double"), + "plane", convert_u16_ab_double, + NULL + ); + babl_conversion_new ( + babl_type ("double"), + babl_type ("CIE u16 ab"), + "plane", convert_double_u16_ab, + NULL + ); +} + +static void +types (void) +{ + types_u8 (); + types_u16 (); +} + + +static void +rgbxyzrgb_init (void) +{ +} + +static inline void +RGB_to_XYZ (double R, + double G, + double B, + double *to_X, + double *to_Y, + double *to_Z) +{ + double RGBtoXYZ[3][3]; + +/* + * The variables below hard-code the D50-adapted sRGB RGB to XYZ matrix. + * + * In a properly ICC profile color-managed application, this matrix + * is retrieved from the image's ICC profile's RGB colorants. + * + * */ + RGBtoXYZ[0][0]= 0.43603516; + RGBtoXYZ[0][1]= 0.38511658; + RGBtoXYZ[0][2]= 0.14305115; + RGBtoXYZ[1][0]= 0.22248840; + RGBtoXYZ[1][1]= 0.71690369; + RGBtoXYZ[1][2]= 0.06060791; + RGBtoXYZ[2][0]= 0.01391602; + RGBtoXYZ[2][1]= 0.09706116; + RGBtoXYZ[2][2]= 0.71392822; + +/* Convert RGB to XYZ */ + *to_X = RGBtoXYZ[0][0]*R + RGBtoXYZ[0][1]*G + RGBtoXYZ[0][2]*B; + *to_Y = RGBtoXYZ[1][0]*R + RGBtoXYZ[1][1]*G + RGBtoXYZ[1][2]*B; + *to_Z = RGBtoXYZ[2][0]*R + RGBtoXYZ[2][1]*G + RGBtoXYZ[2][2]*B; + +} + +static inline void +XYZ_to_RGB (double X, + double Y, + double Z, + double *to_R, + double *to_G, + double *to_B) +{ + double XYZtoRGB[3][3]; + +/* + * The variables below hard-code the inverse of + * the D50-adapted sRGB RGB to XYZ matrix. + * + * In a properly ICC profile color-managed application, + * this matrix is the inverse of the matrix + * retrieved from the image's ICC profile's RGB colorants. + * + */ + XYZtoRGB[0][0]= 3.134274799724; + XYZtoRGB[0][1]= -1.617275708956; + XYZtoRGB[0][2]= -0.490724283042; + XYZtoRGB[1][0]= -0.978795575994; + XYZtoRGB[1][1]= 1.916161689117; + XYZtoRGB[1][2]= 0.033453331711; + XYZtoRGB[2][0]= 0.071976988401; + XYZtoRGB[2][1]= -0.228984974402; + XYZtoRGB[2][2]= 1.405718224383; + +/* Convert XYZ to RGB */ + *to_R = XYZtoRGB[0][0] * X + XYZtoRGB[0][1] * Y + XYZtoRGB[0][2] * Z; + *to_G = XYZtoRGB[1][0] * X + XYZtoRGB[1][1] * Y + XYZtoRGB[1][2] * Z; + *to_B = XYZtoRGB[2][0] * X + XYZtoRGB[2][1] * Y + XYZtoRGB[2][2] * Z; +} + +static inline void +XYZ_to_LAB (double X, + double Y, + double Z, + double *to_L, + double *to_a, + double *to_b) +{ + double f_x, f_y, f_z; + + double x_r = X / D50_WHITE_REF_X; + double y_r = Y / D50_WHITE_REF_Y; + double z_r = Z / D50_WHITE_REF_Z; + + if (x_r > LAB_EPSILON) f_x = pow(x_r, 1.0 / 3.0); + else ( f_x = ((LAB_KAPPA * x_r) + 16) / 116.0 ); + + if (y_r > LAB_EPSILON) f_y = pow(y_r, 1.0 / 3.0); + else ( f_y = ((LAB_KAPPA * y_r) + 16) / 116.0 ); + + if (z_r > LAB_EPSILON) f_z = pow(z_r, 1.0 / 3.0); + else ( f_z = ((LAB_KAPPA * z_r) + 16) / 116.0 ); + + *to_L = (116.0 * f_y) - 16.0; + *to_a = 500.0 * (f_x - f_y); + *to_b = 200.0 * (f_y - f_z); +} + +static inline void +LAB_to_XYZ (double L, + double a, + double b, + double *to_X, + double *to_Y, + double *to_Z) +{ + double fy, fx, fz, fx_cubed, fy_cubed, fz_cubed; + double xr, yr, zr; + + fy = (L + 16.0) / 116.0; + fy_cubed = fy*fy*fy; + + fz = fy - (b / 200.0); + fz_cubed = fz*fz*fz; + + fx = (a / 500.0) + fy; + fx_cubed = fx*fx*fx; + + if (fx_cubed > LAB_EPSILON) xr = fx_cubed; + else xr = ((116.0 * fx) - 16) / LAB_KAPPA; + + if ( L > (LAB_KAPPA * LAB_EPSILON) ) yr = fy_cubed; + else yr = (L / LAB_KAPPA); + + if (fz_cubed > LAB_EPSILON) zr = fz_cubed; + else zr = ( (116.0 * fz) - 16 ) / LAB_KAPPA; + + *to_X = xr * D50_WHITE_REF_X; + *to_Y = yr * D50_WHITE_REF_Y; + *to_Z = zr * D50_WHITE_REF_Z; +} + +static void +rgbcie_init (void) +{ + static int initialized = 0; + + if (!initialized) + { + rgbxyzrgb_init (); + initialized = 1; + } +} diff --git a/extensions/HSL.c b/extensions/HSL.c new file mode 100644 index 0000000..827e028 --- /dev/null +++ b/extensions/HSL.c @@ -0,0 +1,287 @@ +/* babl - dynamically extendable universal pixel conversion library. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, see + * . + */ + +#include "config.h" + +#include +#include + +#include "babl.h" +#include "base/util.h" + +#define MIN(a,b) ((a > b) ? b : a) +#define MAX(a,b) ((a < b) ? b : a) +#define EPSILON 1.0e-10 + +static long rgba_to_hsla (char *src, + char *dst, + long samples); +static long hsla_to_rgba (char *src, + char *dst, + long samples); +static long rgba_to_hsl (char *src, + char *dst, + long samples); +static long hsl_to_rgba (char *src, + char *dst, + long samples); +static void rgb_to_hsl_step (double *src, + double *dst); +static void hsl_to_rgb_step (double *src, + double *dst); +static inline double hue2cpn (double p, + double q, + double hue); +int init (void); + + +int +init (void) +{ + babl_component_new ("hue", NULL); + babl_component_new ("saturation", NULL); + babl_component_new ("lightness", NULL); + babl_component_new ("alpha", NULL); + + babl_model_new ("name", "HSLA", + babl_component ("hue"), + babl_component ("saturation"), + babl_component ("lightness"), + babl_component ("alpha"), + NULL); + babl_model_new ("name", "HSL", + babl_component ("hue"), + babl_component ("saturation"), + babl_component ("lightness"), + NULL); + + + babl_conversion_new (babl_model ("RGBA"), + babl_model ("HSLA"), + "linear", rgba_to_hsla, + NULL); + babl_conversion_new (babl_model ("RGBA"), + babl_model ("HSL"), + "linear", rgba_to_hsl, + NULL); + babl_conversion_new (babl_model ("HSLA"), + babl_model ("RGBA"), + "linear", hsla_to_rgba, + NULL); + babl_conversion_new (babl_model ("HSL"), + babl_model ("RGBA"), + "linear", hsl_to_rgba, + NULL); + + babl_format_new ("name", "HSLA float", + babl_model ("HSLA"), + babl_type ("float"), + babl_component ("hue"), + babl_component ("saturation"), + babl_component ("lightness"), + babl_component ("alpha"), + NULL); + babl_format_new ("name", "HSL float", + babl_model ("HSL"), + babl_type ("float"), + babl_component ("hue"), + babl_component ("saturation"), + babl_component ("lightness"), + NULL); + return 0; +} + + +static inline void +rgb_to_hsl_step (double* src, + double* dst) +{ + + double min, max; + double hue, saturation, lightness; + int cpn_max; + + double red = linear_to_gamma_2_2 (src[0]); + double green = linear_to_gamma_2_2 (src[1]); + double blue = linear_to_gamma_2_2 (src[2]); + + max = MAX (red, MAX (green, blue)); + min = MIN (red, MIN (green, blue)); + + if (max - red < EPSILON) + cpn_max = 0; + else if (max - green < EPSILON) + cpn_max = 1; + else + cpn_max = 2; + + lightness = (max + min) / 2.0; + + if (max - min < EPSILON) + { + hue = saturation = 0; + } + else + { + double diff = max - min; + double sum = max + min; + saturation = lightness > 0.5 ? diff / (2.0 - sum) : diff / sum; + switch (cpn_max) + { + case 0: hue = (green - blue) / diff + (green < blue ? 6.0 : 0.0); break; + case 1: hue = (blue - red) / diff + 2.0; break; + case 2: hue = (red - green) / diff + 4.0; break; + default: break; + } + hue /= 6.0; + } + + dst[0] = hue; + dst[1] = saturation; + dst[2] = lightness; +} + + +static long +rgba_to_hsla (char *src, + char *dst, + long samples) +{ + long n = samples; + + while (n--) + { + double alpha = ((double *) src)[3]; + + rgb_to_hsl_step ((double *) src, (double *) dst); + + ((double *) dst)[3] = alpha; + + src += 4 * sizeof (double); + dst += 4 * sizeof (double); + } + + return samples; +} + + +static long +rgba_to_hsl (char *src, + char *dst, + long samples) +{ + long n = samples; + + while (n--) + { + rgb_to_hsl_step ((double *) src, (double *) dst); + + src += 4 * sizeof (double); + dst += 3 * sizeof (double); + } + + return samples; +} + + +static inline double +hue2cpn (double p, double q, double hue) +{ + if (hue < 0.0) hue += 1.0; + if (hue > 1.0) hue -= 1.0; + if (hue < 1.0 / 6.0) return p + (q - p) * 6.0 * hue; + if (hue < 1.0 / 2.0) return q; + if (hue < 2.0 / 3.0) return p + (q - p) * (2.0 / 3.0 - hue) * 6.0; + return p; +} + + +static void +hsl_to_rgb_step (double *src, + double *dst) +{ + double hue = src[0]; + double saturation = src[1]; + double lightness = src[2]; + + double red = 0, green = 0, blue = 0; + + if (saturation < 1e-7) + { + red = green = blue = lightness; + } + else + { + double q = lightness < 0.5 ? + lightness * (1 + saturation) : + lightness + saturation - lightness * saturation; + + double p = 2 * lightness - q; + + red = hue2cpn (p, q, hue + 1.0/3.0); + green = hue2cpn (p, q, hue); + blue = hue2cpn (p, q, hue - 1.0/3.0); + } + + dst[0] = gamma_2_2_to_linear (red); + dst[1] = gamma_2_2_to_linear (green); + dst[2] = gamma_2_2_to_linear (blue); +} + + +static long +hsla_to_rgba (char *src, + char *dst, + long samples) +{ + long n = samples; + + while (n--) + { + double alpha = ((double *) src)[3]; + + hsl_to_rgb_step ((double *) src, (double *) dst); + + ((double *) dst)[3] = alpha; + + src += 4 * sizeof (double); + dst += 4 * sizeof (double); + } + + return samples; +} + + +static long +hsl_to_rgba (char *src, + char *dst, + long samples) +{ + long n = samples; + + while (n--) + { + hsl_to_rgb_step ((double *) src, (double *) dst); + + ((double *) dst)[3] = 1.0; + + src += 3 * sizeof (double); + dst += 4 * sizeof (double); + } + + return samples; +} diff --git a/extensions/HSV.c b/extensions/HSV.c new file mode 100644 index 0000000..c830a0c --- /dev/null +++ b/extensions/HSV.c @@ -0,0 +1,357 @@ +/* babl - dynamically extendable universal pixel conversion library. + * Copyright (C) 2012, Maxime Nicco + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, see + * . + */ + + /* + * Adding support for HSV colorspace + */ + +#include "config.h" + +#include +#include + +#include "babl.h" +#include "base/util.h" + +#define MIN(a,b) (a > b) ? b : a; +#define MAX(a,b) (a < b) ? b : a; +#define EPSILON 1.0e-10 + +static long rgba_to_hsva (char *src, + char *dst, + long samples); + +static long hsva_to_rgba (char *src, + char *dst, + long samples); + +static long rgba_to_hsv (char *src, + char *dst, + long samples); + +static long hsv_to_rgba (char *src, + char *dst, + long samples); + +static void rgba_to_hsv_step (char *src, + char *dst); + +static void hsv_to_rgba_step (char *src, + char *dst); + +static void components (void); +static void models (void); +static void conversions (void); +static void formats (void); + +int init (void); + +int +init (void) +{ + components (); + models (); + conversions (); + formats (); + + return 0; +} + + +static void +components (void) +{ + babl_component_new ("hue", NULL); + babl_component_new ("saturation", NULL); + babl_component_new ("value", NULL); + babl_component_new ("alpha", NULL); +} + +static void +models (void) +{ + babl_model_new ( + "name", "HSVA", + babl_component ("hue"), + babl_component ("saturation"), + babl_component ("value"), + babl_component ("alpha"), + NULL + ); + + babl_model_new ( + "name", "HSV", + babl_component ("hue"), + babl_component ("saturation"), + babl_component ("value"), + NULL + ); +} + +static void +conversions (void) +{ + babl_conversion_new ( + babl_model ("RGBA"), + babl_model ("HSVA"), + "linear", rgba_to_hsva, + NULL + ); + + babl_conversion_new ( + babl_model ("RGBA"), + babl_model ("HSV"), + "linear", rgba_to_hsv, + NULL + ); + + babl_conversion_new ( + babl_model ("HSVA"), + babl_model ("RGBA"), + "linear", hsva_to_rgba, + NULL + ); + + babl_conversion_new ( + babl_model ("HSV"), + babl_model ("RGBA"), + "linear", hsv_to_rgba, + NULL + ); +} + +static void +formats (void) +{ + babl_format_new ( + "name", "HSVA float", + babl_model ("HSVA"), + babl_type ("float"), + babl_component ("hue"), + babl_component ("saturation"), + babl_component ("value"), + babl_component ("alpha"), + NULL + ); + + babl_format_new ( + "name", "HSV float", + babl_model ("HSV"), + babl_type ("float"), + babl_component ("hue"), + babl_component ("saturation"), + babl_component ("value"), + NULL + ); +} + +static void +rgba_to_hsv_step (char *src, + char *dst) +{ + double hue, saturation, value; + double min, chroma; + + double red = linear_to_gamma_2_2 (((double *) src)[0]); + double green = linear_to_gamma_2_2 (((double *) src)[1]); + double blue = linear_to_gamma_2_2 (((double *) src)[2]); + + if (red > green) + { + value = MAX (red, blue); + min = MIN (green, blue); + } + else + { + value = MAX (green, blue); + min = MIN (red, blue); + } + + chroma = value - min; + + if (value < EPSILON) + saturation = 0.0; + else + saturation = chroma / value; + + if (saturation < EPSILON) + { + hue = 0.0; + } + else + { + if (fabs (red - value) < EPSILON) + { + hue = (green - blue) / chroma; + + if (hue < 0.0) + hue += 6.0; + } + else if (fabs (green - value) < EPSILON) + hue = 2.0 + (blue - red) / chroma; + else + hue = 4.0 + (red - green) / chroma; + + hue /= 6.0; + } + + ((double *) dst)[0] = hue; + ((double *) dst)[1] = saturation; + ((double *) dst)[2] = value; +} + + +static void +hsv_to_rgba_step (char *src, + char *dst) +{ + double hue = ((double *) src)[0]; + double saturation = ((double *) src)[1]; + double value = ((double *) src)[2]; + + double red = 0, green = 0, blue = 0; + + double chroma, h_tmp, x, min; + + chroma = saturation * value; + h_tmp = hue * 6.0; + x = chroma * (1.0 - fabs (fmod (h_tmp, 2.0) - 1.0)); + + if (h_tmp < 1.0) + { + red = chroma; + green = x; + } + else if (h_tmp < 2.0) + { + red = x; + green = chroma; + } + else if (h_tmp < 3.0) + { + green = chroma; + blue = x; + } + else if (h_tmp < 4.0) + { + green = x; + blue = chroma; + } + else if (h_tmp < 5.0) + { + red = x; + blue = chroma; + } + else if (h_tmp < 6.0) + { + red = chroma; + blue = x; + } + + min = value - chroma; + + red += min; + green += min; + blue += min; + + ((double *) dst)[0] = gamma_2_2_to_linear (red); + ((double *) dst)[1] = gamma_2_2_to_linear (green); + ((double *) dst)[2] = gamma_2_2_to_linear (blue); +} + +static long +rgba_to_hsva (char *src, + char *dst, + long samples) +{ + long n = samples; + + while (n--) + { + double alpha = ((double *) src)[3]; + + rgba_to_hsv_step (src, dst); + + ((double *) dst)[3] = alpha; + + src += 4 * sizeof (double); + dst += 4 * sizeof (double); + } + + return samples; +} + +static long +hsva_to_rgba (char *src, + char *dst, + long samples) +{ + long n = samples; + + while (n--) + { + double alpha = ((double *) src)[3]; + + hsv_to_rgba_step (src, dst); + + ((double *) dst)[3] = alpha; + + src += 4 * sizeof (double); + dst += 4 * sizeof (double); + } + + return samples; +} + +static long +rgba_to_hsv (char *src, + char *dst, + long samples) +{ + long n = samples; + + while (n--) + { + rgba_to_hsv_step (src, dst); + + src += 4 * sizeof (double); + dst += 3 * sizeof (double); + } + + return samples; +} + +static long +hsv_to_rgba (char *src, + char *dst, + long samples) +{ + long n = samples; + + while (n--) + { + hsv_to_rgba_step (src, dst); + + ((double *) dst)[3] = 1.0; + + src += 3 * sizeof (double); + dst += 4 * sizeof (double); + } + + return samples; +} diff --git a/extensions/Makefile.am b/extensions/Makefile.am new file mode 100644 index 0000000..7ecb457 --- /dev/null +++ b/extensions/Makefile.am @@ -0,0 +1,73 @@ +if PLATFORM_WIN32 +AM_LDFLAGS = -module -avoid-version -no-undefined +else +AM_LDFLAGS = -module -avoid-version +endif + +noinst_HEADERS = util.h + + +AM_CPPFLAGS = \ + -I$(top_builddir) \ + -I$(top_srcdir) \ + -I$(top_srcdir)/babl \ + -I$(top_srcdir)/extensions + +extdir = $(libdir)/babl-@BABL_API_VERSION@ +ext_LTLIBRARIES = \ + cairo.la \ + CIE.la \ + float-half.la \ + gegl-fixups.la \ + gggl-lies.la \ + gggl-table.la \ + gggl-table-lies.la \ + gggl.la \ + gimp-8bit.la \ + grey.la \ + float.la \ + fast-float.la \ + naive-CMYK.la \ + HSL.la \ + HSV.la \ + simple.la \ + sse2-float.la \ + sse2-int8.la \ + sse2-int16.la \ + sse4-int8.la \ + sse-half.la \ + two-table.la \ + ycbcr.la + +cairo_la_SOURCES = cairo.c cairo-tables.h +CIE_la_SOURCES = CIE.c +simple_la_SOURCES = simple.c +float_half_la_SOURCES = float-half.c +gegl_fixups_la_SOURCES = gegl-fixups.c +gggl_lies_la_SOURCES = gggl-lies.c +gggl_table_lies_la_SOURCES = gggl-table-lies.c +gggl_table_la_SOURCES = gggl-table.c +gggl_la_SOURCES = gggl.c +gimp_8bit_la_SOURCES = gimp-8bit.c +grey_la_SOURCES = grey.c +naive_CMYK_la_SOURCES = naive-CMYK.c +HSL_la_SOURCES = HSL.c +HSV_la_SOURCES = HSV.c +sse2_float_la_SOURCES = sse2-float.c +sse2_int8_la_SOURCES = sse2-int8.c +sse2_int16_la_SOURCES = sse2-int16.c +sse4_int8_la_SOURCES = sse4-int8.c +sse_half_la_SOURCES = sse-half.c +two_table_la_SOURCES = two-table.c two-table-tables.h +ycbcr_la_SOURCES = ycbcr.c +float_la_SOURCES = float.c +fast_float_la_SOURCES = fast-float.c + +LIBS = $(top_builddir)/babl/libbabl-@BABL_API_VERSION@.la $(MATH_LIB) \ + $(THREAD_LIB) + +sse2_float_la_CFLAGS = $(SSE2_EXTRA_CFLAGS) +sse2_int8_la_CFLAGS = $(SSE2_EXTRA_CFLAGS) +sse2_int16_la_CFLAGS = $(SSE2_EXTRA_CFLAGS) +sse4_int8_la_CFLAGS = $(SSE4_1_EXTRA_CFLAGS) +sse_half_la_CFLAGS = $(SSE4_1_EXTRA_CFLAGS) $(F16C_EXTRA_CFLAGS) diff --git a/extensions/Makefile.in b/extensions/Makefile.in new file mode 100644 index 0000000..c9f212e --- /dev/null +++ b/extensions/Makefile.in @@ -0,0 +1,962 @@ +# Makefile.in generated by automake 1.15 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2014 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + + +VPATH = @srcdir@ +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +subdir = extensions +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(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)/acinclude.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ + $(am__DIST_COMMON) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +am__installdirs = "$(DESTDIR)$(extdir)" +LTLIBRARIES = $(ext_LTLIBRARIES) +CIE_la_LIBADD = +am_CIE_la_OBJECTS = CIE.lo +CIE_la_OBJECTS = $(am_CIE_la_OBJECTS) +AM_V_lt = $(am__v_lt_@AM_V@) +am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) +am__v_lt_0 = --silent +am__v_lt_1 = +HSL_la_LIBADD = +am_HSL_la_OBJECTS = HSL.lo +HSL_la_OBJECTS = $(am_HSL_la_OBJECTS) +HSV_la_LIBADD = +am_HSV_la_OBJECTS = HSV.lo +HSV_la_OBJECTS = $(am_HSV_la_OBJECTS) +cairo_la_LIBADD = +am_cairo_la_OBJECTS = cairo.lo +cairo_la_OBJECTS = $(am_cairo_la_OBJECTS) +fast_float_la_LIBADD = +am_fast_float_la_OBJECTS = fast-float.lo +fast_float_la_OBJECTS = $(am_fast_float_la_OBJECTS) +float_half_la_LIBADD = +am_float_half_la_OBJECTS = float-half.lo +float_half_la_OBJECTS = $(am_float_half_la_OBJECTS) +float_la_LIBADD = +am_float_la_OBJECTS = float.lo +float_la_OBJECTS = $(am_float_la_OBJECTS) +gegl_fixups_la_LIBADD = +am_gegl_fixups_la_OBJECTS = gegl-fixups.lo +gegl_fixups_la_OBJECTS = $(am_gegl_fixups_la_OBJECTS) +gggl_lies_la_LIBADD = +am_gggl_lies_la_OBJECTS = gggl-lies.lo +gggl_lies_la_OBJECTS = $(am_gggl_lies_la_OBJECTS) +gggl_table_lies_la_LIBADD = +am_gggl_table_lies_la_OBJECTS = gggl-table-lies.lo +gggl_table_lies_la_OBJECTS = $(am_gggl_table_lies_la_OBJECTS) +gggl_table_la_LIBADD = +am_gggl_table_la_OBJECTS = gggl-table.lo +gggl_table_la_OBJECTS = $(am_gggl_table_la_OBJECTS) +gggl_la_LIBADD = +am_gggl_la_OBJECTS = gggl.lo +gggl_la_OBJECTS = $(am_gggl_la_OBJECTS) +gimp_8bit_la_LIBADD = +am_gimp_8bit_la_OBJECTS = gimp-8bit.lo +gimp_8bit_la_OBJECTS = $(am_gimp_8bit_la_OBJECTS) +grey_la_LIBADD = +am_grey_la_OBJECTS = grey.lo +grey_la_OBJECTS = $(am_grey_la_OBJECTS) +naive_CMYK_la_LIBADD = +am_naive_CMYK_la_OBJECTS = naive-CMYK.lo +naive_CMYK_la_OBJECTS = $(am_naive_CMYK_la_OBJECTS) +simple_la_LIBADD = +am_simple_la_OBJECTS = simple.lo +simple_la_OBJECTS = $(am_simple_la_OBJECTS) +sse_half_la_LIBADD = +am_sse_half_la_OBJECTS = sse_half_la-sse-half.lo +sse_half_la_OBJECTS = $(am_sse_half_la_OBJECTS) +sse_half_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(sse_half_la_CFLAGS) \ + $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ +sse2_float_la_LIBADD = +am_sse2_float_la_OBJECTS = sse2_float_la-sse2-float.lo +sse2_float_la_OBJECTS = $(am_sse2_float_la_OBJECTS) +sse2_float_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(sse2_float_la_CFLAGS) \ + $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ +sse2_int16_la_LIBADD = +am_sse2_int16_la_OBJECTS = sse2_int16_la-sse2-int16.lo +sse2_int16_la_OBJECTS = $(am_sse2_int16_la_OBJECTS) +sse2_int16_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(sse2_int16_la_CFLAGS) \ + $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ +sse2_int8_la_LIBADD = +am_sse2_int8_la_OBJECTS = sse2_int8_la-sse2-int8.lo +sse2_int8_la_OBJECTS = $(am_sse2_int8_la_OBJECTS) +sse2_int8_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(sse2_int8_la_CFLAGS) \ + $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ +sse4_int8_la_LIBADD = +am_sse4_int8_la_OBJECTS = sse4_int8_la-sse4-int8.lo +sse4_int8_la_OBJECTS = $(am_sse4_int8_la_OBJECTS) +sse4_int8_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(sse4_int8_la_CFLAGS) \ + $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ +two_table_la_LIBADD = +am_two_table_la_OBJECTS = two-table.lo +two_table_la_OBJECTS = $(am_two_table_la_OBJECTS) +ycbcr_la_LIBADD = +am_ycbcr_la_OBJECTS = ycbcr.lo +ycbcr_la_OBJECTS = $(am_ycbcr_la_OBJECTS) +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_@AM_V@) +am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) +am__v_CC_0 = @echo " CC " $@; +am__v_CC_1 = +CCLD = $(CC) +LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_@AM_V@) +am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) +am__v_CCLD_0 = @echo " CCLD " $@; +am__v_CCLD_1 = +SOURCES = $(CIE_la_SOURCES) $(HSL_la_SOURCES) $(HSV_la_SOURCES) \ + $(cairo_la_SOURCES) $(fast_float_la_SOURCES) \ + $(float_half_la_SOURCES) $(float_la_SOURCES) \ + $(gegl_fixups_la_SOURCES) $(gggl_lies_la_SOURCES) \ + $(gggl_table_lies_la_SOURCES) $(gggl_table_la_SOURCES) \ + $(gggl_la_SOURCES) $(gimp_8bit_la_SOURCES) $(grey_la_SOURCES) \ + $(naive_CMYK_la_SOURCES) $(simple_la_SOURCES) \ + $(sse_half_la_SOURCES) $(sse2_float_la_SOURCES) \ + $(sse2_int16_la_SOURCES) $(sse2_int8_la_SOURCES) \ + $(sse4_int8_la_SOURCES) $(two_table_la_SOURCES) \ + $(ycbcr_la_SOURCES) +DIST_SOURCES = $(CIE_la_SOURCES) $(HSL_la_SOURCES) $(HSV_la_SOURCES) \ + $(cairo_la_SOURCES) $(fast_float_la_SOURCES) \ + $(float_half_la_SOURCES) $(float_la_SOURCES) \ + $(gegl_fixups_la_SOURCES) $(gggl_lies_la_SOURCES) \ + $(gggl_table_lies_la_SOURCES) $(gggl_table_la_SOURCES) \ + $(gggl_la_SOURCES) $(gimp_8bit_la_SOURCES) $(grey_la_SOURCES) \ + $(naive_CMYK_la_SOURCES) $(simple_la_SOURCES) \ + $(sse_half_la_SOURCES) $(sse2_float_la_SOURCES) \ + $(sse2_int16_la_SOURCES) $(sse2_int8_la_SOURCES) \ + $(sse4_int8_la_SOURCES) $(two_table_la_SOURCES) \ + $(ycbcr_la_SOURCES) +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +HEADERS = $(noinst_HEADERS) +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +ETAGS = etags +CTAGS = ctags +am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALTIVEC_EXTRA_CFLAGS = @ALTIVEC_EXTRA_CFLAGS@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BABL_API_VERSION = @BABL_API_VERSION@ +BABL_BINARY_AGE = @BABL_BINARY_AGE@ +BABL_CURRENT_MINUS_AGE = @BABL_CURRENT_MINUS_AGE@ +BABL_INTERFACE_AGE = @BABL_INTERFACE_AGE@ +BABL_LIBRARY_VERSION = @BABL_LIBRARY_VERSION@ +BABL_MAJOR_VERSION = @BABL_MAJOR_VERSION@ +BABL_MICRO_VERSION = @BABL_MICRO_VERSION@ +BABL_MINOR_VERSION = @BABL_MINOR_VERSION@ +BABL_REAL_VERSION = @BABL_REAL_VERSION@ +BABL_RELEASE = @BABL_RELEASE@ +BABL_UNSTABLE = @BABL_UNSTABLE@ +BABL_VERSION = @BABL_VERSION@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DIR_SEP = @DIR_SEP@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F16C_EXTRA_CFLAGS = @F16C_EXTRA_CFLAGS@ +FGREP = @FGREP@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = $(top_builddir)/babl/libbabl-@BABL_API_VERSION@.la $(MATH_LIB) \ + $(THREAD_LIB) + +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MATH_LIB = @MATH_LIB@ +MKDIR_P = @MKDIR_P@ +MMX_EXTRA_CFLAGS = @MMX_EXTRA_CFLAGS@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEP = @PATH_SEP@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +RANLIB = @RANLIB@ +RSVG = @RSVG@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHREXT = @SHREXT@ +SSE2_EXTRA_CFLAGS = @SSE2_EXTRA_CFLAGS@ +SSE4_1_EXTRA_CFLAGS = @SSE4_1_EXTRA_CFLAGS@ +SSE_EXTRA_CFLAGS = @SSE_EXTRA_CFLAGS@ +STRIP = @STRIP@ +THREAD_LIB = @THREAD_LIB@ +VERSION = @VERSION@ +W3M = @W3M@ +WEBSITE_HOST = @WEBSITE_HOST@ +WEBSITE_LOCATION = @WEBSITE_LOCATION@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +@PLATFORM_WIN32_FALSE@AM_LDFLAGS = -module -avoid-version +@PLATFORM_WIN32_TRUE@AM_LDFLAGS = -module -avoid-version -no-undefined +noinst_HEADERS = util.h +AM_CPPFLAGS = \ + -I$(top_builddir) \ + -I$(top_srcdir) \ + -I$(top_srcdir)/babl \ + -I$(top_srcdir)/extensions + +extdir = $(libdir)/babl-@BABL_API_VERSION@ +ext_LTLIBRARIES = \ + cairo.la \ + CIE.la \ + float-half.la \ + gegl-fixups.la \ + gggl-lies.la \ + gggl-table.la \ + gggl-table-lies.la \ + gggl.la \ + gimp-8bit.la \ + grey.la \ + float.la \ + fast-float.la \ + naive-CMYK.la \ + HSL.la \ + HSV.la \ + simple.la \ + sse2-float.la \ + sse2-int8.la \ + sse2-int16.la \ + sse4-int8.la \ + sse-half.la \ + two-table.la \ + ycbcr.la + +cairo_la_SOURCES = cairo.c cairo-tables.h +CIE_la_SOURCES = CIE.c +simple_la_SOURCES = simple.c +float_half_la_SOURCES = float-half.c +gegl_fixups_la_SOURCES = gegl-fixups.c +gggl_lies_la_SOURCES = gggl-lies.c +gggl_table_lies_la_SOURCES = gggl-table-lies.c +gggl_table_la_SOURCES = gggl-table.c +gggl_la_SOURCES = gggl.c +gimp_8bit_la_SOURCES = gimp-8bit.c +grey_la_SOURCES = grey.c +naive_CMYK_la_SOURCES = naive-CMYK.c +HSL_la_SOURCES = HSL.c +HSV_la_SOURCES = HSV.c +sse2_float_la_SOURCES = sse2-float.c +sse2_int8_la_SOURCES = sse2-int8.c +sse2_int16_la_SOURCES = sse2-int16.c +sse4_int8_la_SOURCES = sse4-int8.c +sse_half_la_SOURCES = sse-half.c +two_table_la_SOURCES = two-table.c two-table-tables.h +ycbcr_la_SOURCES = ycbcr.c +float_la_SOURCES = float.c +fast_float_la_SOURCES = fast-float.c +sse2_float_la_CFLAGS = $(SSE2_EXTRA_CFLAGS) +sse2_int8_la_CFLAGS = $(SSE2_EXTRA_CFLAGS) +sse2_int16_la_CFLAGS = $(SSE2_EXTRA_CFLAGS) +sse4_int8_la_CFLAGS = $(SSE4_1_EXTRA_CFLAGS) +sse_half_la_CFLAGS = $(SSE4_1_EXTRA_CFLAGS) $(F16C_EXTRA_CFLAGS) +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign extensions/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign extensions/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +install-extLTLIBRARIES: $(ext_LTLIBRARIES) + @$(NORMAL_INSTALL) + @list='$(ext_LTLIBRARIES)'; test -n "$(extdir)" || list=; \ + list2=; for p in $$list; do \ + if test -f $$p; then \ + list2="$$list2 $$p"; \ + else :; fi; \ + done; \ + test -z "$$list2" || { \ + echo " $(MKDIR_P) '$(DESTDIR)$(extdir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(extdir)" || exit 1; \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(extdir)'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(extdir)"; \ + } + +uninstall-extLTLIBRARIES: + @$(NORMAL_UNINSTALL) + @list='$(ext_LTLIBRARIES)'; test -n "$(extdir)" || list=; \ + for p in $$list; do \ + $(am__strip_dir) \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(extdir)/$$f'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(extdir)/$$f"; \ + done + +clean-extLTLIBRARIES: + -test -z "$(ext_LTLIBRARIES)" || rm -f $(ext_LTLIBRARIES) + @list='$(ext_LTLIBRARIES)'; \ + locs=`for p in $$list; do echo $$p; done | \ + sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ + sort -u`; \ + test -z "$$locs" || { \ + echo rm -f $${locs}; \ + rm -f $${locs}; \ + } + +CIE.la: $(CIE_la_OBJECTS) $(CIE_la_DEPENDENCIES) $(EXTRA_CIE_la_DEPENDENCIES) + $(AM_V_CCLD)$(LINK) -rpath $(extdir) $(CIE_la_OBJECTS) $(CIE_la_LIBADD) $(LIBS) + +HSL.la: $(HSL_la_OBJECTS) $(HSL_la_DEPENDENCIES) $(EXTRA_HSL_la_DEPENDENCIES) + $(AM_V_CCLD)$(LINK) -rpath $(extdir) $(HSL_la_OBJECTS) $(HSL_la_LIBADD) $(LIBS) + +HSV.la: $(HSV_la_OBJECTS) $(HSV_la_DEPENDENCIES) $(EXTRA_HSV_la_DEPENDENCIES) + $(AM_V_CCLD)$(LINK) -rpath $(extdir) $(HSV_la_OBJECTS) $(HSV_la_LIBADD) $(LIBS) + +cairo.la: $(cairo_la_OBJECTS) $(cairo_la_DEPENDENCIES) $(EXTRA_cairo_la_DEPENDENCIES) + $(AM_V_CCLD)$(LINK) -rpath $(extdir) $(cairo_la_OBJECTS) $(cairo_la_LIBADD) $(LIBS) + +fast-float.la: $(fast_float_la_OBJECTS) $(fast_float_la_DEPENDENCIES) $(EXTRA_fast_float_la_DEPENDENCIES) + $(AM_V_CCLD)$(LINK) -rpath $(extdir) $(fast_float_la_OBJECTS) $(fast_float_la_LIBADD) $(LIBS) + +float-half.la: $(float_half_la_OBJECTS) $(float_half_la_DEPENDENCIES) $(EXTRA_float_half_la_DEPENDENCIES) + $(AM_V_CCLD)$(LINK) -rpath $(extdir) $(float_half_la_OBJECTS) $(float_half_la_LIBADD) $(LIBS) + +float.la: $(float_la_OBJECTS) $(float_la_DEPENDENCIES) $(EXTRA_float_la_DEPENDENCIES) + $(AM_V_CCLD)$(LINK) -rpath $(extdir) $(float_la_OBJECTS) $(float_la_LIBADD) $(LIBS) + +gegl-fixups.la: $(gegl_fixups_la_OBJECTS) $(gegl_fixups_la_DEPENDENCIES) $(EXTRA_gegl_fixups_la_DEPENDENCIES) + $(AM_V_CCLD)$(LINK) -rpath $(extdir) $(gegl_fixups_la_OBJECTS) $(gegl_fixups_la_LIBADD) $(LIBS) + +gggl-lies.la: $(gggl_lies_la_OBJECTS) $(gggl_lies_la_DEPENDENCIES) $(EXTRA_gggl_lies_la_DEPENDENCIES) + $(AM_V_CCLD)$(LINK) -rpath $(extdir) $(gggl_lies_la_OBJECTS) $(gggl_lies_la_LIBADD) $(LIBS) + +gggl-table-lies.la: $(gggl_table_lies_la_OBJECTS) $(gggl_table_lies_la_DEPENDENCIES) $(EXTRA_gggl_table_lies_la_DEPENDENCIES) + $(AM_V_CCLD)$(LINK) -rpath $(extdir) $(gggl_table_lies_la_OBJECTS) $(gggl_table_lies_la_LIBADD) $(LIBS) + +gggl-table.la: $(gggl_table_la_OBJECTS) $(gggl_table_la_DEPENDENCIES) $(EXTRA_gggl_table_la_DEPENDENCIES) + $(AM_V_CCLD)$(LINK) -rpath $(extdir) $(gggl_table_la_OBJECTS) $(gggl_table_la_LIBADD) $(LIBS) + +gggl.la: $(gggl_la_OBJECTS) $(gggl_la_DEPENDENCIES) $(EXTRA_gggl_la_DEPENDENCIES) + $(AM_V_CCLD)$(LINK) -rpath $(extdir) $(gggl_la_OBJECTS) $(gggl_la_LIBADD) $(LIBS) + +gimp-8bit.la: $(gimp_8bit_la_OBJECTS) $(gimp_8bit_la_DEPENDENCIES) $(EXTRA_gimp_8bit_la_DEPENDENCIES) + $(AM_V_CCLD)$(LINK) -rpath $(extdir) $(gimp_8bit_la_OBJECTS) $(gimp_8bit_la_LIBADD) $(LIBS) + +grey.la: $(grey_la_OBJECTS) $(grey_la_DEPENDENCIES) $(EXTRA_grey_la_DEPENDENCIES) + $(AM_V_CCLD)$(LINK) -rpath $(extdir) $(grey_la_OBJECTS) $(grey_la_LIBADD) $(LIBS) + +naive-CMYK.la: $(naive_CMYK_la_OBJECTS) $(naive_CMYK_la_DEPENDENCIES) $(EXTRA_naive_CMYK_la_DEPENDENCIES) + $(AM_V_CCLD)$(LINK) -rpath $(extdir) $(naive_CMYK_la_OBJECTS) $(naive_CMYK_la_LIBADD) $(LIBS) + +simple.la: $(simple_la_OBJECTS) $(simple_la_DEPENDENCIES) $(EXTRA_simple_la_DEPENDENCIES) + $(AM_V_CCLD)$(LINK) -rpath $(extdir) $(simple_la_OBJECTS) $(simple_la_LIBADD) $(LIBS) + +sse-half.la: $(sse_half_la_OBJECTS) $(sse_half_la_DEPENDENCIES) $(EXTRA_sse_half_la_DEPENDENCIES) + $(AM_V_CCLD)$(sse_half_la_LINK) -rpath $(extdir) $(sse_half_la_OBJECTS) $(sse_half_la_LIBADD) $(LIBS) + +sse2-float.la: $(sse2_float_la_OBJECTS) $(sse2_float_la_DEPENDENCIES) $(EXTRA_sse2_float_la_DEPENDENCIES) + $(AM_V_CCLD)$(sse2_float_la_LINK) -rpath $(extdir) $(sse2_float_la_OBJECTS) $(sse2_float_la_LIBADD) $(LIBS) + +sse2-int16.la: $(sse2_int16_la_OBJECTS) $(sse2_int16_la_DEPENDENCIES) $(EXTRA_sse2_int16_la_DEPENDENCIES) + $(AM_V_CCLD)$(sse2_int16_la_LINK) -rpath $(extdir) $(sse2_int16_la_OBJECTS) $(sse2_int16_la_LIBADD) $(LIBS) + +sse2-int8.la: $(sse2_int8_la_OBJECTS) $(sse2_int8_la_DEPENDENCIES) $(EXTRA_sse2_int8_la_DEPENDENCIES) + $(AM_V_CCLD)$(sse2_int8_la_LINK) -rpath $(extdir) $(sse2_int8_la_OBJECTS) $(sse2_int8_la_LIBADD) $(LIBS) + +sse4-int8.la: $(sse4_int8_la_OBJECTS) $(sse4_int8_la_DEPENDENCIES) $(EXTRA_sse4_int8_la_DEPENDENCIES) + $(AM_V_CCLD)$(sse4_int8_la_LINK) -rpath $(extdir) $(sse4_int8_la_OBJECTS) $(sse4_int8_la_LIBADD) $(LIBS) + +two-table.la: $(two_table_la_OBJECTS) $(two_table_la_DEPENDENCIES) $(EXTRA_two_table_la_DEPENDENCIES) + $(AM_V_CCLD)$(LINK) -rpath $(extdir) $(two_table_la_OBJECTS) $(two_table_la_LIBADD) $(LIBS) + +ycbcr.la: $(ycbcr_la_OBJECTS) $(ycbcr_la_DEPENDENCIES) $(EXTRA_ycbcr_la_DEPENDENCIES) + $(AM_V_CCLD)$(LINK) -rpath $(extdir) $(ycbcr_la_OBJECTS) $(ycbcr_la_LIBADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CIE.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/HSL.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/HSV.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cairo.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fast-float.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/float-half.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/float.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gegl-fixups.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gggl-lies.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gggl-table-lies.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gggl-table.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gggl.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gimp-8bit.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/grey.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/naive-CMYK.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/simple.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sse2_float_la-sse2-float.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sse2_int16_la-sse2-int16.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sse2_int8_la-sse2-int8.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sse4_int8_la-sse4-int8.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sse_half_la-sse-half.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/two-table.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ycbcr.Plo@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< + +.c.obj: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< + +sse_half_la-sse-half.lo: sse-half.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) $(sse_half_la_CFLAGS) $(CFLAGS) -MT sse_half_la-sse-half.lo -MD -MP -MF $(DEPDIR)/sse_half_la-sse-half.Tpo -c -o sse_half_la-sse-half.lo `test -f 'sse-half.c' || echo '$(srcdir)/'`sse-half.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/sse_half_la-sse-half.Tpo $(DEPDIR)/sse_half_la-sse-half.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='sse-half.c' object='sse_half_la-sse-half.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sse_half_la_CFLAGS) $(CFLAGS) -c -o sse_half_la-sse-half.lo `test -f 'sse-half.c' || echo '$(srcdir)/'`sse-half.c + +sse2_float_la-sse2-float.lo: sse2-float.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) $(sse2_float_la_CFLAGS) $(CFLAGS) -MT sse2_float_la-sse2-float.lo -MD -MP -MF $(DEPDIR)/sse2_float_la-sse2-float.Tpo -c -o sse2_float_la-sse2-float.lo `test -f 'sse2-float.c' || echo '$(srcdir)/'`sse2-float.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/sse2_float_la-sse2-float.Tpo $(DEPDIR)/sse2_float_la-sse2-float.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='sse2-float.c' object='sse2_float_la-sse2-float.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sse2_float_la_CFLAGS) $(CFLAGS) -c -o sse2_float_la-sse2-float.lo `test -f 'sse2-float.c' || echo '$(srcdir)/'`sse2-float.c + +sse2_int16_la-sse2-int16.lo: sse2-int16.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) $(sse2_int16_la_CFLAGS) $(CFLAGS) -MT sse2_int16_la-sse2-int16.lo -MD -MP -MF $(DEPDIR)/sse2_int16_la-sse2-int16.Tpo -c -o sse2_int16_la-sse2-int16.lo `test -f 'sse2-int16.c' || echo '$(srcdir)/'`sse2-int16.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/sse2_int16_la-sse2-int16.Tpo $(DEPDIR)/sse2_int16_la-sse2-int16.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='sse2-int16.c' object='sse2_int16_la-sse2-int16.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sse2_int16_la_CFLAGS) $(CFLAGS) -c -o sse2_int16_la-sse2-int16.lo `test -f 'sse2-int16.c' || echo '$(srcdir)/'`sse2-int16.c + +sse2_int8_la-sse2-int8.lo: sse2-int8.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) $(sse2_int8_la_CFLAGS) $(CFLAGS) -MT sse2_int8_la-sse2-int8.lo -MD -MP -MF $(DEPDIR)/sse2_int8_la-sse2-int8.Tpo -c -o sse2_int8_la-sse2-int8.lo `test -f 'sse2-int8.c' || echo '$(srcdir)/'`sse2-int8.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/sse2_int8_la-sse2-int8.Tpo $(DEPDIR)/sse2_int8_la-sse2-int8.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='sse2-int8.c' object='sse2_int8_la-sse2-int8.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sse2_int8_la_CFLAGS) $(CFLAGS) -c -o sse2_int8_la-sse2-int8.lo `test -f 'sse2-int8.c' || echo '$(srcdir)/'`sse2-int8.c + +sse4_int8_la-sse4-int8.lo: sse4-int8.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) $(sse4_int8_la_CFLAGS) $(CFLAGS) -MT sse4_int8_la-sse4-int8.lo -MD -MP -MF $(DEPDIR)/sse4_int8_la-sse4-int8.Tpo -c -o sse4_int8_la-sse4-int8.lo `test -f 'sse4-int8.c' || echo '$(srcdir)/'`sse4-int8.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/sse4_int8_la-sse4-int8.Tpo $(DEPDIR)/sse4_int8_la-sse4-int8.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='sse4-int8.c' object='sse4_int8_la-sse4-int8.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sse4_int8_la_CFLAGS) $(CFLAGS) -c -o sse4_int8_la-sse4-int8.lo `test -f 'sse4-int8.c' || echo '$(srcdir)/'`sse4-int8.c + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-am +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ + here=`pwd`; \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: ctags-am + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscopelist: cscopelist-am + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(LTLIBRARIES) $(HEADERS) +installdirs: + for dir in "$(DESTDIR)$(extdir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-extLTLIBRARIES clean-generic clean-libtool \ + mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-extLTLIBRARIES + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-extLTLIBRARIES + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean \ + clean-extLTLIBRARIES clean-generic clean-libtool cscopelist-am \ + ctags ctags-am distclean distclean-compile distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-extLTLIBRARIES install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ + pdf pdf-am ps ps-am tags tags-am uninstall uninstall-am \ + uninstall-extLTLIBRARIES + +.PRECIOUS: Makefile + + +# 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. +.NOEXPORT: diff --git a/extensions/cairo-tables.h b/extensions/cairo-tables.h new file mode 100644 index 0000000..d814b73 --- /dev/null +++ b/extensions/cairo-tables.h @@ -0,0 +1,5027 @@ +/* Gamma table generated from a babl conversion of Y to Y' */ +static const unsigned short linear_to_gamma16[65536] = +{ +0,13,26,39,52,65,78,90,103,116,129,142,155,168,181,194,207,220,233,245,258,271, +284,297,310,323,336,349,362,375,388,401,413,426,439,452,465,478,491,504,517,530, +543,556,568,581,594,607,620,633,646,659,672,685,698,711,724,736,749,762,775,788, +801,814,827,840,853,866,879,891,904,917,930,943,956,969,982,995,1008,1021,1034, +1047,1059,1072,1085,1098,1111,1124,1137,1150,1163,1176,1189,1202,1214,1227,1240, +1253,1266,1279,1292,1305,1318,1331,1344,1357,1370,1382,1395,1408,1421,1434,1447, +1460,1473,1486,1499,1512,1525,1537,1550,1563,1576,1589,1602,1615,1628,1641,1654, +1667,1680,1693,1705,1718,1731,1744,1757,1770,1783,1796,1809,1822,1835,1848,1860, +1873,1886,1899,1912,1925,1938,1951,1964,1977,1990,2003,2016,2028,2041,2054,2067, +2080,2093,2106,2119,2132,2145,2158,2171,2183,2196,2209,2222,2235,2248,2261,2274, +2287,2300,2313,2326,2339,2351,2364,2377,2390,2403,2416,2429,2442,2455,2468,2481, +2494,2506,2519,2532,2545,2558,2571,2584,2597,2610,2623,2636,2649,2661,2674,2687, +2699,2712,2724,2737,2749,2762,2774,2786,2799,2811,2823,2835,2848,2860,2872,2884, +2896,2908,2920,2932,2944,2956,2968,2979,2991,3003,3015,3027,3038,3050,3062,3073, +3085,3096,3108,3119,3131,3142,3154,3165,3176,3188,3199,3210,3222,3233,3244,3255, +3266,3277,3288,3300,3311,3322,3333,3344,3355,3366,3376,3387,3398,3409,3420,3431, +3441,3452,3463,3474,3484,3495,3505,3516,3527,3537,3548,3558,3569,3579,3590,3600, +3611,3621,3631,3642,3652,3662,3673,3683,3693,3703,3714,3724,3734,3744,3754,3764, +3774,3784,3795,3805,3815,3825,3835,3844,3854,3864,3874,3884,3894,3904,3914,3923, +3933,3943,3953,3963,3972,3982,3992,4001,4011,4021,4030,4040,4049,4059,4069,4078, +4088,4097,4107,4116,4126,4135,4144,4154,4163,4173,4182,4191,4201,4210,4219,4228, +4238,4247,4256,4265,4275,4284,4293,4302,4311,4320,4330,4339,4348,4357,4366,4375, +4384,4393,4402,4411,4420,4429,4438,4447,4456,4465,4473,4482,4491,4500,4509,4518, +4526,4535,4544,4553,4562,4570,4579,4588,4596,4605,4614,4622,4631,4640,4648,4657, +4666,4674,4683,4691,4700,4708,4717,4725,4734,4742,4751,4759,4768,4776,4785,4793, +4801,4810,4818,4827,4835,4843,4852,4860,4868,4877,4885,4893,4901,4910,4918,4926, +4934,4943,4951,4959,4967,4975,4984,4992,5000,5008,5016,5024,5032,5040,5048,5056, +5064,5073,5081,5089,5097,5105,5113,5121,5129,5136,5144,5152,5160,5168,5176,5184, +5192,5200,5208,5215,5223,5231,5239,5247,5255,5262,5270,5278,5286,5294,5301,5309, +5317,5324,5332,5340,5348,5355,5363,5371,5378,5386,5394,5401,5409,5416,5424,5432, +5439,5447,5454,5462,5469,5477,5485,5492,5500,5507,5515,5522,5530,5537,5545,5552, +5559,5567,5574,5582,5589,5597,5604,5611,5619,5626,5633,5641,5648,5655,5663,5670, +5677,5685,5692,5699,5707,5714,5721,5728,5736,5743,5750,5757,5765,5772,5779,5786, +5793,5801,5808,5815,5822,5829,5836,5843,5851,5858,5865,5872,5879,5886,5893,5900, +5907,5914,5921,5929,5936,5943,5950,5957,5964,5971,5978,5985,5992,5999,6006,6013, +6019,6026,6033,6040,6047,6054,6061,6068,6075,6082,6089,6096,6102,6109,6116,6123, +6130,6137,6143,6150,6157,6164,6171,6178,6184,6191,6198,6205,6211,6218,6225,6232, +6238,6245,6252,6259,6265,6272,6279,6285,6292,6299,6305,6312,6319,6325,6332,6339, +6345,6352,6359,6365,6372,6378,6385,6392,6398,6405,6411,6418,6424,6431,6438,6444, +6451,6457,6464,6470,6477,6483,6490,6496,6503,6509,6516,6522,6529,6535,6542,6548, +6554,6561,6567,6574,6580,6587,6593,6599,6606,6612,6619,6625,6631,6638,6644,6650, +6657,6663,6670,6676,6682,6689,6695,6701,6708,6714,6720,6726,6733,6739,6745,6752, +6758,6764,6770,6777,6783,6789,6795,6802,6808,6814,6820,6826,6833,6839,6845,6851, +6857,6864,6870,6876,6882,6888,6894,6901,6907,6913,6919,6925,6931,6937,6943,6950, +6956,6962,6968,6974,6980,6986,6992,6998,7004,7010,7016,7023,7029,7035,7041,7047, +7053,7059,7065,7071,7077,7083,7089,7095,7101,7107,7113,7119,7125,7131,7137,7143, +7148,7154,7160,7166,7172,7178,7184,7190,7196,7202,7208,7214,7220,7225,7231,7237, +7243,7249,7255,7261,7267,7272,7278,7284,7290,7296,7302,7307,7313,7319,7325,7331, +7337,7342,7348,7354,7360,7366,7371,7377,7383,7389,7394,7400,7406,7412,7417,7423, +7429,7435,7440,7446,7452,7458,7463,7469,7475,7480,7486,7492,7498,7503,7509,7515, +7520,7526,7532,7537,7543,7549,7554,7560,7566,7571,7577,7582,7588,7594,7599,7605, +7611,7616,7622,7627,7633,7639,7644,7650,7655,7661,7666,7672,7678,7683,7689,7694, +7700,7705,7711,7716,7722,7727,7733,7739,7744,7750,7755,7761,7766,7772,7777,7783, +7788,7794,7799,7805,7810,7815,7821,7826,7832,7837,7843,7848,7854,7859,7865,7870, +7875,7881,7886,7892,7897,7902,7908,7913,7919,7924,7930,7935,7940,7946,7951,7956, +7962,7967,7973,7978,7983,7989,7994,7999,8005,8010,8015,8021,8026,8031,8037,8042, +8047,8053,8058,8063,8069,8074,8079,8084,8090,8095,8100,8106,8111,8116,8121,8127, +8132,8137,8142,8148,8153,8158,8164,8169,8174,8179,8184,8190,8195,8200,8205,8211, +8216,8221,8226,8231,8237,8242,8247,8252,8257,8263,8268,8273,8278,8283,8288,8294, +8299,8304,8309,8314,8319,8325,8330,8335,8340,8345,8350,8355,8360,8366,8371,8376, +8381,8386,8391,8396,8401,8406,8412,8417,8422,8427,8432,8437,8442,8447,8452,8457, +8462,8467,8472,8478,8483,8488,8493,8498,8503,8508,8513,8518,8523,8528,8533,8538, +8543,8548,8553,8558,8563,8568,8573,8578,8583,8588,8593,8598,8603,8608,8613,8618, +8623,8628,8633,8638,8643,8648,8653,8658,8663,8667,8672,8677,8682,8687,8692,8697, +8702,8707,8712,8717,8722,8727,8732,8736,8741,8746,8751,8756,8761,8766,8771,8776, +8780,8785,8790,8795,8800,8805,8810,8815,8819,8824,8829,8834,8839,8844,8849,8853, +8858,8863,8868,8873,8878,8882,8887,8892,8897,8902,8907,8911,8916,8921,8926,8931, +8935,8940,8945,8950,8955,8959,8964,8969,8974,8978,8983,8988,8993,8998,9002,9007, +9012,9017,9021,9026,9031,9036,9040,9045,9050,9055,9059,9064,9069,9073,9078,9083, +9088,9092,9097,9102,9106,9111,9116,9121,9125,9130,9135,9139,9144,9149,9153,9158, +9163,9167,9172,9177,9181,9186,9191,9195,9200,9205,9209,9214,9219,9223,9228,9233, +9237,9242,9247,9251,9256,9260,9265,9270,9274,9279,9284,9288,9293,9297,9302,9307, +9311,9316,9320,9325,9330,9334,9339,9343,9348,9353,9357,9362,9366,9371,9376,9380, +9385,9389,9394,9398,9403,9407,9412,9417,9421,9426,9430,9435,9439,9444,9448,9453, +9457,9462,9466,9471,9476,9480,9485,9489,9494,9498,9503,9507,9512,9516,9521,9525, +9530,9534,9539,9543,9548,9552,9557,9561,9566,9570,9575,9579,9583,9588,9592,9597, +9601,9606,9610,9615,9619,9624,9628,9633,9637,9641,9646,9650,9655,9659,9664,9668, +9672,9677,9681,9686,9690,9695,9699,9703,9708,9712,9717,9721,9725,9730,9734,9739, +9743,9747,9752,9756,9761,9765,9769,9774,9778,9783,9787,9791,9796,9800,9804,9809, +9813,9818,9822,9826,9831,9835,9839,9844,9848,9852,9857,9861,9865,9870,9874,9878, +9883,9887,9891,9896,9900,9904,9909,9913,9917,9922,9926,9930,9935,9939,9943,9947, +9952,9956,9960,9965,9969,9973,9978,9982,9986,9990,9995,9999,10003,10008,10012, +10016,10020,10025,10029,10033,10037,10042,10046,10050,10055,10059,10063,10067, +10072,10076,10080,10084,10088,10093,10097,10101,10105,10110,10114,10118,10122, +10127,10131,10135,10139,10143,10148,10152,10156,10160,10165,10169,10173,10177, +10181,10186,10190,10194,10198,10202,10207,10211,10215,10219,10223,10227,10232, +10236,10240,10244,10248,10253,10257,10261,10265,10269,10273,10278,10282,10286, +10290,10294,10298,10302,10307,10311,10315,10319,10323,10327,10332,10336,10340, +10344,10348,10352,10356,10360,10365,10369,10373,10377,10381,10385,10389,10393, +10398,10402,10406,10410,10414,10418,10422,10426,10430,10434,10439,10443,10447, +10451,10455,10459,10463,10467,10471,10475,10479,10483,10488,10492,10496,10500, +10504,10508,10512,10516,10520,10524,10528,10532,10536,10540,10544,10548,10553, +10557,10561,10565,10569,10573,10577,10581,10585,10589,10593,10597,10601,10605, +10609,10613,10617,10621,10625,10629,10633,10637,10641,10645,10649,10653,10657, +10661,10665,10669,10673,10677,10681,10685,10689,10693,10697,10701,10705,10709, +10713,10717,10721,10725,10729,10733,10737,10741,10745,10749,10753,10757,10761, +10765,10769,10773,10777,10781,10785,10789,10793,10797,10800,10804,10808,10812, +10816,10820,10824,10828,10832,10836,10840,10844,10848,10852,10856,10860,10864, +10867,10871,10875,10879,10883,10887,10891,10895,10899,10903,10907,10911,10914, +10918,10922,10926,10930,10934,10938,10942,10946,10950,10953,10957,10961,10965, +10969,10973,10977,10981,10985,10988,10992,10996,11000,11004,11008,11012,11016, +11019,11023,11027,11031,11035,11039,11043,11046,11050,11054,11058,11062,11066, +11070,11073,11077,11081,11085,11089,11093,11097,11100,11104,11108,11112,11116, +11120,11123,11127,11131,11135,11139,11143,11146,11150,11154,11158,11162,11165, +11169,11173,11177,11181,11184,11188,11192,11196,11200,11204,11207,11211,11215, +11219,11223,11226,11230,11234,11238,11241,11245,11249,11253,11257,11260,11264, +11268,11272,11276,11279,11283,11287,11291,11294,11298,11302,11306,11309,11313, +11317,11321,11324,11328,11332,11336,11339,11343,11347,11351,11354,11358,11362, +11366,11369,11373,11377,11381,11384,11388,11392,11396,11399,11403,11407,11411, +11414,11418,11422,11425,11429,11433,11437,11440,11444,11448,11452,11455,11459, +11463,11466,11470,11474,11477,11481,11485,11489,11492,11496,11500,11503,11507, +11511,11514,11518,11522,11526,11529,11533,11537,11540,11544,11548,11551,11555, +11559,11562,11566,11570,11573,11577,11581,11584,11588,11592,11595,11599,11603, +11606,11610,11614,11617,11621,11625,11628,11632,11636,11639,11643,11647,11650, +11654,11658,11661,11665,11668,11672,11676,11679,11683,11687,11690,11694,11698, +11701,11705,11708,11712,11716,11719,11723,11727,11730,11734,11737,11741,11745, +11748,11752,11755,11759,11763,11766,11770,11774,11777,11781,11784,11788,11792, +11795,11799,11802,11806,11810,11813,11817,11820,11824,11827,11831,11835,11838, +11842,11845,11849,11853,11856,11860,11863,11867,11870,11874,11878,11881,11885, +11888,11892,11895,11899,11903,11906,11910,11913,11917,11920,11924,11927,11931, +11935,11938,11942,11945,11949,11952,11956,11959,11963,11967,11970,11974,11977, +11981,11984,11988,11991,11995,11998,12002,12005,12009,12012,12016,12020,12023, +12027,12030,12034,12037,12041,12044,12048,12051,12055,12058,12062,12065,12069, +12072,12076,12079,12083,12086,12090,12093,12097,12100,12104,12107,12111,12114, +12118,12121,12125,12128,12132,12135,12139,12142,12146,12149,12153,12156,12160, +12163,12167,12170,12174,12177,12181,12184,12188,12191,12195,12198,12201,12205, +12208,12212,12215,12219,12222,12226,12229,12233,12236,12240,12243,12246,12250, +12253,12257,12260,12264,12267,12271,12274,12278,12281,12284,12288,12291,12295, +12298,12302,12305,12309,12312,12315,12319,12322,12326,12329,12333,12336,12339, +12343,12346,12350,12353,12357,12360,12363,12367,12370,12374,12377,12380,12384, +12387,12391,12394,12398,12401,12404,12408,12411,12415,12418,12421,12425,12428, +12432,12435,12438,12442,12445,12449,12452,12455,12459,12462,12466,12469,12472, +12476,12479,12482,12486,12489,12493,12496,12499,12503,12506,12510,12513,12516, +12520,12523,12526,12530,12533,12537,12540,12543,12547,12550,12553,12557,12560, +12563,12567,12570,12574,12577,12580,12584,12587,12590,12594,12597,12600,12604, +12607,12610,12614,12617,12620,12624,12627,12630,12634,12637,12640,12644,12647, +12651,12654,12657,12661,12664,12667,12671,12674,12677,12680,12684,12687,12690, +12694,12697,12700,12704,12707,12710,12714,12717,12720,12724,12727,12730,12734, +12737,12740,12744,12747,12750,12753,12757,12760,12763,12767,12770,12773,12777, +12780,12783,12787,12790,12793,12796,12800,12803,12806,12810,12813,12816,12819, +12823,12826,12829,12833,12836,12839,12842,12846,12849,12852,12856,12859,12862, +12865,12869,12872,12875,12878,12882,12885,12888,12892,12895,12898,12901,12905, +12908,12911,12914,12918,12921,12924,12927,12931,12934,12937,12940,12944,12947, +12950,12953,12957,12960,12963,12966,12970,12973,12976,12979,12983,12986,12989, +12992,12996,12999,13002,13005,13009,13012,13015,13018,13022,13025,13028,13031, +13034,13038,13041,13044,13047,13051,13054,13057,13060,13064,13067,13070,13073, +13076,13080,13083,13086,13089,13092,13096,13099,13102,13105,13109,13112,13115, +13118,13121,13125,13128,13131,13134,13137,13141,13144,13147,13150,13153,13157, +13160,13163,13166,13169,13173,13176,13179,13182,13185,13188,13192,13195,13198, +13201,13204,13208,13211,13214,13217,13220,13224,13227,13230,13233,13236,13239, +13243,13246,13249,13252,13255,13258,13262,13265,13268,13271,13274,13277,13281, +13284,13287,13290,13293,13296,13300,13303,13306,13309,13312,13315,13318,13322, +13325,13328,13331,13334,13337,13341,13344,13347,13350,13353,13356,13359,13363, +13366,13369,13372,13375,13378,13381,13385,13388,13391,13394,13397,13400,13403, +13406,13410,13413,13416,13419,13422,13425,13428,13431,13435,13438,13441,13444, +13447,13450,13453,13456,13460,13463,13466,13469,13472,13475,13478,13481,13484, +13488,13491,13494,13497,13500,13503,13506,13509,13512,13516,13519,13522,13525, +13528,13531,13534,13537,13540,13543,13547,13550,13553,13556,13559,13562,13565, +13568,13571,13574,13577,13581,13584,13587,13590,13593,13596,13599,13602,13605, +13608,13611,13614,13618,13621,13624,13627,13630,13633,13636,13639,13642,13645, +13648,13651,13654,13657,13661,13664,13667,13670,13673,13676,13679,13682,13685, +13688,13691,13694,13697,13700,13703,13706,13709,13713,13716,13719,13722,13725, +13728,13731,13734,13737,13740,13743,13746,13749,13752,13755,13758,13761,13764, +13767,13770,13773,13776,13780,13783,13786,13789,13792,13795,13798,13801,13804, +13807,13810,13813,13816,13819,13822,13825,13828,13831,13834,13837,13840,13843, +13846,13849,13852,13855,13858,13861,13864,13867,13870,13873,13876,13879,13882, +13885,13888,13891,13894,13897,13900,13903,13906,13909,13912,13915,13918,13921, +13924,13927,13930,13933,13936,13939,13942,13945,13948,13951,13954,13957,13960, +13963,13966,13969,13972,13975,13978,13981,13984,13987,13990,13993,13996,13999, +14002,14005,14008,14011,14014,14017,14020,14023,14026,14029,14032,14035,14038, +14041,14044,14047,14050,14053,14056,14059,14062,14065,14068,14071,14074,14077, +14080,14083,14086,14088,14091,14094,14097,14100,14103,14106,14109,14112,14115, +14118,14121,14124,14127,14130,14133,14136,14139,14142,14145,14148,14151,14154, +14156,14159,14162,14165,14168,14171,14174,14177,14180,14183,14186,14189,14192, +14195,14198,14201,14204,14206,14209,14212,14215,14218,14221,14224,14227,14230, +14233,14236,14239,14242,14245,14247,14250,14253,14256,14259,14262,14265,14268, +14271,14274,14277,14280,14283,14285,14288,14291,14294,14297,14300,14303,14306, +14309,14312,14315,14318,14320,14323,14326,14329,14332,14335,14338,14341,14344, +14347,14350,14352,14355,14358,14361,14364,14367,14370,14373,14376,14379,14381, +14384,14387,14390,14393,14396,14399,14402,14405,14407,14410,14413,14416,14419, +14422,14425,14428,14431,14433,14436,14439,14442,14445,14448,14451,14454,14456, +14459,14462,14465,14468,14471,14474,14477,14479,14482,14485,14488,14491,14494, +14497,14500,14502,14505,14508,14511,14514,14517,14520,14523,14525,14528,14531, +14534,14537,14540,14543,14545,14548,14551,14554,14557,14560,14563,14565,14568, +14571,14574,14577,14580,14583,14585,14588,14591,14594,14597,14600,14602,14605, +14608,14611,14614,14617,14620,14622,14625,14628,14631,14634,14637,14639,14642, +14645,14648,14651,14654,14656,14659,14662,14665,14668,14671,14673,14676,14679, +14682,14685,14688,14690,14693,14696,14699,14702,14705,14707,14710,14713,14716, +14719,14721,14724,14727,14730,14733,14736,14738,14741,14744,14747,14750,14752, +14755,14758,14761,14764,14767,14769,14772,14775,14778,14781,14783,14786,14789, +14792,14795,14797,14800,14803,14806,14809,14811,14814,14817,14820,14823,14825, +14828,14831,14834,14837,14839,14842,14845,14848,14851,14853,14856,14859,14862, +14865,14867,14870,14873,14876,14878,14881,14884,14887,14890,14892,14895,14898, +14901,14904,14906,14909,14912,14915,14917,14920,14923,14926,14929,14931,14934, +14937,14940,14942,14945,14948,14951,14954,14956,14959,14962,14965,14967,14970, +14973,14976,14978,14981,14984,14987,14990,14992,14995,14998,15001,15003,15006, +15009,15012,15014,15017,15020,15023,15025,15028,15031,15034,15036,15039,15042, +15045,15047,15050,15053,15056,15058,15061,15064,15067,15069,15072,15075,15078, +15080,15083,15086,15089,15091,15094,15097,15100,15102,15105,15108,15111,15113, +15116,15119,15122,15124,15127,15130,15132,15135,15138,15141,15143,15146,15149, +15152,15154,15157,15160,15163,15165,15168,15171,15173,15176,15179,15182,15184, +15187,15190,15192,15195,15198,15201,15203,15206,15209,15212,15214,15217,15220, +15222,15225,15228,15231,15233,15236,15239,15241,15244,15247,15250,15252,15255, +15258,15260,15263,15266,15269,15271,15274,15277,15279,15282,15285,15287,15290, +15293,15296,15298,15301,15304,15306,15309,15312,15314,15317,15320,15323,15325, +15328,15331,15333,15336,15339,15341,15344,15347,15349,15352,15355,15358,15360, +15363,15366,15368,15371,15374,15376,15379,15382,15384,15387,15390,15392,15395, +15398,15401,15403,15406,15409,15411,15414,15417,15419,15422,15425,15427,15430, +15433,15435,15438,15441,15443,15446,15449,15451,15454,15457,15459,15462,15465, +15467,15470,15473,15475,15478,15481,15483,15486,15489,15491,15494,15497,15499, +15502,15505,15507,15510,15513,15515,15518,15521,15523,15526,15529,15531,15534, +15537,15539,15542,15544,15547,15550,15552,15555,15558,15560,15563,15566,15568, +15571,15574,15576,15579,15582,15584,15587,15590,15592,15595,15597,15600,15603, +15605,15608,15611,15613,15616,15619,15621,15624,15626,15629,15632,15634,15637, +15640,15642,15645,15648,15650,15653,15655,15658,15661,15663,15666,15669,15671, +15674,15676,15679,15682,15684,15687,15690,15692,15695,15697,15700,15703,15705, +15708,15711,15713,15716,15718,15721,15724,15726,15729,15732,15734,15737,15739, +15742,15745,15747,15750,15752,15755,15758,15760,15763,15766,15768,15771,15773, +15776,15779,15781,15784,15786,15789,15792,15794,15797,15799,15802,15805,15807, +15810,15812,15815,15818,15820,15823,15825,15828,15831,15833,15836,15838,15841, +15844,15846,15849,15851,15854,15857,15859,15862,15864,15867,15870,15872,15875, +15877,15880,15882,15885,15888,15890,15893,15895,15898,15901,15903,15906,15908, +15911,15914,15916,15919,15921,15924,15926,15929,15932,15934,15937,15939,15942, +15944,15947,15950,15952,15955,15957,15960,15962,15965,15968,15970,15973,15975, +15978,15980,15983,15986,15988,15991,15993,15996,15998,16001,16004,16006,16009, +16011,16014,16016,16019,16022,16024,16027,16029,16032,16034,16037,16039,16042, +16045,16047,16050,16052,16055,16057,16060,16063,16065,16068,16070,16073,16075, +16078,16080,16083,16085,16088,16091,16093,16096,16098,16101,16103,16106,16108, +16111,16114,16116,16119,16121,16124,16126,16129,16131,16134,16136,16139,16141, +16144,16147,16149,16152,16154,16157,16159,16162,16164,16167,16169,16172,16174, +16177,16180,16182,16185,16187,16190,16192,16195,16197,16200,16202,16205,16207, +16210,16212,16215,16218,16220,16223,16225,16228,16230,16233,16235,16238,16240, +16243,16245,16248,16250,16253,16255,16258,16260,16263,16265,16268,16270,16273, +16276,16278,16281,16283,16286,16288,16291,16293,16296,16298,16301,16303,16306, +16308,16311,16313,16316,16318,16321,16323,16326,16328,16331,16333,16336,16338, +16341,16343,16346,16348,16351,16353,16356,16358,16361,16363,16366,16368,16371, +16373,16376,16378,16381,16383,16386,16388,16391,16393,16396,16398,16401,16403, +16406,16408,16411,16413,16416,16418,16421,16423,16426,16428,16431,16433,16436, +16438,16441,16443,16446,16448,16451,16453,16456,16458,16461,16463,16466,16468, +16471,16473,16475,16478,16480,16483,16485,16488,16490,16493,16495,16498,16500, +16503,16505,16508,16510,16513,16515,16518,16520,16523,16525,16527,16530,16532, +16535,16537,16540,16542,16545,16547,16550,16552,16555,16557,16560,16562,16565, +16567,16569,16572,16574,16577,16579,16582,16584,16587,16589,16592,16594,16597, +16599,16601,16604,16606,16609,16611,16614,16616,16619,16621,16624,16626,16629, +16631,16633,16636,16638,16641,16643,16646,16648,16651,16653,16656,16658,16660, +16663,16665,16668,16670,16673,16675,16678,16680,16682,16685,16687,16690,16692, +16695,16697,16700,16702,16704,16707,16709,16712,16714,16717,16719,16722,16724, +16726,16729,16731,16734,16736,16739,16741,16743,16746,16748,16751,16753,16756, +16758,16761,16763,16765,16768,16770,16773,16775,16778,16780,16782,16785,16787, +16790,16792,16795,16797,16799,16802,16804,16807,16809,16812,16814,16816,16819, +16821,16824,16826,16829,16831,16833,16836,16838,16841,16843,16845,16848,16850, +16853,16855,16858,16860,16862,16865,16867,16870,16872,16874,16877,16879,16882, +16884,16887,16889,16891,16894,16896,16899,16901,16903,16906,16908,16911,16913, +16915,16918,16920,16923,16925,16927,16930,16932,16935,16937,16940,16942,16944, +16947,16949,16952,16954,16956,16959,16961,16964,16966,16968,16971,16973,16976, +16978,16980,16983,16985,16988,16990,16992,16995,16997,16999,17002,17004,17007, +17009,17011,17014,17016,17019,17021,17023,17026,17028,17031,17033,17035,17038, +17040,17043,17045,17047,17050,17052,17054,17057,17059,17062,17064,17066,17069, +17071,17074,17076,17078,17081,17083,17085,17088,17090,17093,17095,17097,17100, +17102,17104,17107,17109,17112,17114,17116,17119,17121,17123,17126,17128,17131, +17133,17135,17138,17140,17142,17145,17147,17150,17152,17154,17157,17159,17161, +17164,17166,17168,17171,17173,17176,17178,17180,17183,17185,17187,17190,17192, +17194,17197,17199,17202,17204,17206,17209,17211,17213,17216,17218,17220,17223, +17225,17228,17230,17232,17235,17237,17239,17242,17244,17246,17249,17251,17253, +17256,17258,17260,17263,17265,17268,17270,17272,17275,17277,17279,17282,17284, +17286,17289,17291,17293,17296,17298,17300,17303,17305,17307,17310,17312,17315, +17317,17319,17322,17324,17326,17329,17331,17333,17336,17338,17340,17343,17345, +17347,17350,17352,17354,17357,17359,17361,17364,17366,17368,17371,17373,17375, +17378,17380,17382,17385,17387,17389,17392,17394,17396,17399,17401,17403,17406, +17408,17410,17413,17415,17417,17420,17422,17424,17427,17429,17431,17434,17436, +17438,17441,17443,17445,17448,17450,17452,17454,17457,17459,17461,17464,17466, +17468,17471,17473,17475,17478,17480,17482,17485,17487,17489,17492,17494,17496, +17499,17501,17503,17505,17508,17510,17512,17515,17517,17519,17522,17524,17526, +17529,17531,17533,17536,17538,17540,17542,17545,17547,17549,17552,17554,17556, +17559,17561,17563,17566,17568,17570,17572,17575,17577,17579,17582,17584,17586, +17589,17591,17593,17595,17598,17600,17602,17605,17607,17609,17612,17614,17616, +17618,17621,17623,17625,17628,17630,17632,17635,17637,17639,17641,17644,17646, +17648,17651,17653,17655,17657,17660,17662,17664,17667,17669,17671,17673,17676, +17678,17680,17683,17685,17687,17689,17692,17694,17696,17699,17701,17703,17705, +17708,17710,17712,17715,17717,17719,17721,17724,17726,17728,17731,17733,17735, +17737,17740,17742,17744,17747,17749,17751,17753,17756,17758,17760,17762,17765, +17767,17769,17772,17774,17776,17778,17781,17783,17785,17787,17790,17792,17794, +17797,17799,17801,17803,17806,17808,17810,17812,17815,17817,17819,17821,17824, +17826,17828,17831,17833,17835,17837,17840,17842,17844,17846,17849,17851,17853, +17855,17858,17860,17862,17864,17867,17869,17871,17874,17876,17878,17880,17883, +17885,17887,17889,17892,17894,17896,17898,17901,17903,17905,17907,17910,17912, +17914,17916,17919,17921,17923,17925,17928,17930,17932,17934,17937,17939,17941, +17943,17946,17948,17950,17952,17955,17957,17959,17961,17964,17966,17968,17970, +17973,17975,17977,17979,17982,17984,17986,17988,17991,17993,17995,17997,18000, +18002,18004,18006,18008,18011,18013,18015,18017,18020,18022,18024,18026,18029, +18031,18033,18035,18038,18040,18042,18044,18046,18049,18051,18053,18055,18058, +18060,18062,18064,18067,18069,18071,18073,18075,18078,18080,18082,18084,18087, +18089,18091,18093,18096,18098,18100,18102,18104,18107,18109,18111,18113,18116, +18118,18120,18122,18124,18127,18129,18131,18133,18136,18138,18140,18142,18144, +18147,18149,18151,18153,18156,18158,18160,18162,18164,18167,18169,18171,18173, +18175,18178,18180,18182,18184,18187,18189,18191,18193,18195,18198,18200,18202, +18204,18206,18209,18211,18213,18215,18218,18220,18222,18224,18226,18229,18231, +18233,18235,18237,18240,18242,18244,18246,18248,18251,18253,18255,18257,18259, +18262,18264,18266,18268,18270,18273,18275,18277,18279,18281,18284,18286,18288, +18290,18292,18295,18297,18299,18301,18303,18306,18308,18310,18312,18314,18317, +18319,18321,18323,18325,18328,18330,18332,18334,18336,18339,18341,18343,18345, +18347,18349,18352,18354,18356,18358,18360,18363,18365,18367,18369,18371,18374, +18376,18378,18380,18382,18385,18387,18389,18391,18393,18395,18398,18400,18402, +18404,18406,18409,18411,18413,18415,18417,18419,18422,18424,18426,18428,18430, +18433,18435,18437,18439,18441,18443,18446,18448,18450,18452,18454,18456,18459, +18461,18463,18465,18467,18470,18472,18474,18476,18478,18480,18483,18485,18487, +18489,18491,18493,18496,18498,18500,18502,18504,18506,18509,18511,18513,18515, +18517,18519,18522,18524,18526,18528,18530,18532,18535,18537,18539,18541,18543, +18545,18548,18550,18552,18554,18556,18558,18561,18563,18565,18567,18569,18571, +18574,18576,18578,18580,18582,18584,18586,18589,18591,18593,18595,18597,18599, +18602,18604,18606,18608,18610,18612,18614,18617,18619,18621,18623,18625,18627, +18630,18632,18634,18636,18638,18640,18642,18645,18647,18649,18651,18653,18655, +18658,18660,18662,18664,18666,18668,18670,18673,18675,18677,18679,18681,18683, +18685,18688,18690,18692,18694,18696,18698,18700,18703,18705,18707,18709,18711, +18713,18715,18718,18720,18722,18724,18726,18728,18730,18733,18735,18737,18739, +18741,18743,18745,18747,18750,18752,18754,18756,18758,18760,18762,18765,18767, +18769,18771,18773,18775,18777,18779,18782,18784,18786,18788,18790,18792,18794, +18797,18799,18801,18803,18805,18807,18809,18811,18814,18816,18818,18820,18822, +18824,18826,18828,18831,18833,18835,18837,18839,18841,18843,18845,18848,18850, +18852,18854,18856,18858,18860,18862,18865,18867,18869,18871,18873,18875,18877, +18879,18881,18884,18886,18888,18890,18892,18894,18896,18898,18901,18903,18905, +18907,18909,18911,18913,18915,18917,18920,18922,18924,18926,18928,18930,18932, +18934,18936,18939,18941,18943,18945,18947,18949,18951,18953,18955,18958,18960, +18962,18964,18966,18968,18970,18972,18974,18977,18979,18981,18983,18985,18987, +18989,18991,18993,18995,18998,19000,19002,19004,19006,19008,19010,19012,19014, +19016,19019,19021,19023,19025,19027,19029,19031,19033,19035,19037,19040,19042, +19044,19046,19048,19050,19052,19054,19056,19058,19061,19063,19065,19067,19069, +19071,19073,19075,19077,19079,19081,19084,19086,19088,19090,19092,19094,19096, +19098,19100,19102,19104,19107,19109,19111,19113,19115,19117,19119,19121,19123, +19125,19127,19130,19132,19134,19136,19138,19140,19142,19144,19146,19148,19150, +19152,19155,19157,19159,19161,19163,19165,19167,19169,19171,19173,19175,19177, +19180,19182,19184,19186,19188,19190,19192,19194,19196,19198,19200,19202,19204, +19207,19209,19211,19213,19215,19217,19219,19221,19223,19225,19227,19229,19231, +19233,19236,19238,19240,19242,19244,19246,19248,19250,19252,19254,19256,19258, +19260,19262,19265,19267,19269,19271,19273,19275,19277,19279,19281,19283,19285, +19287,19289,19291,19293,19296,19298,19300,19302,19304,19306,19308,19310,19312, +19314,19316,19318,19320,19322,19324,19327,19329,19331,19333,19335,19337,19339, +19341,19343,19345,19347,19349,19351,19353,19355,19357,19359,19362,19364,19366, +19368,19370,19372,19374,19376,19378,19380,19382,19384,19386,19388,19390,19392, +19394,19396,19398,19401,19403,19405,19407,19409,19411,19413,19415,19417,19419, +19421,19423,19425,19427,19429,19431,19433,19435,19437,19439,19442,19444,19446, +19448,19450,19452,19454,19456,19458,19460,19462,19464,19466,19468,19470,19472, +19474,19476,19478,19480,19482,19484,19486,19489,19491,19493,19495,19497,19499, +19501,19503,19505,19507,19509,19511,19513,19515,19517,19519,19521,19523,19525, +19527,19529,19531,19533,19535,19537,19539,19541,19544,19546,19548,19550,19552, +19554,19556,19558,19560,19562,19564,19566,19568,19570,19572,19574,19576,19578, +19580,19582,19584,19586,19588,19590,19592,19594,19596,19598,19600,19602,19604, +19606,19608,19611,19613,19615,19617,19619,19621,19623,19625,19627,19629,19631, +19633,19635,19637,19639,19641,19643,19645,19647,19649,19651,19653,19655,19657, +19659,19661,19663,19665,19667,19669,19671,19673,19675,19677,19679,19681,19683, +19685,19687,19689,19691,19693,19695,19697,19699,19701,19703,19705,19707,19709, +19711,19714,19716,19718,19720,19722,19724,19726,19728,19730,19732,19734,19736, +19738,19740,19742,19744,19746,19748,19750,19752,19754,19756,19758,19760,19762, +19764,19766,19768,19770,19772,19774,19776,19778,19780,19782,19784,19786,19788, +19790,19792,19794,19796,19798,19800,19802,19804,19806,19808,19810,19812,19814, +19816,19818,19820,19822,19824,19826,19828,19830,19832,19834,19836,19838,19840, +19842,19844,19846,19848,19850,19852,19854,19856,19858,19860,19862,19864,19866, +19868,19870,19872,19874,19876,19878,19880,19882,19884,19886,19888,19890,19892, +19894,19896,19898,19900,19902,19904,19906,19908,19910,19912,19914,19916,19918, +19920,19922,19924,19926,19928,19930,19932,19934,19935,19937,19939,19941,19943, +19945,19947,19949,19951,19953,19955,19957,19959,19961,19963,19965,19967,19969, +19971,19973,19975,19977,19979,19981,19983,19985,19987,19989,19991,19993,19995, +19997,19999,20001,20003,20005,20007,20009,20011,20013,20015,20017,20019,20021, +20023,20025,20027,20029,20031,20033,20035,20037,20038,20040,20042,20044,20046, +20048,20050,20052,20054,20056,20058,20060,20062,20064,20066,20068,20070,20072, +20074,20076,20078,20080,20082,20084,20086,20088,20090,20092,20094,20096,20098, +20100,20102,20104,20105,20107,20109,20111,20113,20115,20117,20119,20121,20123, +20125,20127,20129,20131,20133,20135,20137,20139,20141,20143,20145,20147,20149, +20151,20153,20155,20157,20159,20160,20162,20164,20166,20168,20170,20172,20174, +20176,20178,20180,20182,20184,20186,20188,20190,20192,20194,20196,20198,20200, +20202,20204,20205,20207,20209,20211,20213,20215,20217,20219,20221,20223,20225, +20227,20229,20231,20233,20235,20237,20239,20241,20243,20245,20247,20248,20250, +20252,20254,20256,20258,20260,20262,20264,20266,20268,20270,20272,20274,20276, +20278,20280,20282,20284,20285,20287,20289,20291,20293,20295,20297,20299,20301, +20303,20305,20307,20309,20311,20313,20315,20317,20319,20320,20322,20324,20326, +20328,20330,20332,20334,20336,20338,20340,20342,20344,20346,20348,20350,20352, +20353,20355,20357,20359,20361,20363,20365,20367,20369,20371,20373,20375,20377, +20379,20381,20382,20384,20386,20388,20390,20392,20394,20396,20398,20400,20402, +20404,20406,20408,20410,20411,20413,20415,20417,20419,20421,20423,20425,20427, +20429,20431,20433,20435,20437,20439,20440,20442,20444,20446,20448,20450,20452, +20454,20456,20458,20460,20462,20464,20466,20467,20469,20471,20473,20475,20477, +20479,20481,20483,20485,20487,20489,20491,20492,20494,20496,20498,20500,20502, +20504,20506,20508,20510,20512,20514,20515,20517,20519,20521,20523,20525,20527, +20529,20531,20533,20535,20537,20539,20540,20542,20544,20546,20548,20550,20552, +20554,20556,20558,20560,20562,20563,20565,20567,20569,20571,20573,20575,20577, +20579,20581,20583,20584,20586,20588,20590,20592,20594,20596,20598,20600,20602, +20604,20606,20607,20609,20611,20613,20615,20617,20619,20621,20623,20625,20627, +20628,20630,20632,20634,20636,20638,20640,20642,20644,20646,20647,20649,20651, +20653,20655,20657,20659,20661,20663,20665,20667,20668,20670,20672,20674,20676, +20678,20680,20682,20684,20686,20687,20689,20691,20693,20695,20697,20699,20701, +20703,20705,20706,20708,20710,20712,20714,20716,20718,20720,20722,20724,20725, +20727,20729,20731,20733,20735,20737,20739,20741,20742,20744,20746,20748,20750, +20752,20754,20756,20758,20760,20761,20763,20765,20767,20769,20771,20773,20775, +20777,20778,20780,20782,20784,20786,20788,20790,20792,20794,20795,20797,20799, +20801,20803,20805,20807,20809,20811,20812,20814,20816,20818,20820,20822,20824, +20826,20828,20829,20831,20833,20835,20837,20839,20841,20843,20845,20846,20848, +20850,20852,20854,20856,20858,20860,20861,20863,20865,20867,20869,20871,20873, +20875,20877,20878,20880,20882,20884,20886,20888,20890,20892,20893,20895,20897, +20899,20901,20903,20905,20907,20908,20910,20912,20914,20916,20918,20920,20922, +20923,20925,20927,20929,20931,20933,20935,20937,20938,20940,20942,20944,20946, +20948,20950,20952,20953,20955,20957,20959,20961,20963,20965,20967,20968,20970, +20972,20974,20976,20978,20980,20982,20983,20985,20987,20989,20991,20993,20995, +20996,20998,21000,21002,21004,21006,21008,21010,21011,21013,21015,21017,21019, +21021,21023,21024,21026,21028,21030,21032,21034,21036,21038,21039,21041,21043, +21045,21047,21049,21051,21052,21054,21056,21058,21060,21062,21064,21065,21067, +21069,21071,21073,21075,21077,21078,21080,21082,21084,21086,21088,21090,21091, +21093,21095,21097,21099,21101,21103,21104,21106,21108,21110,21112,21114,21116, +21117,21119,21121,21123,21125,21127,21129,21130,21132,21134,21136,21138,21140, +21142,21143,21145,21147,21149,21151,21153,21155,21156,21158,21160,21162,21164, +21166,21167,21169,21171,21173,21175,21177,21179,21180,21182,21184,21186,21188, +21190,21192,21193,21195,21197,21199,21201,21203,21204,21206,21208,21210,21212, +21214,21216,21217,21219,21221,21223,21225,21227,21228,21230,21232,21234,21236, +21238,21239,21241,21243,21245,21247,21249,21251,21252,21254,21256,21258,21260, +21262,21263,21265,21267,21269,21271,21273,21274,21276,21278,21280,21282,21284, +21285,21287,21289,21291,21293,21295,21296,21298,21300,21302,21304,21306,21308, +21309,21311,21313,21315,21317,21319,21320,21322,21324,21326,21328,21330,21331, +21333,21335,21337,21339,21341,21342,21344,21346,21348,21350,21351,21353,21355, +21357,21359,21361,21362,21364,21366,21368,21370,21372,21373,21375,21377,21379, +21381,21383,21384,21386,21388,21390,21392,21394,21395,21397,21399,21401,21403, +21405,21406,21408,21410,21412,21414,21415,21417,21419,21421,21423,21425,21426, +21428,21430,21432,21434,21436,21437,21439,21441,21443,21445,21446,21448,21450, +21452,21454,21456,21457,21459,21461,21463,21465,21466,21468,21470,21472,21474, +21476,21477,21479,21481,21483,21485,21486,21488,21490,21492,21494,21496,21497, +21499,21501,21503,21505,21506,21508,21510,21512,21514,21516,21517,21519,21521, +21523,21525,21526,21528,21530,21532,21534,21535,21537,21539,21541,21543,21545, +21546,21548,21550,21552,21554,21555,21557,21559,21561,21563,21564,21566,21568, +21570,21572,21573,21575,21577,21579,21581,21582,21584,21586,21588,21590,21592, +21593,21595,21597,21599,21601,21602,21604,21606,21608,21610,21611,21613,21615, +21617,21619,21620,21622,21624,21626,21628,21629,21631,21633,21635,21637,21638, +21640,21642,21644,21646,21647,21649,21651,21653,21655,21656,21658,21660,21662, +21664,21665,21667,21669,21671,21673,21674,21676,21678,21680,21682,21683,21685, +21687,21689,21691,21692,21694,21696,21698,21700,21701,21703,21705,21707,21709, +21710,21712,21714,21716,21718,21719,21721,21723,21725,21726,21728,21730,21732, +21734,21735,21737,21739,21741,21743,21744,21746,21748,21750,21752,21753,21755, +21757,21759,21761,21762,21764,21766,21768,21769,21771,21773,21775,21777,21778, +21780,21782,21784,21786,21787,21789,21791,21793,21794,21796,21798,21800,21802, +21803,21805,21807,21809,21811,21812,21814,21816,21818,21819,21821,21823,21825, +21827,21828,21830,21832,21834,21836,21837,21839,21841,21843,21844,21846,21848, +21850,21852,21853,21855,21857,21859,21860,21862,21864,21866,21868,21869,21871, +21873,21875,21876,21878,21880,21882,21884,21885,21887,21889,21891,21892,21894, +21896,21898,21900,21901,21903,21905,21907,21908,21910,21912,21914,21916,21917, +21919,21921,21923,21924,21926,21928,21930,21932,21933,21935,21937,21939,21940, +21942,21944,21946,21947,21949,21951,21953,21955,21956,21958,21960,21962,21963, +21965,21967,21969,21970,21972,21974,21976,21978,21979,21981,21983,21985,21986, +21988,21990,21992,21993,21995,21997,21999,22001,22002,22004,22006,22008,22009, +22011,22013,22015,22016,22018,22020,22022,22023,22025,22027,22029,22031,22032, +22034,22036,22038,22039,22041,22043,22045,22046,22048,22050,22052,22053,22055, +22057,22059,22060,22062,22064,22066,22068,22069,22071,22073,22075,22076,22078, +22080,22082,22083,22085,22087,22089,22090,22092,22094,22096,22097,22099,22101, +22103,22104,22106,22108,22110,22111,22113,22115,22117,22118,22120,22122,22124, +22125,22127,22129,22131,22132,22134,22136,22138,22140,22141,22143,22145,22147, +22148,22150,22152,22154,22155,22157,22159,22161,22162,22164,22166,22168,22169, +22171,22173,22175,22176,22178,22180,22182,22183,22185,22187,22189,22190,22192, +22194,22196,22197,22199,22201,22203,22204,22206,22208,22209,22211,22213,22215, +22216,22218,22220,22222,22223,22225,22227,22229,22230,22232,22234,22236,22237, +22239,22241,22243,22244,22246,22248,22250,22251,22253,22255,22257,22258,22260, +22262,22264,22265,22267,22269,22270,22272,22274,22276,22277,22279,22281,22283, +22284,22286,22288,22290,22291,22293,22295,22297,22298,22300,22302,22304,22305, +22307,22309,22310,22312,22314,22316,22317,22319,22321,22323,22324,22326,22328, +22330,22331,22333,22335,22337,22338,22340,22342,22343,22345,22347,22349,22350, +22352,22354,22356,22357,22359,22361,22363,22364,22366,22368,22369,22371,22373, +22375,22376,22378,22380,22382,22383,22385,22387,22388,22390,22392,22394,22395, +22397,22399,22401,22402,22404,22406,22407,22409,22411,22413,22414,22416,22418, +22420,22421,22423,22425,22426,22428,22430,22432,22433,22435,22437,22439,22440, +22442,22444,22445,22447,22449,22451,22452,22454,22456,22458,22459,22461,22463, +22464,22466,22468,22470,22471,22473,22475,22476,22478,22480,22482,22483,22485, +22487,22488,22490,22492,22494,22495,22497,22499,22501,22502,22504,22506,22507, +22509,22511,22513,22514,22516,22518,22519,22521,22523,22525,22526,22528,22530, +22531,22533,22535,22537,22538,22540,22542,22543,22545,22547,22549,22550,22552, +22554,22555,22557,22559,22561,22562,22564,22566,22567,22569,22571,22573,22574, +22576,22578,22579,22581,22583,22585,22586,22588,22590,22591,22593,22595,22597, +22598,22600,22602,22603,22605,22607,22609,22610,22612,22614,22615,22617,22619, +22620,22622,22624,22626,22627,22629,22631,22632,22634,22636,22638,22639,22641, +22643,22644,22646,22648,22649,22651,22653,22655,22656,22658,22660,22661,22663, +22665,22667,22668,22670,22672,22673,22675,22677,22678,22680,22682,22684,22685, +22687,22689,22690,22692,22694,22695,22697,22699,22701,22702,22704,22706,22707, +22709,22711,22712,22714,22716,22718,22719,22721,22723,22724,22726,22728,22729, +22731,22733,22735,22736,22738,22740,22741,22743,22745,22746,22748,22750,22752, +22753,22755,22757,22758,22760,22762,22763,22765,22767,22768,22770,22772,22774, +22775,22777,22779,22780,22782,22784,22785,22787,22789,22790,22792,22794,22796, +22797,22799,22801,22802,22804,22806,22807,22809,22811,22812,22814,22816,22818, +22819,22821,22823,22824,22826,22828,22829,22831,22833,22834,22836,22838,22840, +22841,22843,22845,22846,22848,22850,22851,22853,22855,22856,22858,22860,22861, +22863,22865,22866,22868,22870,22872,22873,22875,22877,22878,22880,22882,22883, +22885,22887,22888,22890,22892,22893,22895,22897,22898,22900,22902,22904,22905, +22907,22909,22910,22912,22914,22915,22917,22919,22920,22922,22924,22925,22927, +22929,22930,22932,22934,22935,22937,22939,22941,22942,22944,22946,22947,22949, +22951,22952,22954,22956,22957,22959,22961,22962,22964,22966,22967,22969,22971, +22972,22974,22976,22977,22979,22981,22982,22984,22986,22987,22989,22991,22992, +22994,22996,22998,22999,23001,23003,23004,23006,23008,23009,23011,23013,23014, +23016,23018,23019,23021,23023,23024,23026,23028,23029,23031,23033,23034,23036, +23038,23039,23041,23043,23044,23046,23048,23049,23051,23053,23054,23056,23058, +23059,23061,23063,23064,23066,23068,23069,23071,23073,23074,23076,23078,23079, +23081,23083,23084,23086,23088,23089,23091,23093,23094,23096,23098,23099,23101, +23103,23104,23106,23108,23109,23111,23113,23114,23116,23118,23119,23121,23123, +23124,23126,23128,23129,23131,23133,23134,23136,23138,23139,23141,23143,23144, +23146,23148,23149,23151,23153,23154,23156,23158,23159,23161,23163,23164,23166, +23168,23169,23171,23172,23174,23176,23177,23179,23181,23182,23184,23186,23187, +23189,23191,23192,23194,23196,23197,23199,23201,23202,23204,23206,23207,23209, +23211,23212,23214,23216,23217,23219,23221,23222,23224,23226,23227,23229,23230, +23232,23234,23235,23237,23239,23240,23242,23244,23245,23247,23249,23250,23252, +23254,23255,23257,23259,23260,23262,23264,23265,23267,23268,23270,23272,23273, +23275,23277,23278,23280,23282,23283,23285,23287,23288,23290,23292,23293,23295, +23297,23298,23300,23301,23303,23305,23306,23308,23310,23311,23313,23315,23316, +23318,23320,23321,23323,23324,23326,23328,23329,23331,23333,23334,23336,23338, +23339,23341,23343,23344,23346,23348,23349,23351,23352,23354,23356,23357,23359, +23361,23362,23364,23366,23367,23369,23371,23372,23374,23375,23377,23379,23380, +23382,23384,23385,23387,23389,23390,23392,23393,23395,23397,23398,23400,23402, +23403,23405,23407,23408,23410,23412,23413,23415,23416,23418,23420,23421,23423, +23425,23426,23428,23430,23431,23433,23434,23436,23438,23439,23441,23443,23444, +23446,23448,23449,23451,23452,23454,23456,23457,23459,23461,23462,23464,23466, +23467,23469,23470,23472,23474,23475,23477,23479,23480,23482,23483,23485,23487, +23488,23490,23492,23493,23495,23497,23498,23500,23501,23503,23505,23506,23508, +23510,23511,23513,23514,23516,23518,23519,23521,23523,23524,23526,23527,23529, +23531,23532,23534,23536,23537,23539,23541,23542,23544,23545,23547,23549,23550, +23552,23554,23555,23557,23558,23560,23562,23563,23565,23567,23568,23570,23571, +23573,23575,23576,23578,23580,23581,23583,23584,23586,23588,23589,23591,23593, +23594,23596,23597,23599,23601,23602,23604,23606,23607,23609,23610,23612,23614, +23615,23617,23618,23620,23622,23623,23625,23627,23628,23630,23631,23633,23635, +23636,23638,23640,23641,23643,23644,23646,23648,23649,23651,23652,23654,23656, +23657,23659,23661,23662,23664,23665,23667,23669,23670,23672,23674,23675,23677, +23678,23680,23682,23683,23685,23686,23688,23690,23691,23693,23695,23696,23698, +23699,23701,23703,23704,23706,23707,23709,23711,23712,23714,23715,23717,23719, +23720,23722,23724,23725,23727,23728,23730,23732,23733,23735,23736,23738,23740, +23741,23743,23744,23746,23748,23749,23751,23753,23754,23756,23757,23759,23761, +23762,23764,23765,23767,23769,23770,23772,23773,23775,23777,23778,23780,23781, +23783,23785,23786,23788,23790,23791,23793,23794,23796,23798,23799,23801,23802, +23804,23806,23807,23809,23810,23812,23814,23815,23817,23818,23820,23822,23823, +23825,23826,23828,23830,23831,23833,23834,23836,23838,23839,23841,23842,23844, +23846,23847,23849,23850,23852,23854,23855,23857,23858,23860,23862,23863,23865, +23867,23868,23870,23871,23873,23875,23876,23878,23879,23881,23882,23884,23886, +23887,23889,23890,23892,23894,23895,23897,23898,23900,23902,23903,23905,23906, +23908,23910,23911,23913,23914,23916,23918,23919,23921,23922,23924,23926,23927, +23929,23930,23932,23934,23935,23937,23938,23940,23942,23943,23945,23946,23948, +23950,23951,23953,23954,23956,23958,23959,23961,23962,23964,23965,23967,23969, +23970,23972,23973,23975,23977,23978,23980,23981,23983,23985,23986,23988,23989, +23991,23993,23994,23996,23997,23999,24000,24002,24004,24005,24007,24008,24010, +24012,24013,24015,24016,24018,24020,24021,24023,24024,24026,24027,24029,24031, +24032,24034,24035,24037,24039,24040,24042,24043,24045,24047,24048,24050,24051, +24053,24054,24056,24058,24059,24061,24062,24064,24066,24067,24069,24070,24072, +24073,24075,24077,24078,24080,24081,24083,24085,24086,24088,24089,24091,24092, +24094,24096,24097,24099,24100,24102,24104,24105,24107,24108,24110,24111,24113, +24115,24116,24118,24119,24121,24122,24124,24126,24127,24129,24130,24132,24134, +24135,24137,24138,24140,24141,24143,24145,24146,24148,24149,24151,24152,24154, +24156,24157,24159,24160,24162,24164,24165,24167,24168,24170,24171,24173,24175, +24176,24178,24179,24181,24182,24184,24186,24187,24189,24190,24192,24193,24195, +24197,24198,24200,24201,24203,24204,24206,24208,24209,24211,24212,24214,24215, +24217,24219,24220,24222,24223,24225,24226,24228,24230,24231,24233,24234,24236, +24237,24239,24241,24242,24244,24245,24247,24248,24250,24252,24253,24255,24256, +24258,24259,24261,24263,24264,24266,24267,24269,24270,24272,24274,24275,24277, +24278,24280,24281,24283,24285,24286,24288,24289,24291,24292,24294,24296,24297, +24299,24300,24302,24303,24305,24306,24308,24310,24311,24313,24314,24316,24317, +24319,24321,24322,24324,24325,24327,24328,24330,24332,24333,24335,24336,24338, +24339,24341,24342,24344,24346,24347,24349,24350,24352,24353,24355,24356,24358, +24360,24361,24363,24364,24366,24367,24369,24371,24372,24374,24375,24377,24378, +24380,24381,24383,24385,24386,24388,24389,24391,24392,24394,24395,24397,24399, +24400,24402,24403,24405,24406,24408,24410,24411,24413,24414,24416,24417,24419, +24420,24422,24424,24425,24427,24428,24430,24431,24433,24434,24436,24438,24439, +24441,24442,24444,24445,24447,24448,24450,24452,24453,24455,24456,24458,24459, +24461,24462,24464,24465,24467,24469,24470,24472,24473,24475,24476,24478,24479, +24481,24483,24484,24486,24487,24489,24490,24492,24493,24495,24497,24498,24500, +24501,24503,24504,24506,24507,24509,24510,24512,24514,24515,24517,24518,24520, +24521,24523,24524,24526,24528,24529,24531,24532,24534,24535,24537,24538,24540, +24541,24543,24545,24546,24548,24549,24551,24552,24554,24555,24557,24558,24560, +24562,24563,24565,24566,24568,24569,24571,24572,24574,24575,24577,24579,24580, +24582,24583,24585,24586,24588,24589,24591,24592,24594,24596,24597,24599,24600, +24602,24603,24605,24606,24608,24609,24611,24612,24614,24616,24617,24619,24620, +24622,24623,24625,24626,24628,24629,24631,24633,24634,24636,24637,24639,24640, +24642,24643,24645,24646,24648,24649,24651,24653,24654,24656,24657,24659,24660, +24662,24663,24665,24666,24668,24669,24671,24673,24674,24676,24677,24679,24680, +24682,24683,24685,24686,24688,24689,24691,24692,24694,24696,24697,24699,24700, +24702,24703,24705,24706,24708,24709,24711,24712,24714,24715,24717,24719,24720, +24722,24723,24725,24726,24728,24729,24731,24732,24734,24735,24737,24738,24740, +24742,24743,24745,24746,24748,24749,24751,24752,24754,24755,24757,24758,24760, +24761,24763,24765,24766,24768,24769,24771,24772,24774,24775,24777,24778,24780, +24781,24783,24784,24786,24787,24789,24791,24792,24794,24795,24797,24798,24800, +24801,24803,24804,24806,24807,24809,24810,24812,24813,24815,24816,24818,24820, +24821,24823,24824,24826,24827,24829,24830,24832,24833,24835,24836,24838,24839, +24841,24842,24844,24845,24847,24848,24850,24852,24853,24855,24856,24858,24859, +24861,24862,24864,24865,24867,24868,24870,24871,24873,24874,24876,24877,24879, +24880,24882,24883,24885,24887,24888,24890,24891,24893,24894,24896,24897,24899, +24900,24902,24903,24905,24906,24908,24909,24911,24912,24914,24915,24917,24918, +24920,24921,24923,24925,24926,24928,24929,24931,24932,24934,24935,24937,24938, +24940,24941,24943,24944,24946,24947,24949,24950,24952,24953,24955,24956,24958, +24959,24961,24962,24964,24965,24967,24968,24970,24972,24973,24975,24976,24978, +24979,24981,24982,24984,24985,24987,24988,24990,24991,24993,24994,24996,24997, +24999,25000,25002,25003,25005,25006,25008,25009,25011,25012,25014,25015,25017, +25018,25020,25021,25023,25024,25026,25027,25029,25031,25032,25034,25035,25037, +25038,25040,25041,25043,25044,25046,25047,25049,25050,25052,25053,25055,25056, +25058,25059,25061,25062,25064,25065,25067,25068,25070,25071,25073,25074,25076, +25077,25079,25080,25082,25083,25085,25086,25088,25089,25091,25092,25094,25095, +25097,25098,25100,25101,25103,25104,25106,25107,25109,25110,25112,25113,25115, +25116,25118,25119,25121,25122,25124,25125,25127,25128,25130,25131,25133,25134, +25136,25137,25139,25140,25142,25143,25145,25146,25148,25149,25151,25152,25154, +25155,25157,25158,25160,25161,25163,25164,25166,25167,25169,25170,25172,25173, +25175,25176,25178,25179,25181,25182,25184,25185,25187,25188,25190,25191,25193, +25194,25196,25197,25199,25200,25202,25203,25205,25206,25208,25209,25211,25212, +25214,25215,25217,25218,25220,25221,25223,25224,25226,25227,25229,25230,25232, +25233,25235,25236,25238,25239,25241,25242,25244,25245,25247,25248,25250,25251, +25253,25254,25256,25257,25259,25260,25262,25263,25265,25266,25268,25269,25271, +25272,25274,25275,25277,25278,25280,25281,25283,25284,25286,25287,25289,25290, +25292,25293,25295,25296,25298,25299,25301,25302,25304,25305,25306,25308,25309, +25311,25312,25314,25315,25317,25318,25320,25321,25323,25324,25326,25327,25329, +25330,25332,25333,25335,25336,25338,25339,25341,25342,25344,25345,25347,25348, +25350,25351,25353,25354,25356,25357,25359,25360,25362,25363,25365,25366,25367, +25369,25370,25372,25373,25375,25376,25378,25379,25381,25382,25384,25385,25387, +25388,25390,25391,25393,25394,25396,25397,25399,25400,25402,25403,25405,25406, +25408,25409,25411,25412,25413,25415,25416,25418,25419,25421,25422,25424,25425, +25427,25428,25430,25431,25433,25434,25436,25437,25439,25440,25442,25443,25445, +25446,25448,25449,25451,25452,25453,25455,25456,25458,25459,25461,25462,25464, +25465,25467,25468,25470,25471,25473,25474,25476,25477,25479,25480,25482,25483, +25485,25486,25487,25489,25490,25492,25493,25495,25496,25498,25499,25501,25502, +25504,25505,25507,25508,25510,25511,25513,25514,25516,25517,25518,25520,25521, +25523,25524,25526,25527,25529,25530,25532,25533,25535,25536,25538,25539,25541, +25542,25544,25545,25546,25548,25549,25551,25552,25554,25555,25557,25558,25560, +25561,25563,25564,25566,25567,25569,25570,25571,25573,25574,25576,25577,25579, +25580,25582,25583,25585,25586,25588,25589,25591,25592,25594,25595,25596,25598, +25599,25601,25602,25604,25605,25607,25608,25610,25611,25613,25614,25616,25617, +25619,25620,25621,25623,25624,25626,25627,25629,25630,25632,25633,25635,25636, +25638,25639,25641,25642,25643,25645,25646,25648,25649,25651,25652,25654,25655, +25657,25658,25660,25661,25662,25664,25665,25667,25668,25670,25671,25673,25674, +25676,25677,25679,25680,25682,25683,25684,25686,25687,25689,25690,25692,25693, +25695,25696,25698,25699,25701,25702,25703,25705,25706,25708,25709,25711,25712, +25714,25715,25717,25718,25720,25721,25722,25724,25725,25727,25728,25730,25731, +25733,25734,25736,25737,25739,25740,25741,25743,25744,25746,25747,25749,25750, +25752,25753,25755,25756,25757,25759,25760,25762,25763,25765,25766,25768,25769, +25771,25772,25774,25775,25776,25778,25779,25781,25782,25784,25785,25787,25788, +25790,25791,25792,25794,25795,25797,25798,25800,25801,25803,25804,25806,25807, +25808,25810,25811,25813,25814,25816,25817,25819,25820,25822,25823,25824,25826, +25827,25829,25830,25832,25833,25835,25836,25838,25839,25840,25842,25843,25845, +25846,25848,25849,25851,25852,25853,25855,25856,25858,25859,25861,25862,25864, +25865,25867,25868,25869,25871,25872,25874,25875,25877,25878,25880,25881,25882, +25884,25885,25887,25888,25890,25891,25893,25894,25896,25897,25898,25900,25901, +25903,25904,25906,25907,25909,25910,25911,25913,25914,25916,25917,25919,25920, +25922,25923,25924,25926,25927,25929,25930,25932,25933,25935,25936,25937,25939, +25940,25942,25943,25945,25946,25948,25949,25951,25952,25953,25955,25956,25958, +25959,25961,25962,25963,25965,25966,25968,25969,25971,25972,25974,25975,25976, +25978,25979,25981,25982,25984,25985,25987,25988,25989,25991,25992,25994,25995, +25997,25998,26000,26001,26002,26004,26005,26007,26008,26010,26011,26013,26014, +26015,26017,26018,26020,26021,26023,26024,26025,26027,26028,26030,26031,26033, +26034,26036,26037,26038,26040,26041,26043,26044,26046,26047,26049,26050,26051, +26053,26054,26056,26057,26059,26060,26061,26063,26064,26066,26067,26069,26070, +26072,26073,26074,26076,26077,26079,26080,26082,26083,26084,26086,26087,26089, +26090,26092,26093,26094,26096,26097,26099,26100,26102,26103,26105,26106,26107, +26109,26110,26112,26113,26115,26116,26117,26119,26120,26122,26123,26125,26126, +26127,26129,26130,26132,26133,26135,26136,26137,26139,26140,26142,26143,26145, +26146,26148,26149,26150,26152,26153,26155,26156,26158,26159,26160,26162,26163, +26165,26166,26168,26169,26170,26172,26173,26175,26176,26178,26179,26180,26182, +26183,26185,26186,26188,26189,26190,26192,26193,26195,26196,26198,26199,26200, +26202,26203,26205,26206,26208,26209,26210,26212,26213,26215,26216,26218,26219, +26220,26222,26223,26225,26226,26228,26229,26230,26232,26233,26235,26236,26237, +26239,26240,26242,26243,26245,26246,26247,26249,26250,26252,26253,26255,26256, +26257,26259,26260,26262,26263,26265,26266,26267,26269,26270,26272,26273,26275, +26276,26277,26279,26280,26282,26283,26284,26286,26287,26289,26290,26292,26293, +26294,26296,26297,26299,26300,26302,26303,26304,26306,26307,26309,26310,26311, +26313,26314,26316,26317,26319,26320,26321,26323,26324,26326,26327,26329,26330, +26331,26333,26334,26336,26337,26338,26340,26341,26343,26344,26346,26347,26348, +26350,26351,26353,26354,26355,26357,26358,26360,26361,26363,26364,26365,26367, +26368,26370,26371,26372,26374,26375,26377,26378,26380,26381,26382,26384,26385, +26387,26388,26389,26391,26392,26394,26395,26397,26398,26399,26401,26402,26404, +26405,26406,26408,26409,26411,26412,26413,26415,26416,26418,26419,26421,26422, +26423,26425,26426,26428,26429,26430,26432,26433,26435,26436,26438,26439,26440, +26442,26443,26445,26446,26447,26449,26450,26452,26453,26454,26456,26457,26459, +26460,26462,26463,26464,26466,26467,26469,26470,26471,26473,26474,26476,26477, +26478,26480,26481,26483,26484,26485,26487,26488,26490,26491,26493,26494,26495, +26497,26498,26500,26501,26502,26504,26505,26507,26508,26509,26511,26512,26514, +26515,26516,26518,26519,26521,26522,26523,26525,26526,26528,26529,26531,26532, +26533,26535,26536,26538,26539,26540,26542,26543,26545,26546,26547,26549,26550, +26552,26553,26554,26556,26557,26559,26560,26561,26563,26564,26566,26567,26568, +26570,26571,26573,26574,26575,26577,26578,26580,26581,26582,26584,26585,26587, +26588,26589,26591,26592,26594,26595,26596,26598,26599,26601,26602,26603,26605, +26606,26608,26609,26610,26612,26613,26615,26616,26617,26619,26620,26622,26623, +26624,26626,26627,26629,26630,26631,26633,26634,26636,26637,26638,26640,26641, +26643,26644,26645,26647,26648,26650,26651,26652,26654,26655,26657,26658,26659, +26661,26662,26664,26665,26666,26668,26669,26671,26672,26673,26675,26676,26678, +26679,26680,26682,26683,26685,26686,26687,26689,26690,26692,26693,26694,26696, +26697,26699,26700,26701,26703,26704,26706,26707,26708,26710,26711,26713,26714, +26715,26717,26718,26719,26721,26722,26724,26725,26726,26728,26729,26731,26732, +26733,26735,26736,26738,26739,26740,26742,26743,26745,26746,26747,26749,26750, +26752,26753,26754,26756,26757,26758,26760,26761,26763,26764,26765,26767,26768, +26770,26771,26772,26774,26775,26777,26778,26779,26781,26782,26783,26785,26786, +26788,26789,26790,26792,26793,26795,26796,26797,26799,26800,26802,26803,26804, +26806,26807,26808,26810,26811,26813,26814,26815,26817,26818,26820,26821,26822, +26824,26825,26827,26828,26829,26831,26832,26833,26835,26836,26838,26839,26840, +26842,26843,26845,26846,26847,26849,26850,26851,26853,26854,26856,26857,26858, +26860,26861,26863,26864,26865,26867,26868,26869,26871,26872,26874,26875,26876, +26878,26879,26881,26882,26883,26885,26886,26887,26889,26890,26892,26893,26894, +26896,26897,26899,26900,26901,26903,26904,26905,26907,26908,26910,26911,26912, +26914,26915,26916,26918,26919,26921,26922,26923,26925,26926,26928,26929,26930, +26932,26933,26934,26936,26937,26939,26940,26941,26943,26944,26945,26947,26948, +26950,26951,26952,26954,26955,26956,26958,26959,26961,26962,26963,26965,26966, +26968,26969,26970,26972,26973,26974,26976,26977,26979,26980,26981,26983,26984, +26985,26987,26988,26990,26991,26992,26994,26995,26996,26998,26999,27001,27002, +27003,27005,27006,27007,27009,27010,27012,27013,27014,27016,27017,27018,27020, +27021,27023,27024,27025,27027,27028,27029,27031,27032,27034,27035,27036,27038, +27039,27040,27042,27043,27045,27046,27047,27049,27050,27051,27053,27054,27056, +27057,27058,27060,27061,27062,27064,27065,27067,27068,27069,27071,27072,27073, +27075,27076,27077,27079,27080,27082,27083,27084,27086,27087,27088,27090,27091, +27093,27094,27095,27097,27098,27099,27101,27102,27104,27105,27106,27108,27109, +27110,27112,27113,27114,27116,27117,27119,27120,27121,27123,27124,27125,27127, +27128,27130,27131,27132,27134,27135,27136,27138,27139,27140,27142,27143,27145, +27146,27147,27149,27150,27151,27153,27154,27155,27157,27158,27160,27161,27162, +27164,27165,27166,27168,27169,27171,27172,27173,27175,27176,27177,27179,27180, +27181,27183,27184,27186,27187,27188,27190,27191,27192,27194,27195,27196,27198, +27199,27201,27202,27203,27205,27206,27207,27209,27210,27211,27213,27214,27216, +27217,27218,27220,27221,27222,27224,27225,27226,27228,27229,27230,27232,27233, +27235,27236,27237,27239,27240,27241,27243,27244,27245,27247,27248,27250,27251, +27252,27254,27255,27256,27258,27259,27260,27262,27263,27264,27266,27267,27269, +27270,27271,27273,27274,27275,27277,27278,27279,27281,27282,27284,27285,27286, +27288,27289,27290,27292,27293,27294,27296,27297,27298,27300,27301,27303,27304, +27305,27307,27308,27309,27311,27312,27313,27315,27316,27317,27319,27320,27322, +27323,27324,27326,27327,27328,27330,27331,27332,27334,27335,27336,27338,27339, +27340,27342,27343,27345,27346,27347,27349,27350,27351,27353,27354,27355,27357, +27358,27359,27361,27362,27364,27365,27366,27368,27369,27370,27372,27373,27374, +27376,27377,27378,27380,27381,27382,27384,27385,27387,27388,27389,27391,27392, +27393,27395,27396,27397,27399,27400,27401,27403,27404,27405,27407,27408,27409, +27411,27412,27414,27415,27416,27418,27419,27420,27422,27423,27424,27426,27427, +27428,27430,27431,27432,27434,27435,27436,27438,27439,27441,27442,27443,27445, +27446,27447,27449,27450,27451,27453,27454,27455,27457,27458,27459,27461,27462, +27463,27465,27466,27467,27469,27470,27472,27473,27474,27476,27477,27478,27480, +27481,27482,27484,27485,27486,27488,27489,27490,27492,27493,27494,27496,27497, +27498,27500,27501,27502,27504,27505,27506,27508,27509,27511,27512,27513,27515, +27516,27517,27519,27520,27521,27523,27524,27525,27527,27528,27529,27531,27532, +27533,27535,27536,27537,27539,27540,27541,27543,27544,27545,27547,27548,27549, +27551,27552,27554,27555,27556,27558,27559,27560,27562,27563,27564,27566,27567, +27568,27570,27571,27572,27574,27575,27576,27578,27579,27580,27582,27583,27584, +27586,27587,27588,27590,27591,27592,27594,27595,27596,27598,27599,27600,27602, +27603,27604,27606,27607,27608,27610,27611,27612,27614,27615,27616,27618,27619, +27620,27622,27623,27624,27626,27627,27629,27630,27631,27633,27634,27635,27637, +27638,27639,27641,27642,27643,27645,27646,27647,27649,27650,27651,27653,27654, +27655,27657,27658,27659,27661,27662,27663,27665,27666,27667,27669,27670,27671, +27673,27674,27675,27677,27678,27679,27681,27682,27683,27685,27686,27687,27689, +27690,27691,27693,27694,27695,27697,27698,27699,27701,27702,27703,27705,27706, +27707,27709,27710,27711,27713,27714,27715,27717,27718,27719,27721,27722,27723, +27725,27726,27727,27729,27730,27731,27733,27734,27735,27737,27738,27739,27741, +27742,27743,27745,27746,27747,27749,27750,27751,27753,27754,27755,27757,27758, +27759,27761,27762,27763,27764,27766,27767,27768,27770,27771,27772,27774,27775, +27776,27778,27779,27780,27782,27783,27784,27786,27787,27788,27790,27791,27792, +27794,27795,27796,27798,27799,27800,27802,27803,27804,27806,27807,27808,27810, +27811,27812,27814,27815,27816,27818,27819,27820,27822,27823,27824,27826,27827, +27828,27830,27831,27832,27833,27835,27836,27837,27839,27840,27841,27843,27844, +27845,27847,27848,27849,27851,27852,27853,27855,27856,27857,27859,27860,27861, +27863,27864,27865,27867,27868,27869,27871,27872,27873,27875,27876,27877,27879, +27880,27881,27882,27884,27885,27886,27888,27889,27890,27892,27893,27894,27896, +27897,27898,27900,27901,27902,27904,27905,27906,27908,27909,27910,27912,27913, +27914,27915,27917,27918,27919,27921,27922,27923,27925,27926,27927,27929,27930, +27931,27933,27934,27935,27937,27938,27939,27941,27942,27943,27945,27946,27947, +27948,27950,27951,27952,27954,27955,27956,27958,27959,27960,27962,27963,27964, +27966,27967,27968,27970,27971,27972,27974,27975,27976,27977,27979,27980,27981, +27983,27984,27985,27987,27988,27989,27991,27992,27993,27995,27996,27997,27999, +28000,28001,28002,28004,28005,28006,28008,28009,28010,28012,28013,28014,28016, +28017,28018,28020,28021,28022,28023,28025,28026,28027,28029,28030,28031,28033, +28034,28035,28037,28038,28039,28041,28042,28043,28045,28046,28047,28048,28050, +28051,28052,28054,28055,28056,28058,28059,28060,28062,28063,28064,28066,28067, +28068,28069,28071,28072,28073,28075,28076,28077,28079,28080,28081,28083,28084, +28085,28086,28088,28089,28090,28092,28093,28094,28096,28097,28098,28100,28101, +28102,28104,28105,28106,28107,28109,28110,28111,28113,28114,28115,28117,28118, +28119,28121,28122,28123,28124,28126,28127,28128,28130,28131,28132,28134,28135, +28136,28138,28139,28140,28141,28143,28144,28145,28147,28148,28149,28151,28152, +28153,28155,28156,28157,28158,28160,28161,28162,28164,28165,28166,28168,28169, +28170,28171,28173,28174,28175,28177,28178,28179,28181,28182,28183,28185,28186, +28187,28188,28190,28191,28192,28194,28195,28196,28198,28199,28200,28201,28203, +28204,28205,28207,28208,28209,28211,28212,28213,28215,28216,28217,28218,28220, +28221,28222,28224,28225,28226,28228,28229,28230,28231,28233,28234,28235,28237, +28238,28239,28241,28242,28243,28244,28246,28247,28248,28250,28251,28252,28254, +28255,28256,28257,28259,28260,28261,28263,28264,28265,28267,28268,28269,28270, +28272,28273,28274,28276,28277,28278,28280,28281,28282,28283,28285,28286,28287, +28289,28290,28291,28293,28294,28295,28296,28298,28299,28300,28302,28303,28304, +28306,28307,28308,28309,28311,28312,28313,28315,28316,28317,28319,28320,28321, +28322,28324,28325,28326,28328,28329,28330,28331,28333,28334,28335,28337,28338, +28339,28341,28342,28343,28344,28346,28347,28348,28350,28351,28352,28353,28355, +28356,28357,28359,28360,28361,28363,28364,28365,28366,28368,28369,28370,28372, +28373,28374,28375,28377,28378,28379,28381,28382,28383,28385,28386,28387,28388, +28390,28391,28392,28394,28395,28396,28397,28399,28400,28401,28403,28404,28405, +28407,28408,28409,28410,28412,28413,28414,28416,28417,28418,28419,28421,28422, +28423,28425,28426,28427,28428,28430,28431,28432,28434,28435,28436,28438,28439, +28440,28441,28443,28444,28445,28447,28448,28449,28450,28452,28453,28454,28456, +28457,28458,28459,28461,28462,28463,28465,28466,28467,28468,28470,28471,28472, +28474,28475,28476,28477,28479,28480,28481,28483,28484,28485,28486,28488,28489, +28490,28492,28493,28494,28495,28497,28498,28499,28501,28502,28503,28504,28506, +28507,28508,28510,28511,28512,28514,28515,28516,28517,28519,28520,28521,28523, +28524,28525,28526,28528,28529,28530,28531,28533,28534,28535,28537,28538,28539, +28540,28542,28543,28544,28546,28547,28548,28549,28551,28552,28553,28555,28556, +28557,28558,28560,28561,28562,28564,28565,28566,28567,28569,28570,28571,28573, +28574,28575,28576,28578,28579,28580,28582,28583,28584,28585,28587,28588,28589, +28591,28592,28593,28594,28596,28597,28598,28599,28601,28602,28603,28605,28606, +28607,28608,28610,28611,28612,28614,28615,28616,28617,28619,28620,28621,28623, +28624,28625,28626,28628,28629,28630,28632,28633,28634,28635,28637,28638,28639, +28640,28642,28643,28644,28646,28647,28648,28649,28651,28652,28653,28655,28656, +28657,28658,28660,28661,28662,28663,28665,28666,28667,28669,28670,28671,28672, +28674,28675,28676,28678,28679,28680,28681,28683,28684,28685,28686,28688,28689, +28690,28692,28693,28694,28695,28697,28698,28699,28700,28702,28703,28704,28706, +28707,28708,28709,28711,28712,28713,28715,28716,28717,28718,28720,28721,28722, +28723,28725,28726,28727,28729,28730,28731,28732,28734,28735,28736,28737,28739, +28740,28741,28743,28744,28745,28746,28748,28749,28750,28751,28753,28754,28755, +28757,28758,28759,28760,28762,28763,28764,28765,28767,28768,28769,28771,28772, +28773,28774,28776,28777,28778,28779,28781,28782,28783,28785,28786,28787,28788, +28790,28791,28792,28793,28795,28796,28797,28798,28800,28801,28802,28804,28805, +28806,28807,28809,28810,28811,28812,28814,28815,28816,28818,28819,28820,28821, +28823,28824,28825,28826,28828,28829,28830,28831,28833,28834,28835,28837,28838, +28839,28840,28842,28843,28844,28845,28847,28848,28849,28851,28852,28853,28854, +28856,28857,28858,28859,28861,28862,28863,28864,28866,28867,28868,28870,28871, +28872,28873,28875,28876,28877,28878,28880,28881,28882,28883,28885,28886,28887, +28888,28890,28891,28892,28894,28895,28896,28897,28899,28900,28901,28902,28904, +28905,28906,28907,28909,28910,28911,28913,28914,28915,28916,28918,28919,28920, +28921,28923,28924,28925,28926,28928,28929,28930,28931,28933,28934,28935,28937, +28938,28939,28940,28942,28943,28944,28945,28947,28948,28949,28950,28952,28953, +28954,28955,28957,28958,28959,28960,28962,28963,28964,28966,28967,28968,28969, +28971,28972,28973,28974,28976,28977,28978,28979,28981,28982,28983,28984,28986, +28987,28988,28989,28991,28992,28993,28995,28996,28997,28998,29000,29001,29002, +29003,29005,29006,29007,29008,29010,29011,29012,29013,29015,29016,29017,29018, +29020,29021,29022,29023,29025,29026,29027,29028,29030,29031,29032,29034,29035, +29036,29037,29039,29040,29041,29042,29044,29045,29046,29047,29049,29050,29051, +29052,29054,29055,29056,29057,29059,29060,29061,29062,29064,29065,29066,29067, +29069,29070,29071,29072,29074,29075,29076,29077,29079,29080,29081,29083,29084, +29085,29086,29088,29089,29090,29091,29093,29094,29095,29096,29098,29099,29100, +29101,29103,29104,29105,29106,29108,29109,29110,29111,29113,29114,29115,29116, +29118,29119,29120,29121,29123,29124,29125,29126,29128,29129,29130,29131,29133, +29134,29135,29136,29138,29139,29140,29141,29143,29144,29145,29146,29148,29149, +29150,29151,29153,29154,29155,29156,29158,29159,29160,29161,29163,29164,29165, +29166,29168,29169,29170,29171,29173,29174,29175,29176,29178,29179,29180,29181, +29183,29184,29185,29186,29188,29189,29190,29191,29193,29194,29195,29196,29198, +29199,29200,29201,29203,29204,29205,29206,29208,29209,29210,29211,29213,29214, +29215,29216,29218,29219,29220,29221,29223,29224,29225,29226,29228,29229,29230, +29231,29233,29234,29235,29236,29238,29239,29240,29241,29243,29244,29245,29246, +29248,29249,29250,29251,29253,29254,29255,29256,29258,29259,29260,29261,29262, +29264,29265,29266,29267,29269,29270,29271,29272,29274,29275,29276,29277,29279, +29280,29281,29282,29284,29285,29286,29287,29289,29290,29291,29292,29294,29295, +29296,29297,29299,29300,29301,29302,29304,29305,29306,29307,29309,29310,29311, +29312,29313,29315,29316,29317,29318,29320,29321,29322,29323,29325,29326,29327, +29328,29330,29331,29332,29333,29335,29336,29337,29338,29340,29341,29342,29343, +29345,29346,29347,29348,29349,29351,29352,29353,29354,29356,29357,29358,29359, +29361,29362,29363,29364,29366,29367,29368,29369,29371,29372,29373,29374,29376, +29377,29378,29379,29380,29382,29383,29384,29385,29387,29388,29389,29390,29392, +29393,29394,29395,29397,29398,29399,29400,29402,29403,29404,29405,29406,29408, +29409,29410,29411,29413,29414,29415,29416,29418,29419,29420,29421,29423,29424, +29425,29426,29428,29429,29430,29431,29432,29434,29435,29436,29437,29439,29440, +29441,29442,29444,29445,29446,29447,29449,29450,29451,29452,29453,29455,29456, +29457,29458,29460,29461,29462,29463,29465,29466,29467,29468,29470,29471,29472, +29473,29474,29476,29477,29478,29479,29481,29482,29483,29484,29486,29487,29488, +29489,29490,29492,29493,29494,29495,29497,29498,29499,29500,29502,29503,29504, +29505,29507,29508,29509,29510,29511,29513,29514,29515,29516,29518,29519,29520, +29521,29523,29524,29525,29526,29527,29529,29530,29531,29532,29534,29535,29536, +29537,29539,29540,29541,29542,29543,29545,29546,29547,29548,29550,29551,29552, +29553,29555,29556,29557,29558,29559,29561,29562,29563,29564,29566,29567,29568, +29569,29570,29572,29573,29574,29575,29577,29578,29579,29580,29582,29583,29584, +29585,29586,29588,29589,29590,29591,29593,29594,29595,29596,29598,29599,29600, +29601,29602,29604,29605,29606,29607,29609,29610,29611,29612,29613,29615,29616, +29617,29618,29620,29621,29622,29623,29625,29626,29627,29628,29629,29631,29632, +29633,29634,29636,29637,29638,29639,29640,29642,29643,29644,29645,29647,29648, +29649,29650,29651,29653,29654,29655,29656,29658,29659,29660,29661,29662,29664, +29665,29666,29667,29669,29670,29671,29672,29673,29675,29676,29677,29678,29680, +29681,29682,29683,29685,29686,29687,29688,29689,29691,29692,29693,29694,29696, +29697,29698,29699,29700,29702,29703,29704,29705,29707,29708,29709,29710,29711, +29713,29714,29715,29716,29718,29719,29720,29721,29722,29724,29725,29726,29727, +29728,29730,29731,29732,29733,29735,29736,29737,29738,29739,29741,29742,29743, +29744,29746,29747,29748,29749,29750,29752,29753,29754,29755,29757,29758,29759, +29760,29761,29763,29764,29765,29766,29768,29769,29770,29771,29772,29774,29775, +29776,29777,29778,29780,29781,29782,29783,29785,29786,29787,29788,29789,29791, +29792,29793,29794,29796,29797,29798,29799,29800,29802,29803,29804,29805,29806, +29808,29809,29810,29811,29813,29814,29815,29816,29817,29819,29820,29821,29822, +29824,29825,29826,29827,29828,29830,29831,29832,29833,29834,29836,29837,29838, +29839,29841,29842,29843,29844,29845,29847,29848,29849,29850,29851,29853,29854, +29855,29856,29858,29859,29860,29861,29862,29864,29865,29866,29867,29868,29870, +29871,29872,29873,29875,29876,29877,29878,29879,29881,29882,29883,29884,29885, +29887,29888,29889,29890,29892,29893,29894,29895,29896,29898,29899,29900,29901, +29902,29904,29905,29906,29907,29908,29910,29911,29912,29913,29915,29916,29917, +29918,29919,29921,29922,29923,29924,29925,29927,29928,29929,29930,29931,29933, +29934,29935,29936,29938,29939,29940,29941,29942,29944,29945,29946,29947,29948, +29950,29951,29952,29953,29954,29956,29957,29958,29959,29961,29962,29963,29964, +29965,29967,29968,29969,29970,29971,29973,29974,29975,29976,29977,29979,29980, +29981,29982,29983,29985,29986,29987,29988,29990,29991,29992,29993,29994,29996, +29997,29998,29999,30000,30002,30003,30004,30005,30006,30008,30009,30010,30011, +30012,30014,30015,30016,30017,30018,30020,30021,30022,30023,30025,30026,30027, +30028,30029,30031,30032,30033,30034,30035,30037,30038,30039,30040,30041,30043, +30044,30045,30046,30047,30049,30050,30051,30052,30053,30055,30056,30057,30058, +30059,30061,30062,30063,30064,30065,30067,30068,30069,30070,30072,30073,30074, +30075,30076,30078,30079,30080,30081,30082,30084,30085,30086,30087,30088,30090, +30091,30092,30093,30094,30096,30097,30098,30099,30100,30102,30103,30104,30105, +30106,30108,30109,30110,30111,30112,30114,30115,30116,30117,30118,30120,30121, +30122,30123,30124,30126,30127,30128,30129,30130,30132,30133,30134,30135,30136, +30138,30139,30140,30141,30142,30144,30145,30146,30147,30148,30150,30151,30152, +30153,30154,30156,30157,30158,30159,30160,30162,30163,30164,30165,30166,30168, +30169,30170,30171,30172,30174,30175,30176,30177,30178,30180,30181,30182,30183, +30184,30186,30187,30188,30189,30190,30192,30193,30194,30195,30196,30198,30199, +30200,30201,30202,30204,30205,30206,30207,30208,30209,30211,30212,30213,30214, +30215,30217,30218,30219,30220,30221,30223,30224,30225,30226,30227,30229,30230, +30231,30232,30233,30235,30236,30237,30238,30239,30241,30242,30243,30244,30245, +30247,30248,30249,30250,30251,30253,30254,30255,30256,30257,30259,30260,30261, +30262,30263,30264,30266,30267,30268,30269,30270,30272,30273,30274,30275,30276, +30278,30279,30280,30281,30282,30284,30285,30286,30287,30288,30290,30291,30292, +30293,30294,30295,30297,30298,30299,30300,30301,30303,30304,30305,30306,30307, +30309,30310,30311,30312,30313,30315,30316,30317,30318,30319,30321,30322,30323, +30324,30325,30326,30328,30329,30330,30331,30332,30334,30335,30336,30337,30338, +30340,30341,30342,30343,30344,30346,30347,30348,30349,30350,30351,30353,30354, +30355,30356,30357,30359,30360,30361,30362,30363,30365,30366,30367,30368,30369, +30370,30372,30373,30374,30375,30376,30378,30379,30380,30381,30382,30384,30385, +30386,30387,30388,30390,30391,30392,30393,30394,30395,30397,30398,30399,30400, +30401,30403,30404,30405,30406,30407,30408,30410,30411,30412,30413,30414,30416, +30417,30418,30419,30420,30422,30423,30424,30425,30426,30427,30429,30430,30431, +30432,30433,30435,30436,30437,30438,30439,30441,30442,30443,30444,30445,30446, +30448,30449,30450,30451,30452,30454,30455,30456,30457,30458,30459,30461,30462, +30463,30464,30465,30467,30468,30469,30470,30471,30472,30474,30475,30476,30477, +30478,30480,30481,30482,30483,30484,30486,30487,30488,30489,30490,30491,30493, +30494,30495,30496,30497,30499,30500,30501,30502,30503,30504,30506,30507,30508, +30509,30510,30512,30513,30514,30515,30516,30517,30519,30520,30521,30522,30523, +30525,30526,30527,30528,30529,30530,30532,30533,30534,30535,30536,30538,30539, +30540,30541,30542,30543,30545,30546,30547,30548,30549,30550,30552,30553,30554, +30555,30556,30558,30559,30560,30561,30562,30563,30565,30566,30567,30568,30569, +30571,30572,30573,30574,30575,30576,30578,30579,30580,30581,30582,30584,30585, +30586,30587,30588,30589,30591,30592,30593,30594,30595,30596,30598,30599,30600, +30601,30602,30604,30605,30606,30607,30608,30609,30611,30612,30613,30614,30615, +30616,30618,30619,30620,30621,30622,30624,30625,30626,30627,30628,30629,30631, +30632,30633,30634,30635,30636,30638,30639,30640,30641,30642,30644,30645,30646, +30647,30648,30649,30651,30652,30653,30654,30655,30656,30658,30659,30660,30661, +30662,30663,30665,30666,30667,30668,30669,30671,30672,30673,30674,30675,30676, +30678,30679,30680,30681,30682,30683,30685,30686,30687,30688,30689,30690,30692, +30693,30694,30695,30696,30698,30699,30700,30701,30702,30703,30705,30706,30707, +30708,30709,30710,30712,30713,30714,30715,30716,30717,30719,30720,30721,30722, +30723,30724,30726,30727,30728,30729,30730,30732,30733,30734,30735,30736,30737, +30739,30740,30741,30742,30743,30744,30746,30747,30748,30749,30750,30751,30753, +30754,30755,30756,30757,30758,30760,30761,30762,30763,30764,30765,30767,30768, +30769,30770,30771,30772,30774,30775,30776,30777,30778,30779,30781,30782,30783, +30784,30785,30786,30788,30789,30790,30791,30792,30794,30795,30796,30797,30798, +30799,30801,30802,30803,30804,30805,30806,30808,30809,30810,30811,30812,30813, +30815,30816,30817,30818,30819,30820,30822,30823,30824,30825,30826,30827,30829, +30830,30831,30832,30833,30834,30836,30837,30838,30839,30840,30841,30843,30844, +30845,30846,30847,30848,30850,30851,30852,30853,30854,30855,30857,30858,30859, +30860,30861,30862,30864,30865,30866,30867,30868,30869,30870,30872,30873,30874, +30875,30876,30877,30879,30880,30881,30882,30883,30884,30886,30887,30888,30889, +30890,30891,30893,30894,30895,30896,30897,30898,30900,30901,30902,30903,30904, +30905,30907,30908,30909,30910,30911,30912,30914,30915,30916,30917,30918,30919, +30921,30922,30923,30924,30925,30926,30927,30929,30930,30931,30932,30933,30934, +30936,30937,30938,30939,30940,30941,30943,30944,30945,30946,30947,30948,30950, +30951,30952,30953,30954,30955,30957,30958,30959,30960,30961,30962,30963,30965, +30966,30967,30968,30969,30970,30972,30973,30974,30975,30976,30977,30979,30980, +30981,30982,30983,30984,30986,30987,30988,30989,30990,30991,30992,30994,30995, +30996,30997,30998,30999,31001,31002,31003,31004,31005,31006,31008,31009,31010, +31011,31012,31013,31014,31016,31017,31018,31019,31020,31021,31023,31024,31025, +31026,31027,31028,31030,31031,31032,31033,31034,31035,31036,31038,31039,31040, +31041,31042,31043,31045,31046,31047,31048,31049,31050,31051,31053,31054,31055, +31056,31057,31058,31060,31061,31062,31063,31064,31065,31067,31068,31069,31070, +31071,31072,31073,31075,31076,31077,31078,31079,31080,31082,31083,31084,31085, +31086,31087,31088,31090,31091,31092,31093,31094,31095,31097,31098,31099,31100, +31101,31102,31103,31105,31106,31107,31108,31109,31110,31112,31113,31114,31115, +31116,31117,31118,31120,31121,31122,31123,31124,31125,31127,31128,31129,31130, +31131,31132,31133,31135,31136,31137,31138,31139,31140,31141,31143,31144,31145, +31146,31147,31148,31150,31151,31152,31153,31154,31155,31156,31158,31159,31160, +31161,31162,31163,31165,31166,31167,31168,31169,31170,31171,31173,31174,31175, +31176,31177,31178,31179,31181,31182,31183,31184,31185,31186,31188,31189,31190, +31191,31192,31193,31194,31196,31197,31198,31199,31200,31201,31202,31204,31205, +31206,31207,31208,31209,31211,31212,31213,31214,31215,31216,31217,31219,31220, +31221,31222,31223,31224,31225,31227,31228,31229,31230,31231,31232,31233,31235, +31236,31237,31238,31239,31240,31242,31243,31244,31245,31246,31247,31248,31250, +31251,31252,31253,31254,31255,31256,31258,31259,31260,31261,31262,31263,31264, +31266,31267,31268,31269,31270,31271,31272,31274,31275,31276,31277,31278,31279, +31280,31282,31283,31284,31285,31286,31287,31289,31290,31291,31292,31293,31294, +31295,31297,31298,31299,31300,31301,31302,31303,31305,31306,31307,31308,31309, +31310,31311,31313,31314,31315,31316,31317,31318,31319,31321,31322,31323,31324, +31325,31326,31327,31329,31330,31331,31332,31333,31334,31335,31337,31338,31339, +31340,31341,31342,31343,31345,31346,31347,31348,31349,31350,31351,31353,31354, +31355,31356,31357,31358,31359,31361,31362,31363,31364,31365,31366,31367,31369, +31370,31371,31372,31373,31374,31375,31377,31378,31379,31380,31381,31382,31383, +31385,31386,31387,31388,31389,31390,31391,31392,31394,31395,31396,31397,31398, +31399,31400,31402,31403,31404,31405,31406,31407,31408,31410,31411,31412,31413, +31414,31415,31416,31418,31419,31420,31421,31422,31423,31424,31426,31427,31428, +31429,31430,31431,31432,31434,31435,31436,31437,31438,31439,31440,31441,31443, +31444,31445,31446,31447,31448,31449,31451,31452,31453,31454,31455,31456,31457, +31459,31460,31461,31462,31463,31464,31465,31466,31468,31469,31470,31471,31472, +31473,31474,31476,31477,31478,31479,31480,31481,31482,31484,31485,31486,31487, +31488,31489,31490,31491,31493,31494,31495,31496,31497,31498,31499,31501,31502, +31503,31504,31505,31506,31507,31509,31510,31511,31512,31513,31514,31515,31516, +31518,31519,31520,31521,31522,31523,31524,31526,31527,31528,31529,31530,31531, +31532,31533,31535,31536,31537,31538,31539,31540,31541,31543,31544,31545,31546, +31547,31548,31549,31550,31552,31553,31554,31555,31556,31557,31558,31560,31561, +31562,31563,31564,31565,31566,31567,31569,31570,31571,31572,31573,31574,31575, +31577,31578,31579,31580,31581,31582,31583,31584,31586,31587,31588,31589,31590, +31591,31592,31594,31595,31596,31597,31598,31599,31600,31601,31603,31604,31605, +31606,31607,31608,31609,31610,31612,31613,31614,31615,31616,31617,31618,31620, +31621,31622,31623,31624,31625,31626,31627,31629,31630,31631,31632,31633,31634, +31635,31636,31638,31639,31640,31641,31642,31643,31644,31645,31647,31648,31649, +31650,31651,31652,31653,31655,31656,31657,31658,31659,31660,31661,31662,31664, +31665,31666,31667,31668,31669,31670,31671,31673,31674,31675,31676,31677,31678, +31679,31680,31682,31683,31684,31685,31686,31687,31688,31689,31691,31692,31693, +31694,31695,31696,31697,31698,31700,31701,31702,31703,31704,31705,31706,31707, +31709,31710,31711,31712,31713,31714,31715,31717,31718,31719,31720,31721,31722, +31723,31724,31726,31727,31728,31729,31730,31731,31732,31733,31735,31736,31737, +31738,31739,31740,31741,31742,31744,31745,31746,31747,31748,31749,31750,31751, +31753,31754,31755,31756,31757,31758,31759,31760,31761,31763,31764,31765,31766, +31767,31768,31769,31770,31772,31773,31774,31775,31776,31777,31778,31779,31781, +31782,31783,31784,31785,31786,31787,31788,31790,31791,31792,31793,31794,31795, +31796,31797,31799,31800,31801,31802,31803,31804,31805,31806,31808,31809,31810, +31811,31812,31813,31814,31815,31816,31818,31819,31820,31821,31822,31823,31824, +31825,31827,31828,31829,31830,31831,31832,31833,31834,31836,31837,31838,31839, +31840,31841,31842,31843,31845,31846,31847,31848,31849,31850,31851,31852,31853, +31855,31856,31857,31858,31859,31860,31861,31862,31864,31865,31866,31867,31868, +31869,31870,31871,31872,31874,31875,31876,31877,31878,31879,31880,31881,31883, +31884,31885,31886,31887,31888,31889,31890,31892,31893,31894,31895,31896,31897, +31898,31899,31900,31902,31903,31904,31905,31906,31907,31908,31909,31910,31912, +31913,31914,31915,31916,31917,31918,31919,31921,31922,31923,31924,31925,31926, +31927,31928,31929,31931,31932,31933,31934,31935,31936,31937,31938,31940,31941, +31942,31943,31944,31945,31946,31947,31948,31950,31951,31952,31953,31954,31955, +31956,31957,31958,31960,31961,31962,31963,31964,31965,31966,31967,31969,31970, +31971,31972,31973,31974,31975,31976,31977,31979,31980,31981,31982,31983,31984, +31985,31986,31987,31989,31990,31991,31992,31993,31994,31995,31996,31997,31999, +32000,32001,32002,32003,32004,32005,32006,32007,32009,32010,32011,32012,32013, +32014,32015,32016,32018,32019,32020,32021,32022,32023,32024,32025,32026,32028, +32029,32030,32031,32032,32033,32034,32035,32036,32038,32039,32040,32041,32042, +32043,32044,32045,32046,32048,32049,32050,32051,32052,32053,32054,32055,32056, +32058,32059,32060,32061,32062,32063,32064,32065,32066,32068,32069,32070,32071, +32072,32073,32074,32075,32076,32078,32079,32080,32081,32082,32083,32084,32085, +32086,32087,32089,32090,32091,32092,32093,32094,32095,32096,32097,32099,32100, +32101,32102,32103,32104,32105,32106,32107,32109,32110,32111,32112,32113,32114, +32115,32116,32117,32119,32120,32121,32122,32123,32124,32125,32126,32127,32129, +32130,32131,32132,32133,32134,32135,32136,32137,32138,32140,32141,32142,32143, +32144,32145,32146,32147,32148,32150,32151,32152,32153,32154,32155,32156,32157, +32158,32160,32161,32162,32163,32164,32165,32166,32167,32168,32169,32171,32172, +32173,32174,32175,32176,32177,32178,32179,32181,32182,32183,32184,32185,32186, +32187,32188,32189,32190,32192,32193,32194,32195,32196,32197,32198,32199,32200, +32202,32203,32204,32205,32206,32207,32208,32209,32210,32211,32213,32214,32215, +32216,32217,32218,32219,32220,32221,32222,32224,32225,32226,32227,32228,32229, +32230,32231,32232,32234,32235,32236,32237,32238,32239,32240,32241,32242,32243, +32245,32246,32247,32248,32249,32250,32251,32252,32253,32254,32256,32257,32258, +32259,32260,32261,32262,32263,32264,32265,32267,32268,32269,32270,32271,32272, +32273,32274,32275,32276,32278,32279,32280,32281,32282,32283,32284,32285,32286, +32287,32289,32290,32291,32292,32293,32294,32295,32296,32297,32299,32300,32301, +32302,32303,32304,32305,32306,32307,32308,32310,32311,32312,32313,32314,32315, +32316,32317,32318,32319,32320,32322,32323,32324,32325,32326,32327,32328,32329, +32330,32331,32333,32334,32335,32336,32337,32338,32339,32340,32341,32342,32344, +32345,32346,32347,32348,32349,32350,32351,32352,32353,32355,32356,32357,32358, +32359,32360,32361,32362,32363,32364,32366,32367,32368,32369,32370,32371,32372, +32373,32374,32375,32376,32378,32379,32380,32381,32382,32383,32384,32385,32386, +32387,32389,32390,32391,32392,32393,32394,32395,32396,32397,32398,32400,32401, +32402,32403,32404,32405,32406,32407,32408,32409,32410,32412,32413,32414,32415, +32416,32417,32418,32419,32420,32421,32423,32424,32425,32426,32427,32428,32429, +32430,32431,32432,32433,32435,32436,32437,32438,32439,32440,32441,32442,32443, +32444,32446,32447,32448,32449,32450,32451,32452,32453,32454,32455,32456,32458, +32459,32460,32461,32462,32463,32464,32465,32466,32467,32468,32470,32471,32472, +32473,32474,32475,32476,32477,32478,32479,32480,32482,32483,32484,32485,32486, +32487,32488,32489,32490,32491,32493,32494,32495,32496,32497,32498,32499,32500, +32501,32502,32503,32505,32506,32507,32508,32509,32510,32511,32512,32513,32514, +32515,32517,32518,32519,32520,32521,32522,32523,32524,32525,32526,32527,32529, +32530,32531,32532,32533,32534,32535,32536,32537,32538,32539,32541,32542,32543, +32544,32545,32546,32547,32548,32549,32550,32551,32552,32554,32555,32556,32557, +32558,32559,32560,32561,32562,32563,32564,32566,32567,32568,32569,32570,32571, +32572,32573,32574,32575,32576,32578,32579,32580,32581,32582,32583,32584,32585, +32586,32587,32588,32590,32591,32592,32593,32594,32595,32596,32597,32598,32599, +32600,32601,32603,32604,32605,32606,32607,32608,32609,32610,32611,32612,32613, +32615,32616,32617,32618,32619,32620,32621,32622,32623,32624,32625,32626,32628, +32629,32630,32631,32632,32633,32634,32635,32636,32637,32638,32639,32641,32642, +32643,32644,32645,32646,32647,32648,32649,32650,32651,32653,32654,32655,32656, +32657,32658,32659,32660,32661,32662,32663,32664,32666,32667,32668,32669,32670, +32671,32672,32673,32674,32675,32676,32677,32679,32680,32681,32682,32683,32684, +32685,32686,32687,32688,32689,32690,32692,32693,32694,32695,32696,32697,32698, +32699,32700,32701,32702,32703,32705,32706,32707,32708,32709,32710,32711,32712, +32713,32714,32715,32716,32718,32719,32720,32721,32722,32723,32724,32725,32726, +32727,32728,32729,32731,32732,32733,32734,32735,32736,32737,32738,32739,32740, +32741,32742,32744,32745,32746,32747,32748,32749,32750,32751,32752,32753,32754, +32755,32756,32758,32759,32760,32761,32762,32763,32764,32765,32766,32767,32768, +32769,32771,32772,32773,32774,32775,32776,32777,32778,32779,32780,32781,32782, +32783,32785,32786,32787,32788,32789,32790,32791,32792,32793,32794,32795,32796, +32798,32799,32800,32801,32802,32803,32804,32805,32806,32807,32808,32809,32810, +32812,32813,32814,32815,32816,32817,32818,32819,32820,32821,32822,32823,32824, +32826,32827,32828,32829,32830,32831,32832,32833,32834,32835,32836,32837,32839, +32840,32841,32842,32843,32844,32845,32846,32847,32848,32849,32850,32851,32853, +32854,32855,32856,32857,32858,32859,32860,32861,32862,32863,32864,32865,32867, +32868,32869,32870,32871,32872,32873,32874,32875,32876,32877,32878,32879,32880, +32882,32883,32884,32885,32886,32887,32888,32889,32890,32891,32892,32893,32894, +32896,32897,32898,32899,32900,32901,32902,32903,32904,32905,32906,32907,32908, +32910,32911,32912,32913,32914,32915,32916,32917,32918,32919,32920,32921,32922, +32923,32925,32926,32927,32928,32929,32930,32931,32932,32933,32934,32935,32936, +32937,32939,32940,32941,32942,32943,32944,32945,32946,32947,32948,32949,32950, +32951,32952,32954,32955,32956,32957,32958,32959,32960,32961,32962,32963,32964, +32965,32966,32967,32969,32970,32971,32972,32973,32974,32975,32976,32977,32978, +32979,32980,32981,32982,32984,32985,32986,32987,32988,32989,32990,32991,32992, +32993,32994,32995,32996,32997,32999,33000,33001,33002,33003,33004,33005,33006, +33007,33008,33009,33010,33011,33012,33014,33015,33016,33017,33018,33019,33020, +33021,33022,33023,33024,33025,33026,33027,33029,33030,33031,33032,33033,33034, +33035,33036,33037,33038,33039,33040,33041,33042,33043,33045,33046,33047,33048, +33049,33050,33051,33052,33053,33054,33055,33056,33057,33058,33060,33061,33062, +33063,33064,33065,33066,33067,33068,33069,33070,33071,33072,33073,33074,33076, +33077,33078,33079,33080,33081,33082,33083,33084,33085,33086,33087,33088,33089, +33090,33092,33093,33094,33095,33096,33097,33098,33099,33100,33101,33102,33103, +33104,33105,33106,33108,33109,33110,33111,33112,33113,33114,33115,33116,33117, +33118,33119,33120,33121,33122,33124,33125,33126,33127,33128,33129,33130,33131, +33132,33133,33134,33135,33136,33137,33138,33140,33141,33142,33143,33144,33145, +33146,33147,33148,33149,33150,33151,33152,33153,33154,33155,33157,33158,33159, +33160,33161,33162,33163,33164,33165,33166,33167,33168,33169,33170,33171,33173, +33174,33175,33176,33177,33178,33179,33180,33181,33182,33183,33184,33185,33186, +33187,33188,33190,33191,33192,33193,33194,33195,33196,33197,33198,33199,33200, +33201,33202,33203,33204,33205,33207,33208,33209,33210,33211,33212,33213,33214, +33215,33216,33217,33218,33219,33220,33221,33222,33224,33225,33226,33227,33228, +33229,33230,33231,33232,33233,33234,33235,33236,33237,33238,33239,33241,33242, +33243,33244,33245,33246,33247,33248,33249,33250,33251,33252,33253,33254,33255, +33256,33257,33259,33260,33261,33262,33263,33264,33265,33266,33267,33268,33269, +33270,33271,33272,33273,33274,33276,33277,33278,33279,33280,33281,33282,33283, +33284,33285,33286,33287,33288,33289,33290,33291,33292,33294,33295,33296,33297, +33298,33299,33300,33301,33302,33303,33304,33305,33306,33307,33308,33309,33310, +33312,33313,33314,33315,33316,33317,33318,33319,33320,33321,33322,33323,33324, +33325,33326,33327,33328,33329,33331,33332,33333,33334,33335,33336,33337,33338, +33339,33340,33341,33342,33343,33344,33345,33346,33347,33349,33350,33351,33352, +33353,33354,33355,33356,33357,33358,33359,33360,33361,33362,33363,33364,33365, +33366,33368,33369,33370,33371,33372,33373,33374,33375,33376,33377,33378,33379, +33380,33381,33382,33383,33384,33385,33387,33388,33389,33390,33391,33392,33393, +33394,33395,33396,33397,33398,33399,33400,33401,33402,33403,33404,33406,33407, +33408,33409,33410,33411,33412,33413,33414,33415,33416,33417,33418,33419,33420, +33421,33422,33423,33424,33426,33427,33428,33429,33430,33431,33432,33433,33434, +33435,33436,33437,33438,33439,33440,33441,33442,33443,33445,33446,33447,33448, +33449,33450,33451,33452,33453,33454,33455,33456,33457,33458,33459,33460,33461, +33462,33463,33465,33466,33467,33468,33469,33470,33471,33472,33473,33474,33475, +33476,33477,33478,33479,33480,33481,33482,33483,33484,33486,33487,33488,33489, +33490,33491,33492,33493,33494,33495,33496,33497,33498,33499,33500,33501,33502, +33503,33504,33505,33507,33508,33509,33510,33511,33512,33513,33514,33515,33516, +33517,33518,33519,33520,33521,33522,33523,33524,33525,33526,33528,33529,33530, +33531,33532,33533,33534,33535,33536,33537,33538,33539,33540,33541,33542,33543, +33544,33545,33546,33547,33549,33550,33551,33552,33553,33554,33555,33556,33557, +33558,33559,33560,33561,33562,33563,33564,33565,33566,33567,33568,33569,33571, +33572,33573,33574,33575,33576,33577,33578,33579,33580,33581,33582,33583,33584, +33585,33586,33587,33588,33589,33590,33591,33593,33594,33595,33596,33597,33598, +33599,33600,33601,33602,33603,33604,33605,33606,33607,33608,33609,33610,33611, +33612,33613,33615,33616,33617,33618,33619,33620,33621,33622,33623,33624,33625, +33626,33627,33628,33629,33630,33631,33632,33633,33634,33635,33636,33638,33639, +33640,33641,33642,33643,33644,33645,33646,33647,33648,33649,33650,33651,33652, +33653,33654,33655,33656,33657,33658,33659,33661,33662,33663,33664,33665,33666, +33667,33668,33669,33670,33671,33672,33673,33674,33675,33676,33677,33678,33679, +33680,33681,33682,33683,33685,33686,33687,33688,33689,33690,33691,33692,33693, +33694,33695,33696,33697,33698,33699,33700,33701,33702,33703,33704,33705,33706, +33707,33709,33710,33711,33712,33713,33714,33715,33716,33717,33718,33719,33720, +33721,33722,33723,33724,33725,33726,33727,33728,33729,33730,33731,33732,33734, +33735,33736,33737,33738,33739,33740,33741,33742,33743,33744,33745,33746,33747, +33748,33749,33750,33751,33752,33753,33754,33755,33756,33757,33758,33760,33761, +33762,33763,33764,33765,33766,33767,33768,33769,33770,33771,33772,33773,33774, +33775,33776,33777,33778,33779,33780,33781,33782,33783,33784,33786,33787,33788, +33789,33790,33791,33792,33793,33794,33795,33796,33797,33798,33799,33800,33801, +33802,33803,33804,33805,33806,33807,33808,33809,33810,33812,33813,33814,33815, +33816,33817,33818,33819,33820,33821,33822,33823,33824,33825,33826,33827,33828, +33829,33830,33831,33832,33833,33834,33835,33836,33837,33838,33840,33841,33842, +33843,33844,33845,33846,33847,33848,33849,33850,33851,33852,33853,33854,33855, +33856,33857,33858,33859,33860,33861,33862,33863,33864,33865,33866,33868,33869, +33870,33871,33872,33873,33874,33875,33876,33877,33878,33879,33880,33881,33882, +33883,33884,33885,33886,33887,33888,33889,33890,33891,33892,33893,33894,33895, +33897,33898,33899,33900,33901,33902,33903,33904,33905,33906,33907,33908,33909, +33910,33911,33912,33913,33914,33915,33916,33917,33918,33919,33920,33921,33922, +33923,33924,33925,33927,33928,33929,33930,33931,33932,33933,33934,33935,33936, +33937,33938,33939,33940,33941,33942,33943,33944,33945,33946,33947,33948,33949, +33950,33951,33952,33953,33954,33955,33956,33958,33959,33960,33961,33962,33963, +33964,33965,33966,33967,33968,33969,33970,33971,33972,33973,33974,33975,33976, +33977,33978,33979,33980,33981,33982,33983,33984,33985,33986,33987,33988,33990, +33991,33992,33993,33994,33995,33996,33997,33998,33999,34000,34001,34002,34003, +34004,34005,34006,34007,34008,34009,34010,34011,34012,34013,34014,34015,34016, +34017,34018,34019,34020,34021,34023,34024,34025,34026,34027,34028,34029,34030, +34031,34032,34033,34034,34035,34036,34037,34038,34039,34040,34041,34042,34043, +34044,34045,34046,34047,34048,34049,34050,34051,34052,34053,34054,34055,34056, +34058,34059,34060,34061,34062,34063,34064,34065,34066,34067,34068,34069,34070, +34071,34072,34073,34074,34075,34076,34077,34078,34079,34080,34081,34082,34083, +34084,34085,34086,34087,34088,34089,34090,34091,34092,34094,34095,34096,34097, +34098,34099,34100,34101,34102,34103,34104,34105,34106,34107,34108,34109,34110, +34111,34112,34113,34114,34115,34116,34117,34118,34119,34120,34121,34122,34123, +34124,34125,34126,34127,34128,34129,34130,34132,34133,34134,34135,34136,34137, +34138,34139,34140,34141,34142,34143,34144,34145,34146,34147,34148,34149,34150, +34151,34152,34153,34154,34155,34156,34157,34158,34159,34160,34161,34162,34163, +34164,34165,34166,34167,34168,34169,34170,34171,34173,34174,34175,34176,34177, +34178,34179,34180,34181,34182,34183,34184,34185,34186,34187,34188,34189,34190, +34191,34192,34193,34194,34195,34196,34197,34198,34199,34200,34201,34202,34203, +34204,34205,34206,34207,34208,34209,34210,34211,34212,34213,34214,34216,34217, +34218,34219,34220,34221,34222,34223,34224,34225,34226,34227,34228,34229,34230, +34231,34232,34233,34234,34235,34236,34237,34238,34239,34240,34241,34242,34243, +34244,34245,34246,34247,34248,34249,34250,34251,34252,34253,34254,34255,34256, +34257,34258,34259,34260,34262,34263,34264,34265,34266,34267,34268,34269,34270, +34271,34272,34273,34274,34275,34276,34277,34278,34279,34280,34281,34282,34283, +34284,34285,34286,34287,34288,34289,34290,34291,34292,34293,34294,34295,34296, +34297,34298,34299,34300,34301,34302,34303,34304,34305,34306,34307,34308,34309, +34310,34312,34313,34314,34315,34316,34317,34318,34319,34320,34321,34322,34323, +34324,34325,34326,34327,34328,34329,34330,34331,34332,34333,34334,34335,34336, +34337,34338,34339,34340,34341,34342,34343,34344,34345,34346,34347,34348,34349, +34350,34351,34352,34353,34354,34355,34356,34357,34358,34359,34360,34361,34362, +34363,34364,34365,34366,34368,34369,34370,34371,34372,34373,34374,34375,34376, +34377,34378,34379,34380,34381,34382,34383,34384,34385,34386,34387,34388,34389, +34390,34391,34392,34393,34394,34395,34396,34397,34398,34399,34400,34401,34402, +34403,34404,34405,34406,34407,34408,34409,34410,34411,34412,34413,34414,34415, +34416,34417,34418,34419,34420,34421,34422,34423,34424,34425,34426,34427,34428, +34429,34431,34432,34433,34434,34435,34436,34437,34438,34439,34440,34441,34442, +34443,34444,34445,34446,34447,34448,34449,34450,34451,34452,34453,34454,34455, +34456,34457,34458,34459,34460,34461,34462,34463,34464,34465,34466,34467,34468, +34469,34470,34471,34472,34473,34474,34475,34476,34477,34478,34479,34480,34481, +34482,34483,34484,34485,34486,34487,34488,34489,34490,34491,34492,34493,34494, +34495,34496,34497,34498,34499,34500,34501,34502,34503,34504,34506,34507,34508, +34509,34510,34511,34512,34513,34514,34515,34516,34517,34518,34519,34520,34521, +34522,34523,34524,34525,34526,34527,34528,34529,34530,34531,34532,34533,34534, +34535,34536,34537,34538,34539,34540,34541,34542,34543,34544,34545,34546,34547, +34548,34549,34550,34551,34552,34553,34554,34555,34556,34557,34558,34559,34560, +34561,34562,34563,34564,34565,34566,34567,34568,34569,34570,34571,34572,34573, +34574,34575,34576,34577,34578,34579,34580,34581,34582,34583,34584,34585,34586, +34587,34588,34589,34590,34591,34592,34593,34594,34595,34596,34597,34598,34599, +34600,34601,34602,34603,34605,34606,34607,34608,34609,34610,34611,34612,34613, +34614,34615,34616,34617,34618,34619,34620,34621,34622,34623,34624,34625,34626, +34627,34628,34629,34630,34631,34632,34633,34634,34635,34636,34637,34638,34639, +34640,34641,34642,34643,34644,34645,34646,34647,34648,34649,34650,34651,34652, +34653,34654,34655,34656,34657,34658,34659,34660,34661,34662,34663,34664,34665, +34666,34667,34668,34669,34670,34671,34672,34673,34674,34675,34676,34677,34678, +34679,34680,34681,34682,34683,34684,34685,34686,34687,34688,34689,34690,34691, +34692,34693,34694,34695,34696,34697,34698,34699,34700,34701,34702,34703,34704, +34705,34706,34707,34708,34709,34710,34711,34712,34713,34714,34715,34716,34717, +34718,34719,34720,34721,34722,34723,34724,34725,34726,34727,34728,34729,34730, +34731,34732,34733,34734,34735,34736,34737,34738,34739,34740,34741,34742,34743, +34744,34745,34746,34747,34748,34749,34750,34751,34752,34753,34754,34755,34756, +34757,34758,34759,34760,34761,34762,34763,34764,34765,34766,34767,34768,34769, +34770,34771,34772,34773,34774,34775,34776,34777,34778,34779,34780,34781,34782, +34783,34784,34785,34786,34787,34788,34789,34790,34791,34792,34793,34794,34795, +34796,34797,34798,34799,34800,34801,34802,34803,34804,34805,34806,34807,34808, +34809,34810,34811,34812,34813,34814,34815,34816,34817,34818,34819,34820,34821, +34822,34823,34824,34825,34826,34827,34828,34829,34830,34831,34832,34833,34834, +34835,34836,34837,34838,34839,34840,34841,34842,34843,34844,34845,34846,34847, +34848,34849,34850,34851,34852,34853,34854,34855,34856,34857,34858,34859,34860, +34861,34862,34863,34864,34865,34866,34867,34868,34869,34870,34871,34872,34873, +34874,34875,34876,34877,34878,34879,34880,34881,34882,34883,34884,34885,34886, +34887,34888,34889,34890,34891,34892,34893,34894,34895,34896,34897,34898,34899, +34900,34901,34902,34903,34904,34905,34906,34907,34908,34909,34910,34911,34912, +34913,34914,34915,34916,34917,34918,34919,34920,34921,34922,34923,34924,34925, +34926,34927,34928,34929,34930,34931,34932,34933,34934,34935,34936,34937,34938, +34939,34940,34941,34942,34943,34944,34945,34946,34947,34948,34949,34950,34951, +34952,34953,34954,34955,34956,34957,34958,34959,34960,34961,34962,34963,34964, +34965,34966,34967,34968,34969,34970,34971,34972,34973,34974,34975,34976,34977, +34978,34979,34980,34981,34982,34983,34984,34985,34986,34987,34988,34989,34990, +34991,34992,34993,34994,34995,34996,34997,34998,34999,35000,35001,35002,35003, +35004,35005,35006,35007,35008,35009,35010,35011,35012,35013,35014,35015,35016, +35017,35018,35019,35020,35021,35022,35023,35024,35025,35026,35027,35028,35029, +35030,35031,35032,35033,35034,35035,35036,35037,35038,35039,35040,35041,35042, +35043,35044,35045,35046,35047,35048,35049,35050,35051,35052,35053,35054,35055, +35056,35057,35058,35059,35060,35061,35062,35062,35063,35064,35065,35066,35067, +35068,35069,35070,35071,35072,35073,35074,35075,35076,35077,35078,35079,35080, +35081,35082,35083,35084,35085,35086,35087,35088,35089,35090,35091,35092,35093, +35094,35095,35096,35097,35098,35099,35100,35101,35102,35103,35104,35105,35106, +35107,35108,35109,35110,35111,35112,35113,35114,35115,35116,35117,35118,35119, +35120,35121,35122,35123,35124,35125,35126,35127,35128,35129,35130,35131,35132, +35133,35134,35135,35136,35137,35138,35139,35140,35141,35142,35143,35144,35145, +35146,35147,35148,35149,35150,35151,35152,35153,35154,35155,35156,35157,35158, +35159,35160,35160,35161,35162,35163,35164,35165,35166,35167,35168,35169,35170, +35171,35172,35173,35174,35175,35176,35177,35178,35179,35180,35181,35182,35183, +35184,35185,35186,35187,35188,35189,35190,35191,35192,35193,35194,35195,35196, +35197,35198,35199,35200,35201,35202,35203,35204,35205,35206,35207,35208,35209, +35210,35211,35212,35213,35214,35215,35216,35217,35218,35219,35220,35221,35222, +35223,35224,35225,35226,35227,35228,35229,35230,35231,35232,35233,35234,35235, +35236,35236,35237,35238,35239,35240,35241,35242,35243,35244,35245,35246,35247, +35248,35249,35250,35251,35252,35253,35254,35255,35256,35257,35258,35259,35260, +35261,35262,35263,35264,35265,35266,35267,35268,35269,35270,35271,35272,35273, +35274,35275,35276,35277,35278,35279,35280,35281,35282,35283,35284,35285,35286, +35287,35288,35289,35290,35291,35292,35293,35294,35295,35296,35297,35298,35299, +35299,35300,35301,35302,35303,35304,35305,35306,35307,35308,35309,35310,35311, +35312,35313,35314,35315,35316,35317,35318,35319,35320,35321,35322,35323,35324, +35325,35326,35327,35328,35329,35330,35331,35332,35333,35334,35335,35336,35337, +35338,35339,35340,35341,35342,35343,35344,35345,35346,35347,35348,35349,35350, +35351,35352,35353,35354,35354,35355,35356,35357,35358,35359,35360,35361,35362, +35363,35364,35365,35366,35367,35368,35369,35370,35371,35372,35373,35374,35375, +35376,35377,35378,35379,35380,35381,35382,35383,35384,35385,35386,35387,35388, +35389,35390,35391,35392,35393,35394,35395,35396,35397,35398,35399,35400,35401, +35402,35403,35404,35404,35405,35406,35407,35408,35409,35410,35411,35412,35413, +35414,35415,35416,35417,35418,35419,35420,35421,35422,35423,35424,35425,35426, +35427,35428,35429,35430,35431,35432,35433,35434,35435,35436,35437,35438,35439, +35440,35441,35442,35443,35444,35445,35446,35447,35448,35449,35450,35450,35451, +35452,35453,35454,35455,35456,35457,35458,35459,35460,35461,35462,35463,35464, +35465,35466,35467,35468,35469,35470,35471,35472,35473,35474,35475,35476,35477, +35478,35479,35480,35481,35482,35483,35484,35485,35486,35487,35488,35489,35490, +35491,35492,35493,35493,35494,35495,35496,35497,35498,35499,35500,35501,35502, +35503,35504,35505,35506,35507,35508,35509,35510,35511,35512,35513,35514,35515, +35516,35517,35518,35519,35520,35521,35522,35523,35524,35525,35526,35527,35528, +35529,35530,35531,35532,35533,35533,35534,35535,35536,35537,35538,35539,35540, +35541,35542,35543,35544,35545,35546,35547,35548,35549,35550,35551,35552,35553, +35554,35555,35556,35557,35558,35559,35560,35561,35562,35563,35564,35565,35566, +35567,35568,35569,35570,35571,35571,35572,35573,35574,35575,35576,35577,35578, +35579,35580,35581,35582,35583,35584,35585,35586,35587,35588,35589,35590,35591, +35592,35593,35594,35595,35596,35597,35598,35599,35600,35601,35602,35603,35604, +35605,35606,35607,35607,35608,35609,35610,35611,35612,35613,35614,35615,35616, +35617,35618,35619,35620,35621,35622,35623,35624,35625,35626,35627,35628,35629, +35630,35631,35632,35633,35634,35635,35636,35637,35638,35639,35640,35641,35642, +35642,35643,35644,35645,35646,35647,35648,35649,35650,35651,35652,35653,35654, +35655,35656,35657,35658,35659,35660,35661,35662,35663,35664,35665,35666,35667, +35668,35669,35670,35671,35672,35673,35674,35675,35675,35676,35677,35678,35679, +35680,35681,35682,35683,35684,35685,35686,35687,35688,35689,35690,35691,35692, +35693,35694,35695,35696,35697,35698,35699,35700,35701,35702,35703,35704,35705, +35706,35707,35707,35708,35709,35710,35711,35712,35713,35714,35715,35716,35717, +35718,35719,35720,35721,35722,35723,35724,35725,35726,35727,35728,35729,35730, +35731,35732,35733,35734,35735,35736,35737,35738,35738,35739,35740,35741,35742, +35743,35744,35745,35746,35747,35748,35749,35750,35751,35752,35753,35754,35755, +35756,35757,35758,35759,35760,35761,35762,35763,35764,35765,35766,35767,35767, +35768,35769,35770,35771,35772,35773,35774,35775,35776,35777,35778,35779,35780, +35781,35782,35783,35784,35785,35786,35787,35788,35789,35790,35791,35792,35793, +35794,35795,35796,35796,35797,35798,35799,35800,35801,35802,35803,35804,35805, +35806,35807,35808,35809,35810,35811,35812,35813,35814,35815,35816,35817,35818, +35819,35820,35821,35822,35823,35824,35824,35825,35826,35827,35828,35829,35830, +35831,35832,35833,35834,35835,35836,35837,35838,35839,35840,35841,35842,35843, +35844,35845,35846,35847,35848,35849,35850,35851,35851,35852,35853,35854,35855, +35856,35857,35858,35859,35860,35861,35862,35863,35864,35865,35866,35867,35868, +35869,35870,35871,35872,35873,35874,35875,35876,35877,35878,35878,35879,35880, +35881,35882,35883,35884,35885,35886,35887,35888,35889,35890,35891,35892,35893, +35894,35895,35896,35897,35898,35899,35900,35901,35902,35903,35903,35904,35905, +35906,35907,35908,35909,35910,35911,35912,35913,35914,35915,35916,35917,35918, +35919,35920,35921,35922,35923,35924,35925,35926,35927,35928,35929,35929,35930, +35931,35932,35933,35934,35935,35936,35937,35938,35939,35940,35941,35942,35943, +35944,35945,35946,35947,35948,35949,35950,35951,35952,35953,35953,35954,35955, +35956,35957,35958,35959,35960,35961,35962,35963,35964,35965,35966,35967,35968, +35969,35970,35971,35972,35973,35974,35975,35976,35977,35977,35978,35979,35980, +35981,35982,35983,35984,35985,35986,35987,35988,35989,35990,35991,35992,35993, +35994,35995,35996,35997,35998,35999,36000,36001,36001,36002,36003,36004,36005, +36006,36007,36008,36009,36010,36011,36012,36013,36014,36015,36016,36017,36018, +36019,36020,36021,36022,36023,36024,36024,36025,36026,36027,36028,36029,36030, +36031,36032,36033,36034,36035,36036,36037,36038,36039,36040,36041,36042,36043, +36044,36045,36046,36047,36047,36048,36049,36050,36051,36052,36053,36054,36055, +36056,36057,36058,36059,36060,36061,36062,36063,36064,36065,36066,36067,36068, +36069,36069,36070,36071,36072,36073,36074,36075,36076,36077,36078,36079,36080, +36081,36082,36083,36084,36085,36086,36087,36088,36089,36090,36091,36091,36092, +36093,36094,36095,36096,36097,36098,36099,36100,36101,36102,36103,36104,36105, +36106,36107,36108,36109,36110,36111,36112,36113,36113,36114,36115,36116,36117, +36118,36119,36120,36121,36122,36123,36124,36125,36126,36127,36128,36129,36130, +36131,36132,36133,36134,36134,36135,36136,36137,36138,36139,36140,36141,36142, +36143,36144,36145,36146,36147,36148,36149,36150,36151,36152,36153,36154,36154, +36155,36156,36157,36158,36159,36160,36161,36162,36163,36164,36165,36166,36167, +36168,36169,36170,36171,36172,36173,36174,36175,36175,36176,36177,36178,36179, +36180,36181,36182,36183,36184,36185,36186,36187,36188,36189,36190,36191,36192, +36193,36194,36195,36195,36196,36197,36198,36199,36200,36201,36202,36203,36204, +36205,36206,36207,36208,36209,36210,36211,36212,36213,36214,36215,36215,36216, +36217,36218,36219,36220,36221,36222,36223,36224,36225,36226,36227,36228,36229, +36230,36231,36232,36233,36234,36235,36235,36236,36237,36238,36239,36240,36241, +36242,36243,36244,36245,36246,36247,36248,36249,36250,36251,36252,36253,36254, +36254,36255,36256,36257,36258,36259,36260,36261,36262,36263,36264,36265,36266, +36267,36268,36269,36270,36271,36272,36273,36273,36274,36275,36276,36277,36278, +36279,36280,36281,36282,36283,36284,36285,36286,36287,36288,36289,36290,36291, +36292,36292,36293,36294,36295,36296,36297,36298,36299,36300,36301,36302,36303, +36304,36305,36306,36307,36308,36309,36310,36310,36311,36312,36313,36314,36315, +36316,36317,36318,36319,36320,36321,36322,36323,36324,36325,36326,36327,36328, +36329,36329,36330,36331,36332,36333,36334,36335,36336,36337,36338,36339,36340, +36341,36342,36343,36344,36345,36346,36347,36347,36348,36349,36350,36351,36352, +36353,36354,36355,36356,36357,36358,36359,36360,36361,36362,36363,36364,36365, +36365,36366,36367,36368,36369,36370,36371,36372,36373,36374,36375,36376,36377, +36378,36379,36380,36381,36382,36382,36383,36384,36385,36386,36387,36388,36389, +36390,36391,36392,36393,36394,36395,36396,36397,36398,36399,36400,36400,36401, +36402,36403,36404,36405,36406,36407,36408,36409,36410,36411,36412,36413,36414, +36415,36416,36417,36417,36418,36419,36420,36421,36422,36423,36424,36425,36426, +36427,36428,36429,36430,36431,36432,36433,36434,36434,36435,36436,36437,36438, +36439,36440,36441,36442,36443,36444,36445,36446,36447,36448,36449,36450,36451, +36451,36452,36453,36454,36455,36456,36457,36458,36459,36460,36461,36462,36463, +36464,36465,36466,36467,36468,36468,36469,36470,36471,36472,36473,36474,36475, +36476,36477,36478,36479,36480,36481,36482,36483,36484,36484,36485,36486,36487, +36488,36489,36490,36491,36492,36493,36494,36495,36496,36497,36498,36499,36500, +36501,36501,36502,36503,36504,36505,36506,36507,36508,36509,36510,36511,36512, +36513,36514,36515,36516,36517,36517,36518,36519,36520,36521,36522,36523,36524, +36525,36526,36527,36528,36529,36530,36531,36532,36533,36533,36534,36535,36536, +36537,36538,36539,36540,36541,36542,36543,36544,36545,36546,36547,36548,36549, +36549,36550,36551,36552,36553,36554,36555,36556,36557,36558,36559,36560,36561, +36562,36563,36564,36565,36565,36566,36567,36568,36569,36570,36571,36572,36573, +36574,36575,36576,36577,36578,36579,36580,36581,36581,36582,36583,36584,36585, +36586,36587,36588,36589,36590,36591,36592,36593,36594,36595,36596,36596,36597, +36598,36599,36600,36601,36602,36603,36604,36605,36606,36607,36608,36609,36610, +36611,36611,36612,36613,36614,36615,36616,36617,36618,36619,36620,36621,36622, +36623,36624,36625,36626,36627,36627,36628,36629,36630,36631,36632,36633,36634, +36635,36636,36637,36638,36639,36640,36641,36642,36642,36643,36644,36645,36646, +36647,36648,36649,36650,36651,36652,36653,36654,36655,36656,36657,36657,36658, +36659,36660,36661,36662,36663,36664,36665,36666,36667,36668,36669,36670,36671, +36672,36672,36673,36674,36675,36676,36677,36678,36679,36680,36681,36682,36683, +36684,36685,36686,36686,36687,36688,36689,36690,36691,36692,36693,36694,36695, +36696,36697,36698,36699,36700,36701,36701,36702,36703,36704,36705,36706,36707, +36708,36709,36710,36711,36712,36713,36714,36715,36715,36716,36717,36718,36719, +36720,36721,36722,36723,36724,36725,36726,36727,36728,36729,36730,36730,36731, +36732,36733,36734,36735,36736,36737,36738,36739,36740,36741,36742,36743,36744, +36744,36745,36746,36747,36748,36749,36750,36751,36752,36753,36754,36755,36756, +36757,36758,36758,36759,36760,36761,36762,36763,36764,36765,36766,36767,36768, +36769,36770,36771,36772,36772,36773,36774,36775,36776,36777,36778,36779,36780, +36781,36782,36783,36784,36785,36786,36786,36787,36788,36789,36790,36791,36792, +36793,36794,36795,36796,36797,36798,36799,36800,36800,36801,36802,36803,36804, +36805,36806,36807,36808,36809,36810,36811,36812,36813,36814,36814,36815,36816, +36817,36818,36819,36820,36821,36822,36823,36824,36825,36826,36827,36828,36828, +36829,36830,36831,36832,36833,36834,36835,36836,36837,36838,36839,36840,36841, +36841,36842,36843,36844,36845,36846,36847,36848,36849,36850,36851,36852,36853, +36854,36855,36855,36856,36857,36858,36859,36860,36861,36862,36863,36864,36865, +36866,36867,36868,36868,36869,36870,36871,36872,36873,36874,36875,36876,36877, +36878,36879,36880,36881,36881,36882,36883,36884,36885,36886,36887,36888,36889, +36890,36891,36892,36893,36894,36895,36895,36896,36897,36898,36899,36900,36901, +36902,36903,36904,36905,36906,36907,36908,36908,36909,36910,36911,36912,36913, +36914,36915,36916,36917,36918,36919,36920,36921,36921,36922,36923,36924,36925, +36926,36927,36928,36929,36930,36931,36932,36933,36934,36934,36935,36936,36937, +36938,36939,36940,36941,36942,36943,36944,36945,36946,36947,36947,36948,36949, +36950,36951,36952,36953,36954,36955,36956,36957,36958,36959,36960,36960,36961, +36962,36963,36964,36965,36966,36967,36968,36969,36970,36971,36972,36972,36973, +36974,36975,36976,36977,36978,36979,36980,36981,36982,36983,36984,36985,36985, +36986,36987,36988,36989,36990,36991,36992,36993,36994,36995,36996,36997,36998, +36998,36999,37000,37001,37002,37003,37004,37005,37006,37007,37008,37009,37010, +37010,37011,37012,37013,37014,37015,37016,37017,37018,37019,37020,37021,37022, +37022,37023,37024,37025,37026,37027,37028,37029,37030,37031,37032,37033,37034, +37035,37035,37036,37037,37038,37039,37040,37041,37042,37043,37044,37045,37046, +37047,37047,37048,37049,37050,37051,37052,37053,37054,37055,37056,37057,37058, +37059,37059,37060,37061,37062,37063,37064,37065,37066,37067,37068,37069,37070, +37071,37072,37072,37073,37074,37075,37076,37077,37078,37079,37080,37081,37082, +37083,37084,37084,37085,37086,37087,37088,37089,37090,37091,37092,37093,37094, +37095,37096,37096,37097,37098,37099,37100,37101,37102,37103,37104,37105,37106, +37107,37108,37108,37109,37110,37111,37112,37113,37114,37115,37116,37117,37118, +37119,37120,37120,37121,37122,37123,37124,37125,37126,37127,37128,37129,37130, +37131,37131,37132,37133,37134,37135,37136,37137,37138,37139,37140,37141,37142, +37143,37143,37144,37145,37146,37147,37148,37149,37150,37151,37152,37153,37154, +37155,37155,37156,37157,37158,37159,37160,37161,37162,37163,37164,37165,37166, +37167,37167,37168,37169,37170,37171,37172,37173,37174,37175,37176,37177,37178, +37178,37179,37180,37181,37182,37183,37184,37185,37186,37187,37188,37189,37190, +37190,37191,37192,37193,37194,37195,37196,37197,37198,37199,37200,37201,37201, +37202,37203,37204,37205,37206,37207,37208,37209,37210,37211,37212,37213,37213, +37214,37215,37216,37217,37218,37219,37220,37221,37222,37223,37224,37224,37225, +37226,37227,37228,37229,37230,37231,37232,37233,37234,37235,37235,37236,37237, +37238,37239,37240,37241,37242,37243,37244,37245,37246,37247,37247,37248,37249, +37250,37251,37252,37253,37254,37255,37256,37257,37258,37258,37259,37260,37261, +37262,37263,37264,37265,37266,37267,37268,37269,37269,37270,37271,37272,37273, +37274,37275,37276,37277,37278,37279,37280,37280,37281,37282,37283,37284,37285, +37286,37287,37288,37289,37290,37291,37291,37292,37293,37294,37295,37296,37297, +37298,37299,37300,37301,37302,37302,37303,37304,37305,37306,37307,37308,37309, +37310,37311,37312,37313,37313,37314,37315,37316,37317,37318,37319,37320,37321, +37322,37323,37324,37324,37325,37326,37327,37328,37329,37330,37331,37332,37333, +37334,37335,37335,37336,37337,37338,37339,37340,37341,37342,37343,37344,37345, +37346,37346,37347,37348,37349,37350,37351,37352,37353,37354,37355,37356,37356, +37357,37358,37359,37360,37361,37362,37363,37364,37365,37366,37367,37367,37368, +37369,37370,37371,37372,37373,37374,37375,37376,37377,37378,37378,37379,37380, +37381,37382,37383,37384,37385,37386,37387,37388,37388,37389,37390,37391,37392, +37393,37394,37395,37396,37397,37398,37399,37399,37400,37401,37402,37403,37404, +37405,37406,37407,37408,37409,37410,37410,37411,37412,37413,37414,37415,37416, +37417,37418,37419,37420,37420,37421,37422,37423,37424,37425,37426,37427,37428, +37429,37430,37430,37431,37432,37433,37434,37435,37436,37437,37438,37439,37440, +37441,37441,37442,37443,37444,37445,37446,37447,37448,37449,37450,37451,37451, +37452,37453,37454,37455,37456,37457,37458,37459,37460,37461,37462,37462,37463, +37464,37465,37466,37467,37468,37469,37470,37471,37472,37472,37473,37474,37475, +37476,37477,37478,37479,37480,37481,37482,37482,37483,37484,37485,37486,37487, +37488,37489,37490,37491,37492,37492,37493,37494,37495,37496,37497,37498,37499, +37500,37501,37502,37502,37503,37504,37505,37506,37507,37508,37509,37510,37511, +37512,37513,37513,37514,37515,37516,37517,37518,37519,37520,37521,37522,37523, +37523,37524,37525,37526,37527,37528,37529,37530,37531,37532,37533,37533,37534, +37535,37536,37537,37538,37539,37540,37541,37542,37543,37543,37544,37545,37546, +37547,37548,37549,37550,37551,37552,37553,37553,37554,37555,37556,37557,37558, +37559,37560,37561,37562,37563,37563,37564,37565,37566,37567,37568,37569,37570, +37571,37572,37573,37573,37574,37575,37576,37577,37578,37579,37580,37581,37582, +37582,37583,37584,37585,37586,37587,37588,37589,37590,37591,37592,37592,37593, +37594,37595,37596,37597,37598,37599,37600,37601,37602,37602,37603,37604,37605, +37606,37607,37608,37609,37610,37611,37612,37612,37613,37614,37615,37616,37617, +37618,37619,37620,37621,37622,37622,37623,37624,37625,37626,37627,37628,37629, +37630,37631,37631,37632,37633,37634,37635,37636,37637,37638,37639,37640,37641, +37641,37642,37643,37644,37645,37646,37647,37648,37649,37650,37651,37651,37652, +37653,37654,37655,37656,37657,37658,37659,37660,37660,37661,37662,37663,37664, +37665,37666,37667,37668,37669,37670,37670,37671,37672,37673,37674,37675,37676, +37677,37678,37679,37679,37680,37681,37682,37683,37684,37685,37686,37687,37688, +37689,37689,37690,37691,37692,37693,37694,37695,37696,37697,37698,37698,37699, +37700,37701,37702,37703,37704,37705,37706,37707,37708,37708,37709,37710,37711, +37712,37713,37714,37715,37716,37717,37717,37718,37719,37720,37721,37722,37723, +37724,37725,37726,37726,37727,37728,37729,37730,37731,37732,37733,37734,37735, +37736,37736,37737,37738,37739,37740,37741,37742,37743,37744,37745,37745,37746, +37747,37748,37749,37750,37751,37752,37753,37754,37754,37755,37756,37757,37758, +37759,37760,37761,37762,37763,37764,37764,37765,37766,37767,37768,37769,37770, +37771,37772,37773,37773,37774,37775,37776,37777,37778,37779,37780,37781,37782, +37782,37783,37784,37785,37786,37787,37788,37789,37790,37791,37791,37792,37793, +37794,37795,37796,37797,37798,37799,37800,37800,37801,37802,37803,37804,37805, +37806,37807,37808,37809,37809,37810,37811,37812,37813,37814,37815,37816,37817, +37818,37818,37819,37820,37821,37822,37823,37824,37825,37826,37827,37827,37828, +37829,37830,37831,37832,37833,37834,37835,37836,37836,37837,37838,37839,37840, +37841,37842,37843,37844,37845,37845,37846,37847,37848,37849,37850,37851,37852, +37853,37854,37854,37855,37856,37857,37858,37859,37860,37861,37862,37863,37863, +37864,37865,37866,37867,37868,37869,37870,37871,37872,37872,37873,37874,37875, +37876,37877,37878,37879,37880,37881,37881,37882,37883,37884,37885,37886,37887, +37888,37889,37890,37890,37891,37892,37893,37894,37895,37896,37897,37898,37899, +37899,37900,37901,37902,37903,37904,37905,37906,37907,37908,37908,37909,37910, +37911,37912,37913,37914,37915,37916,37916,37917,37918,37919,37920,37921,37922, +37923,37924,37925,37925,37926,37927,37928,37929,37930,37931,37932,37933,37934, +37934,37935,37936,37937,37938,37939,37940,37941,37942,37943,37943,37944,37945, +37946,37947,37948,37949,37950,37951,37951,37952,37953,37954,37955,37956,37957, +37958,37959,37960,37960,37961,37962,37963,37964,37965,37966,37967,37968,37969, +37969,37970,37971,37972,37973,37974,37975,37976,37977,37977,37978,37979,37980, +37981,37982,37983,37984,37985,37986,37986,37987,37988,37989,37990,37991,37992, +37993,37994,37994,37995,37996,37997,37998,37999,38000,38001,38002,38003,38003, +38004,38005,38006,38007,38008,38009,38010,38011,38011,38012,38013,38014,38015, +38016,38017,38018,38019,38020,38020,38021,38022,38023,38024,38025,38026,38027, +38028,38028,38029,38030,38031,38032,38033,38034,38035,38036,38037,38037,38038, +38039,38040,38041,38042,38043,38044,38045,38045,38046,38047,38048,38049,38050, +38051,38052,38053,38054,38054,38055,38056,38057,38058,38059,38060,38061,38062, +38062,38063,38064,38065,38066,38067,38068,38069,38070,38070,38071,38072,38073, +38074,38075,38076,38077,38078,38079,38079,38080,38081,38082,38083,38084,38085, +38086,38087,38087,38088,38089,38090,38091,38092,38093,38094,38095,38095,38096, +38097,38098,38099,38100,38101,38102,38103,38103,38104,38105,38106,38107,38108, +38109,38110,38111,38112,38112,38113,38114,38115,38116,38117,38118,38119,38120, +38120,38121,38122,38123,38124,38125,38126,38127,38128,38128,38129,38130,38131, +38132,38133,38134,38135,38136,38136,38137,38138,38139,38140,38141,38142,38143, +38144,38144,38145,38146,38147,38148,38149,38150,38151,38152,38153,38153,38154, +38155,38156,38157,38158,38159,38160,38161,38161,38162,38163,38164,38165,38166, +38167,38168,38169,38169,38170,38171,38172,38173,38174,38175,38176,38177,38177, +38178,38179,38180,38181,38182,38183,38184,38185,38185,38186,38187,38188,38189, +38190,38191,38192,38193,38193,38194,38195,38196,38197,38198,38199,38200,38201, +38201,38202,38203,38204,38205,38206,38207,38208,38209,38209,38210,38211,38212, +38213,38214,38215,38216,38217,38217,38218,38219,38220,38221,38222,38223,38224, +38225,38225,38226,38227,38228,38229,38230,38231,38232,38233,38233,38234,38235, +38236,38237,38238,38239,38240,38241,38241,38242,38243,38244,38245,38246,38247, +38248,38249,38249,38250,38251,38252,38253,38254,38255,38256,38257,38257,38258, +38259,38260,38261,38262,38263,38264,38265,38265,38266,38267,38268,38269,38270, +38271,38272,38272,38273,38274,38275,38276,38277,38278,38279,38280,38280,38281, +38282,38283,38284,38285,38286,38287,38288,38288,38289,38290,38291,38292,38293, +38294,38295,38296,38296,38297,38298,38299,38300,38301,38302,38303,38304,38304, +38305,38306,38307,38308,38309,38310,38311,38311,38312,38313,38314,38315,38316, +38317,38318,38319,38319,38320,38321,38322,38323,38324,38325,38326,38327,38327, +38328,38329,38330,38331,38332,38333,38334,38335,38335,38336,38337,38338,38339, +38340,38341,38342,38342,38343,38344,38345,38346,38347,38348,38349,38350,38350, +38351,38352,38353,38354,38355,38356,38357,38358,38358,38359,38360,38361,38362, +38363,38364,38365,38365,38366,38367,38368,38369,38370,38371,38372,38373,38373, +38374,38375,38376,38377,38378,38379,38380,38381,38381,38382,38383,38384,38385, +38386,38387,38388,38388,38389,38390,38391,38392,38393,38394,38395,38396,38396, +38397,38398,38399,38400,38401,38402,38403,38403,38404,38405,38406,38407,38408, +38409,38410,38411,38411,38412,38413,38414,38415,38416,38417,38418,38418,38419, +38420,38421,38422,38423,38424,38425,38426,38426,38427,38428,38429,38430,38431, +38432,38433,38433,38434,38435,38436,38437,38438,38439,38440,38441,38441,38442, +38443,38444,38445,38446,38447,38448,38448,38449,38450,38451,38452,38453,38454, +38455,38456,38456,38457,38458,38459,38460,38461,38462,38463,38463,38464,38465, +38466,38467,38468,38469,38470,38471,38471,38472,38473,38474,38475,38476,38477, +38478,38478,38479,38480,38481,38482,38483,38484,38485,38485,38486,38487,38488, +38489,38490,38491,38492,38493,38493,38494,38495,38496,38497,38498,38499,38500, +38500,38501,38502,38503,38504,38505,38506,38507,38507,38508,38509,38510,38511, +38512,38513,38514,38515,38515,38516,38517,38518,38519,38520,38521,38522,38522, +38523,38524,38525,38526,38527,38528,38529,38529,38530,38531,38532,38533,38534, +38535,38536,38537,38537,38538,38539,38540,38541,38542,38543,38544,38544,38545, +38546,38547,38548,38549,38550,38551,38551,38552,38553,38554,38555,38556,38557, +38558,38558,38559,38560,38561,38562,38563,38564,38565,38566,38566,38567,38568, +38569,38570,38571,38572,38573,38573,38574,38575,38576,38577,38578,38579,38580, +38580,38581,38582,38583,38584,38585,38586,38587,38587,38588,38589,38590,38591, +38592,38593,38594,38594,38595,38596,38597,38598,38599,38600,38601,38602,38602, +38603,38604,38605,38606,38607,38608,38609,38609,38610,38611,38612,38613,38614, +38615,38616,38616,38617,38618,38619,38620,38621,38622,38623,38623,38624,38625, +38626,38627,38628,38629,38630,38630,38631,38632,38633,38634,38635,38636,38637, +38637,38638,38639,38640,38641,38642,38643,38644,38644,38645,38646,38647,38648, +38649,38650,38651,38651,38652,38653,38654,38655,38656,38657,38658,38658,38659, +38660,38661,38662,38663,38664,38665,38665,38666,38667,38668,38669,38670,38671, +38672,38672,38673,38674,38675,38676,38677,38678,38679,38679,38680,38681,38682, +38683,38684,38685,38686,38686,38687,38688,38689,38690,38691,38692,38693,38693, +38694,38695,38696,38697,38698,38699,38700,38700,38701,38702,38703,38704,38705, +38706,38707,38707,38708,38709,38710,38711,38712,38713,38714,38714,38715,38716, +38717,38718,38719,38720,38721,38721,38722,38723,38724,38725,38726,38727,38728, +38728,38729,38730,38731,38732,38733,38734,38735,38735,38736,38737,38738,38739, +38740,38741,38742,38742,38743,38744,38745,38746,38747,38748,38749,38749,38750, +38751,38752,38753,38754,38755,38756,38756,38757,38758,38759,38760,38761,38762, +38762,38763,38764,38765,38766,38767,38768,38769,38769,38770,38771,38772,38773, +38774,38775,38776,38776,38777,38778,38779,38780,38781,38782,38783,38783,38784, +38785,38786,38787,38788,38789,38790,38790,38791,38792,38793,38794,38795,38796, +38797,38797,38798,38799,38800,38801,38802,38803,38803,38804,38805,38806,38807, +38808,38809,38810,38810,38811,38812,38813,38814,38815,38816,38817,38817,38818, +38819,38820,38821,38822,38823,38824,38824,38825,38826,38827,38828,38829,38830, +38830,38831,38832,38833,38834,38835,38836,38837,38837,38838,38839,38840,38841, +38842,38843,38844,38844,38845,38846,38847,38848,38849,38850,38850,38851,38852, +38853,38854,38855,38856,38857,38857,38858,38859,38860,38861,38862,38863,38864, +38864,38865,38866,38867,38868,38869,38870,38871,38871,38872,38873,38874,38875, +38876,38877,38877,38878,38879,38880,38881,38882,38883,38884,38884,38885,38886, +38887,38888,38889,38890,38890,38891,38892,38893,38894,38895,38896,38897,38897, +38898,38899,38900,38901,38902,38903,38904,38904,38905,38906,38907,38908,38909, +38910,38910,38911,38912,38913,38914,38915,38916,38917,38917,38918,38919,38920, +38921,38922,38923,38923,38924,38925,38926,38927,38928,38929,38930,38930,38931, +38932,38933,38934,38935,38936,38937,38937,38938,38939,38940,38941,38942,38943, +38943,38944,38945,38946,38947,38948,38949,38950,38950,38951,38952,38953,38954, +38955,38956,38956,38957,38958,38959,38960,38961,38962,38963,38963,38964,38965, +38966,38967,38968,38969,38969,38970,38971,38972,38973,38974,38975,38976,38976, +38977,38978,38979,38980,38981,38982,38982,38983,38984,38985,38986,38987,38988, +38989,38989,38990,38991,38992,38993,38994,38995,38995,38996,38997,38998,38999, +39000,39001,39002,39002,39003,39004,39005,39006,39007,39008,39008,39009,39010, +39011,39012,39013,39014,39014,39015,39016,39017,39018,39019,39020,39021,39021, +39022,39023,39024,39025,39026,39027,39027,39028,39029,39030,39031,39032,39033, +39034,39034,39035,39036,39037,39038,39039,39040,39040,39041,39042,39043,39044, +39045,39046,39046,39047,39048,39049,39050,39051,39052,39053,39053,39054,39055, +39056,39057,39058,39059,39059,39060,39061,39062,39063,39064,39065,39066,39066, +39067,39068,39069,39070,39071,39072,39072,39073,39074,39075,39076,39077,39078, +39078,39079,39080,39081,39082,39083,39084,39085,39085,39086,39087,39088,39089, +39090,39091,39091,39092,39093,39094,39095,39096,39097,39097,39098,39099,39100, +39101,39102,39103,39104,39104,39105,39106,39107,39108,39109,39110,39110,39111, +39112,39113,39114,39115,39116,39116,39117,39118,39119,39120,39121,39122,39122, +39123,39124,39125,39126,39127,39128,39129,39129,39130,39131,39132,39133,39134, +39135,39135,39136,39137,39138,39139,39140,39141,39141,39142,39143,39144,39145, +39146,39147,39147,39148,39149,39150,39151,39152,39153,39154,39154,39155,39156, +39157,39158,39159,39160,39160,39161,39162,39163,39164,39165,39166,39166,39167, +39168,39169,39170,39171,39172,39172,39173,39174,39175,39176,39177,39178,39178, +39179,39180,39181,39182,39183,39184,39185,39185,39186,39187,39188,39189,39190, +39191,39191,39192,39193,39194,39195,39196,39197,39197,39198,39199,39200,39201, +39202,39203,39203,39204,39205,39206,39207,39208,39209,39209,39210,39211,39212, +39213,39214,39215,39215,39216,39217,39218,39219,39220,39221,39221,39222,39223, +39224,39225,39226,39227,39228,39228,39229,39230,39231,39232,39233,39234,39234, +39235,39236,39237,39238,39239,39240,39240,39241,39242,39243,39244,39245,39246, +39246,39247,39248,39249,39250,39251,39252,39252,39253,39254,39255,39256,39257, +39258,39258,39259,39260,39261,39262,39263,39264,39264,39265,39266,39267,39268, +39269,39270,39270,39271,39272,39273,39274,39275,39276,39276,39277,39278,39279, +39280,39281,39282,39282,39283,39284,39285,39286,39287,39288,39288,39289,39290, +39291,39292,39293,39294,39294,39295,39296,39297,39298,39299,39300,39300,39301, +39302,39303,39304,39305,39306,39306,39307,39308,39309,39310,39311,39312,39312, +39313,39314,39315,39316,39317,39318,39318,39319,39320,39321,39322,39323,39324, +39324,39325,39326,39327,39328,39329,39330,39330,39331,39332,39333,39334,39335, +39336,39336,39337,39338,39339,39340,39341,39342,39342,39343,39344,39345,39346, +39347,39348,39348,39349,39350,39351,39352,39353,39354,39354,39355,39356,39357, +39358,39359,39360,39360,39361,39362,39363,39364,39365,39366,39366,39367,39368, +39369,39370,39371,39372,39372,39373,39374,39375,39376,39377,39378,39378,39379, +39380,39381,39382,39383,39384,39384,39385,39386,39387,39388,39389,39389,39390, +39391,39392,39393,39394,39395,39395,39396,39397,39398,39399,39400,39401,39401, +39402,39403,39404,39405,39406,39407,39407,39408,39409,39410,39411,39412,39413, +39413,39414,39415,39416,39417,39418,39419,39419,39420,39421,39422,39423,39424, +39425,39425,39426,39427,39428,39429,39430,39430,39431,39432,39433,39434,39435, +39436,39436,39437,39438,39439,39440,39441,39442,39442,39443,39444,39445,39446, +39447,39448,39448,39449,39450,39451,39452,39453,39454,39454,39455,39456,39457, +39458,39459,39460,39460,39461,39462,39463,39464,39465,39465,39466,39467,39468, +39469,39470,39471,39471,39472,39473,39474,39475,39476,39477,39477,39478,39479, +39480,39481,39482,39483,39483,39484,39485,39486,39487,39488,39488,39489,39490, +39491,39492,39493,39494,39494,39495,39496,39497,39498,39499,39500,39500,39501, +39502,39503,39504,39505,39506,39506,39507,39508,39509,39510,39511,39511,39512, +39513,39514,39515,39516,39517,39517,39518,39519,39520,39521,39522,39523,39523, +39524,39525,39526,39527,39528,39529,39529,39530,39531,39532,39533,39534,39534, +39535,39536,39537,39538,39539,39540,39540,39541,39542,39543,39544,39545,39546, +39546,39547,39548,39549,39550,39551,39551,39552,39553,39554,39555,39556,39557, +39557,39558,39559,39560,39561,39562,39563,39563,39564,39565,39566,39567,39568, +39568,39569,39570,39571,39572,39573,39574,39574,39575,39576,39577,39578,39579, +39580,39580,39581,39582,39583,39584,39585,39585,39586,39587,39588,39589,39590, +39591,39591,39592,39593,39594,39595,39596,39597,39597,39598,39599,39600,39601, +39602,39602,39603,39604,39605,39606,39607,39608,39608,39609,39610,39611,39612, +39613,39613,39614,39615,39616,39617,39618,39619,39619,39620,39621,39622,39623, +39624,39625,39625,39626,39627,39628,39629,39630,39630,39631,39632,39633,39634, +39635,39636,39636,39637,39638,39639,39640,39641,39641,39642,39643,39644,39645, +39646,39647,39647,39648,39649,39650,39651,39652,39653,39653,39654,39655,39656, +39657,39658,39658,39659,39660,39661,39662,39663,39664,39664,39665,39666,39667, +39668,39669,39669,39670,39671,39672,39673,39674,39675,39675,39676,39677,39678, +39679,39680,39680,39681,39682,39683,39684,39685,39686,39686,39687,39688,39689, +39690,39691,39691,39692,39693,39694,39695,39696,39697,39697,39698,39699,39700, +39701,39702,39702,39703,39704,39705,39706,39707,39708,39708,39709,39710,39711, +39712,39713,39713,39714,39715,39716,39717,39718,39719,39719,39720,39721,39722, +39723,39724,39724,39725,39726,39727,39728,39729,39730,39730,39731,39732,39733, +39734,39735,39735,39736,39737,39738,39739,39740,39741,39741,39742,39743,39744, +39745,39746,39746,39747,39748,39749,39750,39751,39752,39752,39753,39754,39755, +39756,39757,39757,39758,39759,39760,39761,39762,39762,39763,39764,39765,39766, +39767,39768,39768,39769,39770,39771,39772,39773,39773,39774,39775,39776,39777, +39778,39779,39779,39780,39781,39782,39783,39784,39784,39785,39786,39787,39788, +39789,39790,39790,39791,39792,39793,39794,39795,39795,39796,39797,39798,39799, +39800,39800,39801,39802,39803,39804,39805,39806,39806,39807,39808,39809,39810, +39811,39811,39812,39813,39814,39815,39816,39817,39817,39818,39819,39820,39821, +39822,39822,39823,39824,39825,39826,39827,39827,39828,39829,39830,39831,39832, +39833,39833,39834,39835,39836,39837,39838,39838,39839,39840,39841,39842,39843, +39843,39844,39845,39846,39847,39848,39849,39849,39850,39851,39852,39853,39854, +39854,39855,39856,39857,39858,39859,39859,39860,39861,39862,39863,39864,39865, +39865,39866,39867,39868,39869,39870,39870,39871,39872,39873,39874,39875,39875, +39876,39877,39878,39879,39880,39881,39881,39882,39883,39884,39885,39886,39886, +39887,39888,39889,39890,39891,39891,39892,39893,39894,39895,39896,39896,39897, +39898,39899,39900,39901,39902,39902,39903,39904,39905,39906,39907,39907,39908, +39909,39910,39911,39912,39912,39913,39914,39915,39916,39917,39918,39918,39919, +39920,39921,39922,39923,39923,39924,39925,39926,39927,39928,39928,39929,39930, +39931,39932,39933,39933,39934,39935,39936,39937,39938,39939,39939,39940,39941, +39942,39943,39944,39944,39945,39946,39947,39948,39949,39949,39950,39951,39952, +39953,39954,39954,39955,39956,39957,39958,39959,39959,39960,39961,39962,39963, +39964,39965,39965,39966,39967,39968,39969,39970,39970,39971,39972,39973,39974, +39975,39975,39976,39977,39978,39979,39980,39980,39981,39982,39983,39984,39985, +39986,39986,39987,39988,39989,39990,39991,39991,39992,39993,39994,39995,39996, +39996,39997,39998,39999,40000,40001,40001,40002,40003,40004,40005,40006,40006, +40007,40008,40009,40010,40011,40011,40012,40013,40014,40015,40016,40017,40017, +40018,40019,40020,40021,40022,40022,40023,40024,40025,40026,40027,40027,40028, +40029,40030,40031,40032,40032,40033,40034,40035,40036,40037,40037,40038,40039, +40040,40041,40042,40042,40043,40044,40045,40046,40047,40047,40048,40049,40050, +40051,40052,40053,40053,40054,40055,40056,40057,40058,40058,40059,40060,40061, +40062,40063,40063,40064,40065,40066,40067,40068,40068,40069,40070,40071,40072, +40073,40073,40074,40075,40076,40077,40078,40078,40079,40080,40081,40082,40083, +40083,40084,40085,40086,40087,40088,40088,40089,40090,40091,40092,40093,40093, +40094,40095,40096,40097,40098,40099,40099,40100,40101,40102,40103,40104,40104, +40105,40106,40107,40108,40109,40109,40110,40111,40112,40113,40114,40114,40115, +40116,40117,40118,40119,40119,40120,40121,40122,40123,40124,40124,40125,40126, +40127,40128,40129,40129,40130,40131,40132,40133,40134,40134,40135,40136,40137, +40138,40139,40139,40140,40141,40142,40143,40144,40144,40145,40146,40147,40148, +40149,40149,40150,40151,40152,40153,40154,40154,40155,40156,40157,40158,40159, +40159,40160,40161,40162,40163,40164,40164,40165,40166,40167,40168,40169,40169, +40170,40171,40172,40173,40174,40174,40175,40176,40177,40178,40179,40179,40180, +40181,40182,40183,40184,40184,40185,40186,40187,40188,40189,40189,40190,40191, +40192,40193,40194,40194,40195,40196,40197,40198,40199,40199,40200,40201,40202, +40203,40204,40204,40205,40206,40207,40208,40209,40209,40210,40211,40212,40213, +40214,40214,40215,40216,40217,40218,40219,40219,40220,40221,40222,40223,40224, +40224,40225,40226,40227,40228,40229,40229,40230,40231,40232,40233,40234,40234, +40235,40236,40237,40238,40239,40239,40240,40241,40242,40243,40244,40244,40245, +40246,40247,40248,40249,40249,40250,40251,40252,40253,40254,40254,40255,40256, +40257,40258,40259,40259,40260,40261,40262,40263,40263,40264,40265,40266,40267, +40268,40268,40269,40270,40271,40272,40273,40273,40274,40275,40276,40277,40278, +40278,40279,40280,40281,40282,40283,40283,40284,40285,40286,40287,40288,40288, +40289,40290,40291,40292,40293,40293,40294,40295,40296,40297,40298,40298,40299, +40300,40301,40302,40303,40303,40304,40305,40306,40307,40308,40308,40309,40310, +40311,40312,40312,40313,40314,40315,40316,40317,40317,40318,40319,40320,40321, +40322,40322,40323,40324,40325,40326,40327,40327,40328,40329,40330,40331,40332, +40332,40333,40334,40335,40336,40337,40337,40338,40339,40340,40341,40342,40342, +40343,40344,40345,40346,40346,40347,40348,40349,40350,40351,40351,40352,40353, +40354,40355,40356,40356,40357,40358,40359,40360,40361,40361,40362,40363,40364, +40365,40366,40366,40367,40368,40369,40370,40371,40371,40372,40373,40374,40375, +40375,40376,40377,40378,40379,40380,40380,40381,40382,40383,40384,40385,40385, +40386,40387,40388,40389,40390,40390,40391,40392,40393,40394,40395,40395,40396, +40397,40398,40399,40399,40400,40401,40402,40403,40404,40404,40405,40406,40407, +40408,40409,40409,40410,40411,40412,40413,40414,40414,40415,40416,40417,40418, +40419,40419,40420,40421,40422,40423,40423,40424,40425,40426,40427,40428,40428, +40429,40430,40431,40432,40433,40433,40434,40435,40436,40437,40438,40438,40439, +40440,40441,40442,40442,40443,40444,40445,40446,40447,40447,40448,40449,40450, +40451,40452,40452,40453,40454,40455,40456,40457,40457,40458,40459,40460,40461, +40461,40462,40463,40464,40465,40466,40466,40467,40468,40469,40470,40471,40471, +40472,40473,40474,40475,40476,40476,40477,40478,40479,40480,40480,40481,40482, +40483,40484,40485,40485,40486,40487,40488,40489,40490,40490,40491,40492,40493, +40494,40495,40495,40496,40497,40498,40499,40499,40500,40501,40502,40503,40504, +40504,40505,40506,40507,40508,40509,40509,40510,40511,40512,40513,40513,40514, +40515,40516,40517,40518,40518,40519,40520,40521,40522,40523,40523,40524,40525, +40526,40527,40527,40528,40529,40530,40531,40532,40532,40533,40534,40535,40536, +40537,40537,40538,40539,40540,40541,40542,40542,40543,40544,40545,40546,40546, +40547,40548,40549,40550,40551,40551,40552,40553,40554,40555,40556,40556,40557, +40558,40559,40560,40560,40561,40562,40563,40564,40565,40565,40566,40567,40568, +40569,40569,40570,40571,40572,40573,40574,40574,40575,40576,40577,40578,40579, +40579,40580,40581,40582,40583,40583,40584,40585,40586,40587,40588,40588,40589, +40590,40591,40592,40593,40593,40594,40595,40596,40597,40597,40598,40599,40600, +40601,40602,40602,40603,40604,40605,40606,40607,40607,40608,40609,40610,40611, +40611,40612,40613,40614,40615,40616,40616,40617,40618,40619,40620,40620,40621, +40622,40623,40624,40625,40625,40626,40627,40628,40629,40630,40630,40631,40632, +40633,40634,40634,40635,40636,40637,40638,40639,40639,40640,40641,40642,40643, +40643,40644,40645,40646,40647,40648,40648,40649,40650,40651,40652,40653,40653, +40654,40655,40656,40657,40657,40658,40659,40660,40661,40662,40662,40663,40664, +40665,40666,40666,40667,40668,40669,40670,40671,40671,40672,40673,40674,40675, +40675,40676,40677,40678,40679,40680,40680,40681,40682,40683,40684,40685,40685, +40686,40687,40688,40689,40689,40690,40691,40692,40693,40694,40694,40695,40696, +40697,40698,40698,40699,40700,40701,40702,40703,40703,40704,40705,40706,40707, +40707,40708,40709,40710,40711,40712,40712,40713,40714,40715,40716,40716,40717, +40718,40719,40720,40721,40721,40722,40723,40724,40725,40725,40726,40727,40728, +40729,40730,40730,40731,40732,40733,40734,40735,40735,40736,40737,40738,40739, +40739,40740,40741,40742,40743,40744,40744,40745,40746,40747,40748,40748,40749, +40750,40751,40752,40753,40753,40754,40755,40756,40757,40757,40758,40759,40760, +40761,40762,40762,40763,40764,40765,40766,40766,40767,40768,40769,40770,40771, +40771,40772,40773,40774,40775,40775,40776,40777,40778,40779,40780,40780,40781, +40782,40783,40784,40784,40785,40786,40787,40788,40788,40789,40790,40791,40792, +40793,40793,40794,40795,40796,40797,40797,40798,40799,40800,40801,40802,40802, +40803,40804,40805,40806,40806,40807,40808,40809,40810,40811,40811,40812,40813, +40814,40815,40815,40816,40817,40818,40819,40820,40820,40821,40822,40823,40824, +40824,40825,40826,40827,40828,40829,40829,40830,40831,40832,40833,40833,40834, +40835,40836,40837,40837,40838,40839,40840,40841,40842,40842,40843,40844,40845, +40846,40846,40847,40848,40849,40850,40851,40851,40852,40853,40854,40855,40855, +40856,40857,40858,40859,40860,40860,40861,40862,40863,40864,40864,40865,40866, +40867,40868,40868,40869,40870,40871,40872,40873,40873,40874,40875,40876,40877, +40877,40878,40879,40880,40881,40882,40882,40883,40884,40885,40886,40886,40887, +40888,40889,40890,40890,40891,40892,40893,40894,40895,40895,40896,40897,40898, +40899,40899,40900,40901,40902,40903,40904,40904,40905,40906,40907,40908,40908, +40909,40910,40911,40912,40912,40913,40914,40915,40916,40917,40917,40918,40919, +40920,40921,40921,40922,40923,40924,40925,40926,40926,40927,40928,40929,40930, +40930,40931,40932,40933,40934,40934,40935,40936,40937,40938,40939,40939,40940, +40941,40942,40943,40943,40944,40945,40946,40947,40947,40948,40949,40950,40951, +40952,40952,40953,40954,40955,40956,40956,40957,40958,40959,40960,40960,40961, +40962,40963,40964,40965,40965,40966,40967,40968,40969,40969,40970,40971,40972, +40973,40973,40974,40975,40976,40977,40978,40978,40979,40980,40981,40982,40982, +40983,40984,40985,40986,40986,40987,40988,40989,40990,40991,40991,40992,40993, +40994,40995,40995,40996,40997,40998,40999,40999,41000,41001,41002,41003,41004, +41004,41005,41006,41007,41008,41008,41009,41010,41011,41012,41012,41013,41014, +41015,41016,41017,41017,41018,41019,41020,41021,41021,41022,41023,41024,41025, +41025,41026,41027,41028,41029,41030,41030,41031,41032,41033,41034,41034,41035, +41036,41037,41038,41038,41039,41040,41041,41042,41042,41043,41044,41045,41046, +41047,41047,41048,41049,41050,41051,41051,41052,41053,41054,41055,41055,41056, +41057,41058,41059,41060,41060,41061,41062,41063,41064,41064,41065,41066,41067, +41068,41068,41069,41070,41071,41072,41072,41073,41074,41075,41076,41077,41077, +41078,41079,41080,41081,41081,41082,41083,41084,41085,41085,41086,41087,41088, +41089,41089,41090,41091,41092,41093,41094,41094,41095,41096,41097,41098,41098, +41099,41100,41101,41102,41102,41103,41104,41105,41106,41106,41107,41108,41109, +41110,41111,41111,41112,41113,41114,41115,41115,41116,41117,41118,41119,41119, +41120,41121,41122,41123,41123,41124,41125,41126,41127,41128,41128,41129,41130, +41131,41132,41132,41133,41134,41135,41136,41136,41137,41138,41139,41140,41140, +41141,41142,41143,41144,41145,41145,41146,41147,41148,41149,41149,41150,41151, +41152,41153,41153,41154,41155,41156,41157,41157,41158,41159,41160,41161,41161, +41162,41163,41164,41165,41166,41166,41167,41168,41169,41170,41170,41171,41172, +41173,41174,41174,41175,41176,41177,41178,41178,41179,41180,41181,41182,41182, +41183,41184,41185,41186,41187,41187,41188,41189,41190,41191,41191,41192,41193, +41194,41195,41195,41196,41197,41198,41199,41199,41200,41201,41202,41203,41203, +41204,41205,41206,41207,41207,41208,41209,41210,41211,41212,41212,41213,41214, +41215,41216,41216,41217,41218,41219,41220,41220,41221,41222,41223,41224,41224, +41225,41226,41227,41228,41228,41229,41230,41231,41232,41232,41233,41234,41235, +41236,41237,41237,41238,41239,41240,41241,41241,41242,41243,41244,41245,41245, +41246,41247,41248,41249,41249,41250,41251,41252,41253,41253,41254,41255,41256, +41257,41257,41258,41259,41260,41261,41261,41262,41263,41264,41265,41266,41266, +41267,41268,41269,41270,41270,41271,41272,41273,41274,41274,41275,41276,41277, +41278,41278,41279,41280,41281,41282,41282,41283,41284,41285,41286,41286,41287, +41288,41289,41290,41290,41291,41292,41293,41294,41294,41295,41296,41297,41298, +41299,41299,41300,41301,41302,41303,41303,41304,41305,41306,41307,41307,41308, +41309,41310,41311,41311,41312,41313,41314,41315,41315,41316,41317,41318,41319, +41319,41320,41321,41322,41323,41323,41324,41325,41326,41327,41327,41328,41329, +41330,41331,41331,41332,41333,41334,41335,41335,41336,41337,41338,41339,41340, +41340,41341,41342,41343,41344,41344,41345,41346,41347,41348,41348,41349,41350, +41351,41352,41352,41353,41354,41355,41356,41356,41357,41358,41359,41360,41360, +41361,41362,41363,41364,41364,41365,41366,41367,41368,41368,41369,41370,41371, +41372,41372,41373,41374,41375,41376,41376,41377,41378,41379,41380,41380,41381, +41382,41383,41384,41384,41385,41386,41387,41388,41388,41389,41390,41391,41392, +41392,41393,41394,41395,41396,41396,41397,41398,41399,41400,41401,41401,41402, +41403,41404,41405,41405,41406,41407,41408,41409,41409,41410,41411,41412,41413, +41413,41414,41415,41416,41417,41417,41418,41419,41420,41421,41421,41422,41423, +41424,41425,41425,41426,41427,41428,41429,41429,41430,41431,41432,41433,41433, +41434,41435,41436,41437,41437,41438,41439,41440,41441,41441,41442,41443,41444, +41445,41445,41446,41447,41448,41449,41449,41450,41451,41452,41453,41453,41454, +41455,41456,41457,41457,41458,41459,41460,41461,41461,41462,41463,41464,41465, +41465,41466,41467,41468,41469,41469,41470,41471,41472,41473,41473,41474,41475, +41476,41477,41477,41478,41479,41480,41481,41481,41482,41483,41484,41485,41485, +41486,41487,41488,41489,41489,41490,41491,41492,41493,41493,41494,41495,41496, +41497,41497,41498,41499,41500,41501,41501,41502,41503,41504,41505,41505,41506, +41507,41508,41509,41509,41510,41511,41512,41513,41513,41514,41515,41516,41517, +41517,41518,41519,41520,41521,41521,41522,41523,41524,41525,41525,41526,41527, +41528,41529,41529,41530,41531,41532,41533,41533,41534,41535,41536,41537,41537, +41538,41539,41540,41541,41541,41542,41543,41544,41545,41545,41546,41547,41548, +41549,41549,41550,41551,41552,41553,41553,41554,41555,41556,41556,41557,41558, +41559,41560,41560,41561,41562,41563,41564,41564,41565,41566,41567,41568,41568, +41569,41570,41571,41572,41572,41573,41574,41575,41576,41576,41577,41578,41579, +41580,41580,41581,41582,41583,41584,41584,41585,41586,41587,41588,41588,41589, +41590,41591,41592,41592,41593,41594,41595,41596,41596,41597,41598,41599,41600, +41600,41601,41602,41603,41604,41604,41605,41606,41607,41608,41608,41609,41610, +41611,41612,41612,41613,41614,41615,41615,41616,41617,41618,41619,41619,41620, +41621,41622,41623,41623,41624,41625,41626,41627,41627,41628,41629,41630,41631, +41631,41632,41633,41634,41635,41635,41636,41637,41638,41639,41639,41640,41641, +41642,41643,41643,41644,41645,41646,41647,41647,41648,41649,41650,41651,41651, +41652,41653,41654,41654,41655,41656,41657,41658,41658,41659,41660,41661,41662, +41662,41663,41664,41665,41666,41666,41667,41668,41669,41670,41670,41671,41672, +41673,41674,41674,41675,41676,41677,41678,41678,41679,41680,41681,41682,41682, +41683,41684,41685,41686,41686,41687,41688,41689,41689,41690,41691,41692,41693, +41693,41694,41695,41696,41697,41697,41698,41699,41700,41701,41701,41702,41703, +41704,41705,41705,41706,41707,41708,41709,41709,41710,41711,41712,41713,41713, +41714,41715,41716,41716,41717,41718,41719,41720,41720,41721,41722,41723,41724, +41724,41725,41726,41727,41728,41728,41729,41730,41731,41732,41732,41733,41734, +41735,41736,41736,41737,41738,41739,41740,41740,41741,41742,41743,41743,41744, +41745,41746,41747,41747,41748,41749,41750,41751,41751,41752,41753,41754,41755, +41755,41756,41757,41758,41759,41759,41760,41761,41762,41763,41763,41764,41765, +41766,41766,41767,41768,41769,41770,41770,41771,41772,41773,41774,41774,41775, +41776,41777,41778,41778,41779,41780,41781,41782,41782,41783,41784,41785,41785, +41786,41787,41788,41789,41789,41790,41791,41792,41793,41793,41794,41795,41796, +41797,41797,41798,41799,41800,41801,41801,41802,41803,41804,41805,41805,41806, +41807,41808,41808,41809,41810,41811,41812,41812,41813,41814,41815,41816,41816, +41817,41818,41819,41820,41820,41821,41822,41823,41824,41824,41825,41826,41827, +41827,41828,41829,41830,41831,41831,41832,41833,41834,41835,41835,41836,41837, +41838,41839,41839,41840,41841,41842,41842,41843,41844,41845,41846,41846,41847, +41848,41849,41850,41850,41851,41852,41853,41854,41854,41855,41856,41857,41858, +41858,41859,41860,41861,41861,41862,41863,41864,41865,41865,41866,41867,41868, +41869,41869,41870,41871,41872,41873,41873,41874,41875,41876,41876,41877,41878, +41879,41880,41880,41881,41882,41883,41884,41884,41885,41886,41887,41888,41888, +41889,41890,41891,41891,41892,41893,41894,41895,41895,41896,41897,41898,41899, +41899,41900,41901,41902,41903,41903,41904,41905,41906,41906,41907,41908,41909, +41910,41910,41911,41912,41913,41914,41914,41915,41916,41917,41918,41918,41919, +41920,41921,41921,41922,41923,41924,41925,41925,41926,41927,41928,41929,41929, +41930,41931,41932,41933,41933,41934,41935,41936,41936,41937,41938,41939,41940, +41940,41941,41942,41943,41944,41944,41945,41946,41947,41948,41948,41949,41950, +41951,41951,41952,41953,41954,41955,41955,41956,41957,41958,41959,41959,41960, +41961,41962,41962,41963,41964,41965,41966,41966,41967,41968,41969,41970,41970, +41971,41972,41973,41974,41974,41975,41976,41977,41977,41978,41979,41980,41981, +41981,41982,41983,41984,41985,41985,41986,41987,41988,41988,41989,41990,41991, +41992,41992,41993,41994,41995,41996,41996,41997,41998,41999,42000,42000,42001, +42002,42003,42003,42004,42005,42006,42007,42007,42008,42009,42010,42011,42011, +42012,42013,42014,42014,42015,42016,42017,42018,42018,42019,42020,42021,42022, +42022,42023,42024,42025,42025,42026,42027,42028,42029,42029,42030,42031,42032, +42033,42033,42034,42035,42036,42036,42037,42038,42039,42040,42040,42041,42042, +42043,42044,42044,42045,42046,42047,42047,42048,42049,42050,42051,42051,42052, +42053,42054,42055,42055,42056,42057,42058,42058,42059,42060,42061,42062,42062, +42063,42064,42065,42066,42066,42067,42068,42069,42069,42070,42071,42072,42073, +42073,42074,42075,42076,42077,42077,42078,42079,42080,42080,42081,42082,42083, +42084,42084,42085,42086,42087,42088,42088,42089,42090,42091,42091,42092,42093, +42094,42095,42095,42096,42097,42098,42099,42099,42100,42101,42102,42102,42103, +42104,42105,42106,42106,42107,42108,42109,42110,42110,42111,42112,42113,42113, +42114,42115,42116,42117,42117,42118,42119,42120,42121,42121,42122,42123,42124, +42124,42125,42126,42127,42128,42128,42129,42130,42131,42131,42132,42133,42134, +42135,42135,42136,42137,42138,42139,42139,42140,42141,42142,42142,42143,42144, +42145,42146,42146,42147,42148,42149,42150,42150,42151,42152,42153,42153,42154, +42155,42156,42157,42157,42158,42159,42160,42160,42161,42162,42163,42164,42164, +42165,42166,42167,42168,42168,42169,42170,42171,42171,42172,42173,42174,42175, +42175,42176,42177,42178,42178,42179,42180,42181,42182,42182,42183,42184,42185, +42186,42186,42187,42188,42189,42189,42190,42191,42192,42193,42193,42194,42195, +42196,42196,42197,42198,42199,42200,42200,42201,42202,42203,42204,42204,42205, +42206,42207,42207,42208,42209,42210,42211,42211,42212,42213,42214,42214,42215, +42216,42217,42218,42218,42219,42220,42221,42222,42222,42223,42224,42225,42225, +42226,42227,42228,42229,42229,42230,42231,42232,42232,42233,42234,42235,42236, +42236,42237,42238,42239,42239,42240,42241,42242,42243,42243,42244,42245,42246, +42247,42247,42248,42249,42250,42250,42251,42252,42253,42254,42254,42255,42256, +42257,42257,42258,42259,42260,42261,42261,42262,42263,42264,42264,42265,42266, +42267,42268,42268,42269,42270,42271,42272,42272,42273,42274,42275,42275,42276, +42277,42278,42279,42279,42280,42281,42282,42282,42283,42284,42285,42286,42286, +42287,42288,42289,42289,42290,42291,42292,42293,42293,42294,42295,42296,42296, +42297,42298,42299,42300,42300,42301,42302,42303,42304,42304,42305,42306,42307, +42307,42308,42309,42310,42311,42311,42312,42313,42314,42314,42315,42316,42317, +42318,42318,42319,42320,42321,42321,42322,42323,42324,42325,42325,42326,42327, +42328,42328,42329,42330,42331,42332,42332,42333,42334,42335,42335,42336,42337, +42338,42339,42339,42340,42341,42342,42342,42343,42344,42345,42346,42346,42347, +42348,42349,42349,42350,42351,42352,42353,42353,42354,42355,42356,42356,42357, +42358,42359,42360,42360,42361,42362,42363,42364,42364,42365,42366,42367,42367, +42368,42369,42370,42371,42371,42372,42373,42374,42374,42375,42376,42377,42378, +42378,42379,42380,42381,42381,42382,42383,42384,42385,42385,42386,42387,42388, +42388,42389,42390,42391,42392,42392,42393,42394,42395,42395,42396,42397,42398, +42399,42399,42400,42401,42402,42402,42403,42404,42405,42406,42406,42407,42408, +42409,42409,42410,42411,42412,42413,42413,42414,42415,42416,42416,42417,42418, +42419,42420,42420,42421,42422,42423,42423,42424,42425,42426,42426,42427,42428, +42429,42430,42430,42431,42432,42433,42433,42434,42435,42436,42437,42437,42438, +42439,42440,42440,42441,42442,42443,42444,42444,42445,42446,42447,42447,42448, +42449,42450,42451,42451,42452,42453,42454,42454,42455,42456,42457,42458,42458, +42459,42460,42461,42461,42462,42463,42464,42465,42465,42466,42467,42468,42468, +42469,42470,42471,42472,42472,42473,42474,42475,42475,42476,42477,42478,42479, +42479,42480,42481,42482,42482,42483,42484,42485,42485,42486,42487,42488,42489, +42489,42490,42491,42492,42492,42493,42494,42495,42496,42496,42497,42498,42499, +42499,42500,42501,42502,42503,42503,42504,42505,42506,42506,42507,42508,42509, +42510,42510,42511,42512,42513,42513,42514,42515,42516,42517,42517,42518,42519, +42520,42520,42521,42522,42523,42523,42524,42525,42526,42527,42527,42528,42529, +42530,42530,42531,42532,42533,42534,42534,42535,42536,42537,42537,42538,42539, +42540,42541,42541,42542,42543,42544,42544,42545,42546,42547,42547,42548,42549, +42550,42551,42551,42552,42553,42554,42554,42555,42556,42557,42558,42558,42559, +42560,42561,42561,42562,42563,42564,42565,42565,42566,42567,42568,42568,42569, +42570,42571,42571,42572,42573,42574,42575,42575,42576,42577,42578,42578,42579, +42580,42581,42582,42582,42583,42584,42585,42585,42586,42587,42588,42588,42589, +42590,42591,42592,42592,42593,42594,42595,42595,42596,42597,42598,42599,42599, +42600,42601,42602,42602,42603,42604,42605,42605,42606,42607,42608,42609,42609, +42610,42611,42612,42612,42613,42614,42615,42616,42616,42617,42618,42619,42619, +42620,42621,42622,42622,42623,42624,42625,42626,42626,42627,42628,42629,42629, +42630,42631,42632,42633,42633,42634,42635,42636,42636,42637,42638,42639,42639, +42640,42641,42642,42643,42643,42644,42645,42646,42646,42647,42648,42649,42650, +42650,42651,42652,42653,42653,42654,42655,42656,42656,42657,42658,42659,42660, +42660,42661,42662,42663,42663,42664,42665,42666,42666,42667,42668,42669,42670, +42670,42671,42672,42673,42673,42674,42675,42676,42677,42677,42678,42679,42680, +42680,42681,42682,42683,42683,42684,42685,42686,42687,42687,42688,42689,42690, +42690,42691,42692,42693,42693,42694,42695,42696,42697,42697,42698,42699,42700, +42700,42701,42702,42703,42703,42704,42705,42706,42707,42707,42708,42709,42710, +42710,42711,42712,42713,42713,42714,42715,42716,42717,42717,42718,42719,42720, +42720,42721,42722,42723,42724,42724,42725,42726,42727,42727,42728,42729,42730, +42730,42731,42732,42733,42734,42734,42735,42736,42737,42737,42738,42739,42740, +42740,42741,42742,42743,42744,42744,42745,42746,42747,42747,42748,42749,42750, +42750,42751,42752,42753,42754,42754,42755,42756,42757,42757,42758,42759,42760, +42760,42761,42762,42763,42764,42764,42765,42766,42767,42767,42768,42769,42770, +42770,42771,42772,42773,42774,42774,42775,42776,42777,42777,42778,42779,42780, +42780,42781,42782,42783,42784,42784,42785,42786,42787,42787,42788,42789,42790, +42790,42791,42792,42793,42793,42794,42795,42796,42797,42797,42798,42799,42800, +42800,42801,42802,42803,42803,42804,42805,42806,42807,42807,42808,42809,42810, +42810,42811,42812,42813,42813,42814,42815,42816,42817,42817,42818,42819,42820, +42820,42821,42822,42823,42823,42824,42825,42826,42827,42827,42828,42829,42830, +42830,42831,42832,42833,42833,42834,42835,42836,42836,42837,42838,42839,42840, +42840,42841,42842,42843,42843,42844,42845,42846,42846,42847,42848,42849,42850, +42850,42851,42852,42853,42853,42854,42855,42856,42856,42857,42858,42859,42860, +42860,42861,42862,42863,42863,42864,42865,42866,42866,42867,42868,42869,42869, +42870,42871,42872,42873,42873,42874,42875,42876,42876,42877,42878,42879,42879, +42880,42881,42882,42883,42883,42884,42885,42886,42886,42887,42888,42889,42889, +42890,42891,42892,42892,42893,42894,42895,42896,42896,42897,42898,42899,42899, +42900,42901,42902,42902,42903,42904,42905,42905,42906,42907,42908,42909,42909, +42910,42911,42912,42912,42913,42914,42915,42915,42916,42917,42918,42919,42919, +42920,42921,42922,42922,42923,42924,42925,42925,42926,42927,42928,42928,42929, +42930,42931,42932,42932,42933,42934,42935,42935,42936,42937,42938,42938,42939, +42940,42941,42941,42942,42943,42944,42945,42945,42946,42947,42948,42948,42949, +42950,42951,42951,42952,42953,42954,42954,42955,42956,42957,42958,42958,42959, +42960,42961,42961,42962,42963,42964,42964,42965,42966,42967,42967,42968,42969, +42970,42971,42971,42972,42973,42974,42974,42975,42976,42977,42977,42978,42979, +42980,42980,42981,42982,42983,42984,42984,42985,42986,42987,42987,42988,42989, +42990,42990,42991,42992,42993,42993,42994,42995,42996,42996,42997,42998,42999, +43000,43000,43001,43002,43003,43003,43004,43005,43006,43006,43007,43008,43009, +43009,43010,43011,43012,43013,43013,43014,43015,43016,43016,43017,43018,43019, +43019,43020,43021,43022,43022,43023,43024,43025,43025,43026,43027,43028,43029, +43029,43030,43031,43032,43032,43033,43034,43035,43035,43036,43037,43038,43038, +43039,43040,43041,43042,43042,43043,43044,43045,43045,43046,43047,43048,43048, +43049,43050,43051,43051,43052,43053,43054,43054,43055,43056,43057,43058,43058, +43059,43060,43061,43061,43062,43063,43064,43064,43065,43066,43067,43067,43068, +43069,43070,43070,43071,43072,43073,43074,43074,43075,43076,43077,43077,43078, +43079,43080,43080,43081,43082,43083,43083,43084,43085,43086,43086,43087,43088, +43089,43090,43090,43091,43092,43093,43093,43094,43095,43096,43096,43097,43098, +43099,43099,43100,43101,43102,43102,43103,43104,43105,43106,43106,43107,43108, +43109,43109,43110,43111,43112,43112,43113,43114,43115,43115,43116,43117,43118, +43118,43119,43120,43121,43121,43122,43123,43124,43125,43125,43126,43127,43128, +43128,43129,43130,43131,43131,43132,43133,43134,43134,43135,43136,43137,43137, +43138,43139,43140,43141,43141,43142,43143,43144,43144,43145,43146,43147,43147, +43148,43149,43150,43150,43151,43152,43153,43153,43154,43155,43156,43156,43157, +43158,43159,43160,43160,43161,43162,43163,43163,43164,43165,43166,43166,43167, +43168,43169,43169,43170,43171,43172,43172,43173,43174,43175,43175,43176,43177, +43178,43179,43179,43180,43181,43182,43182,43183,43184,43185,43185,43186,43187, +43188,43188,43189,43190,43191,43191,43192,43193,43194,43194,43195,43196,43197, +43197,43198,43199,43200,43201,43201,43202,43203,43204,43204,43205,43206,43207, +43207,43208,43209,43210,43210,43211,43212,43213,43213,43214,43215,43216,43216, +43217,43218,43219,43219,43220,43221,43222,43223,43223,43224,43225,43226,43226, +43227,43228,43229,43229,43230,43231,43232,43232,43233,43234,43235,43235,43236, +43237,43238,43238,43239,43240,43241,43241,43242,43243,43244,43245,43245,43246, +43247,43248,43248,43249,43250,43251,43251,43252,43253,43254,43254,43255,43256, +43257,43257,43258,43259,43260,43260,43261,43262,43263,43263,43264,43265,43266, +43266,43267,43268,43269,43270,43270,43271,43272,43273,43273,43274,43275,43276, +43276,43277,43278,43279,43279,43280,43281,43282,43282,43283,43284,43285,43285, +43286,43287,43288,43288,43289,43290,43291,43291,43292,43293,43294,43295,43295, +43296,43297,43298,43298,43299,43300,43301,43301,43302,43303,43304,43304,43305, +43306,43307,43307,43308,43309,43310,43310,43311,43312,43313,43313,43314,43315, +43316,43316,43317,43318,43319,43319,43320,43321,43322,43323,43323,43324,43325, +43326,43326,43327,43328,43329,43329,43330,43331,43332,43332,43333,43334,43335, +43335,43336,43337,43338,43338,43339,43340,43341,43341,43342,43343,43344,43344, +43345,43346,43347,43347,43348,43349,43350,43350,43351,43352,43353,43353,43354, +43355,43356,43357,43357,43358,43359,43360,43360,43361,43362,43363,43363,43364, +43365,43366,43366,43367,43368,43369,43369,43370,43371,43372,43372,43373,43374, +43375,43375,43376,43377,43378,43378,43379,43380,43381,43381,43382,43383,43384, +43384,43385,43386,43387,43387,43388,43389,43390,43390,43391,43392,43393,43394, +43394,43395,43396,43397,43397,43398,43399,43400,43400,43401,43402,43403,43403, +43404,43405,43406,43406,43407,43408,43409,43409,43410,43411,43412,43412,43413, +43414,43415,43415,43416,43417,43418,43418,43419,43420,43421,43421,43422,43423, +43424,43424,43425,43426,43427,43427,43428,43429,43430,43430,43431,43432,43433, +43433,43434,43435,43436,43437,43437,43438,43439,43440,43440,43441,43442,43443, +43443,43444,43445,43446,43446,43447,43448,43449,43449,43450,43451,43452,43452, +43453,43454,43455,43455,43456,43457,43458,43458,43459,43460,43461,43461,43462, +43463,43464,43464,43465,43466,43467,43467,43468,43469,43470,43470,43471,43472, +43473,43473,43474,43475,43476,43476,43477,43478,43479,43479,43480,43481,43482, +43482,43483,43484,43485,43485,43486,43487,43488,43488,43489,43490,43491,43491, +43492,43493,43494,43494,43495,43496,43497,43497,43498,43499,43500,43501,43501, +43502,43503,43504,43504,43505,43506,43507,43507,43508,43509,43510,43510,43511, +43512,43513,43513,43514,43515,43516,43516,43517,43518,43519,43519,43520,43521, +43522,43522,43523,43524,43525,43525,43526,43527,43528,43528,43529,43530,43531, +43531,43532,43533,43534,43534,43535,43536,43537,43537,43538,43539,43540,43540, +43541,43542,43543,43543,43544,43545,43546,43546,43547,43548,43549,43549,43550, +43551,43552,43552,43553,43554,43555,43555,43556,43557,43558,43558,43559,43560, +43561,43561,43562,43563,43564,43564,43565,43566,43567,43567,43568,43569,43570, +43570,43571,43572,43573,43573,43574,43575,43576,43576,43577,43578,43579,43579, +43580,43581,43582,43582,43583,43584,43585,43585,43586,43587,43588,43588,43589, +43590,43591,43591,43592,43593,43594,43594,43595,43596,43597,43597,43598,43599, +43600,43600,43601,43602,43603,43603,43604,43605,43606,43606,43607,43608,43609, +43609,43610,43611,43612,43612,43613,43614,43615,43615,43616,43617,43618,43618, +43619,43620,43621,43621,43622,43623,43624,43624,43625,43626,43627,43627,43628, +43629,43630,43630,43631,43632,43633,43633,43634,43635,43636,43636,43637,43638, +43639,43639,43640,43641,43642,43642,43643,43644,43645,43645,43646,43647,43648, +43648,43649,43650,43651,43651,43652,43653,43654,43654,43655,43656,43657,43657, +43658,43659,43660,43660,43661,43662,43663,43663,43664,43665,43666,43666,43667, +43668,43669,43669,43670,43671,43672,43672,43673,43674,43675,43675,43676,43677, +43678,43678,43679,43680,43681,43681,43682,43683,43684,43684,43685,43686,43687, +43687,43688,43689,43690,43690,43691,43692,43693,43693,43694,43695,43696,43696, +43697,43698,43699,43699,43700,43701,43702,43702,43703,43704,43705,43705,43706, +43707,43707,43708,43709,43710,43710,43711,43712,43713,43713,43714,43715,43716, +43716,43717,43718,43719,43719,43720,43721,43722,43722,43723,43724,43725,43725, +43726,43727,43728,43728,43729,43730,43731,43731,43732,43733,43734,43734,43735, +43736,43737,43737,43738,43739,43740,43740,43741,43742,43743,43743,43744,43745, +43746,43746,43747,43748,43749,43749,43750,43751,43752,43752,43753,43754,43755, +43755,43756,43757,43758,43758,43759,43760,43761,43761,43762,43763,43764,43764, +43765,43766,43767,43767,43768,43769,43769,43770,43771,43772,43772,43773,43774, +43775,43775,43776,43777,43778,43778,43779,43780,43781,43781,43782,43783,43784, +43784,43785,43786,43787,43787,43788,43789,43790,43790,43791,43792,43793,43793, +43794,43795,43796,43796,43797,43798,43799,43799,43800,43801,43802,43802,43803, +43804,43805,43805,43806,43807,43808,43808,43809,43810,43811,43811,43812,43813, +43813,43814,43815,43816,43816,43817,43818,43819,43819,43820,43821,43822,43822, +43823,43824,43825,43825,43826,43827,43828,43828,43829,43830,43831,43831,43832, +43833,43834,43834,43835,43836,43837,43837,43838,43839,43840,43840,43841,43842, +43843,43843,43844,43845,43846,43846,43847,43848,43849,43849,43850,43851,43851, +43852,43853,43854,43854,43855,43856,43857,43857,43858,43859,43860,43860,43861, +43862,43863,43863,43864,43865,43866,43866,43867,43868,43869,43869,43870,43871, +43872,43872,43873,43874,43875,43875,43876,43877,43878,43878,43879,43880,43881, +43881,43882,43883,43883,43884,43885,43886,43886,43887,43888,43889,43889,43890, +43891,43892,43892,43893,43894,43895,43895,43896,43897,43898,43898,43899,43900, +43901,43901,43902,43903,43904,43904,43905,43906,43907,43907,43908,43909,43910, +43910,43911,43912,43912,43913,43914,43915,43915,43916,43917,43918,43918,43919, +43920,43921,43921,43922,43923,43924,43924,43925,43926,43927,43927,43928,43929, +43930,43930,43931,43932,43933,43933,43934,43935,43936,43936,43937,43938,43938, +43939,43940,43941,43941,43942,43943,43944,43944,43945,43946,43947,43947,43948, +43949,43950,43950,43951,43952,43953,43953,43954,43955,43956,43956,43957,43958, +43959,43959,43960,43961,43961,43962,43963,43964,43964,43965,43966,43967,43967, +43968,43969,43970,43970,43971,43972,43973,43973,43974,43975,43976,43976,43977, +43978,43979,43979,43980,43981,43982,43982,43983,43984,43984,43985,43986,43987, +43987,43988,43989,43990,43990,43991,43992,43993,43993,43994,43995,43996,43996, +43997,43998,43999,43999,44000,44001,44002,44002,44003,44004,44004,44005,44006, +44007,44007,44008,44009,44010,44010,44011,44012,44013,44013,44014,44015,44016, +44016,44017,44018,44019,44019,44020,44021,44022,44022,44023,44024,44025,44025, +44026,44027,44027,44028,44029,44030,44030,44031,44032,44033,44033,44034,44035, +44036,44036,44037,44038,44039,44039,44040,44041,44042,44042,44043,44044,44044, +44045,44046,44047,44047,44048,44049,44050,44050,44051,44052,44053,44053,44054, +44055,44056,44056,44057,44058,44059,44059,44060,44061,44062,44062,44063,44064, +44064,44065,44066,44067,44067,44068,44069,44070,44070,44071,44072,44073,44073, +44074,44075,44076,44076,44077,44078,44079,44079,44080,44081,44081,44082,44083, +44084,44084,44085,44086,44087,44087,44088,44089,44090,44090,44091,44092,44093, +44093,44094,44095,44096,44096,44097,44098,44098,44099,44100,44101,44101,44102, +44103,44104,44104,44105,44106,44107,44107,44108,44109,44110,44110,44111,44112, +44113,44113,44114,44115,44115,44116,44117,44118,44118,44119,44120,44121,44121, +44122,44123,44124,44124,44125,44126,44127,44127,44128,44129,44130,44130,44131, +44132,44132,44133,44134,44135,44135,44136,44137,44138,44138,44139,44140,44141, +44141,44142,44143,44144,44144,44145,44146,44146,44147,44148,44149,44149,44150, +44151,44152,44152,44153,44154,44155,44155,44156,44157,44158,44158,44159,44160, +44161,44161,44162,44163,44163,44164,44165,44166,44166,44167,44168,44169,44169, +44170,44171,44172,44172,44173,44174,44175,44175,44176,44177,44177,44178,44179, +44180,44180,44181,44182,44183,44183,44184,44185,44186,44186,44187,44188,44189, +44189,44190,44191,44191,44192,44193,44194,44194,44195,44196,44197,44197,44198, +44199,44200,44200,44201,44202,44203,44203,44204,44205,44205,44206,44207,44208, +44208,44209,44210,44211,44211,44212,44213,44214,44214,44215,44216,44217,44217, +44218,44219,44219,44220,44221,44222,44222,44223,44224,44225,44225,44226,44227, +44228,44228,44229,44230,44231,44231,44232,44233,44233,44234,44235,44236,44236, +44237,44238,44239,44239,44240,44241,44242,44242,44243,44244,44245,44245,44246, +44247,44247,44248,44249,44250,44250,44251,44252,44253,44253,44254,44255,44256, +44256,44257,44258,44258,44259,44260,44261,44261,44262,44263,44264,44264,44265, +44266,44267,44267,44268,44269,44270,44270,44271,44272,44272,44273,44274,44275, +44275,44276,44277,44278,44278,44279,44280,44281,44281,44282,44283,44283,44284, +44285,44286,44286,44287,44288,44289,44289,44290,44291,44292,44292,44293,44294, +44295,44295,44296,44297,44297,44298,44299,44300,44300,44301,44302,44303,44303, +44304,44305,44306,44306,44307,44308,44308,44309,44310,44311,44311,44312,44313, +44314,44314,44315,44316,44317,44317,44318,44319,44319,44320,44321,44322,44322, +44323,44324,44325,44325,44326,44327,44328,44328,44329,44330,44331,44331,44332, +44333,44333,44334,44335,44336,44336,44337,44338,44339,44339,44340,44341,44342, +44342,44343,44344,44344,44345,44346,44347,44347,44348,44349,44350,44350,44351, +44352,44353,44353,44354,44355,44355,44356,44357,44358,44358,44359,44360,44361, +44361,44362,44363,44364,44364,44365,44366,44366,44367,44368,44369,44369,44370, +44371,44372,44372,44373,44374,44375,44375,44376,44377,44377,44378,44379,44380, +44380,44381,44382,44383,44383,44384,44385,44386,44386,44387,44388,44388,44389, +44390,44391,44391,44392,44393,44394,44394,44395,44396,44397,44397,44398,44399, +44399,44400,44401,44402,44402,44403,44404,44405,44405,44406,44407,44408,44408, +44409,44410,44410,44411,44412,44413,44413,44414,44415,44416,44416,44417,44418, +44418,44419,44420,44421,44421,44422,44423,44424,44424,44425,44426,44427,44427, +44428,44429,44429,44430,44431,44432,44432,44433,44434,44435,44435,44436,44437, +44438,44438,44439,44440,44440,44441,44442,44443,44443,44444,44445,44446,44446, +44447,44448,44448,44449,44450,44451,44451,44452,44453,44454,44454,44455,44456, +44457,44457,44458,44459,44459,44460,44461,44462,44462,44463,44464,44465,44465, +44466,44467,44468,44468,44469,44470,44470,44471,44472,44473,44473,44474,44475, +44476,44476,44477,44478,44478,44479,44480,44481,44481,44482,44483,44484,44484, +44485,44486,44487,44487,44488,44489,44489,44490,44491,44492,44492,44493,44494, +44495,44495,44496,44497,44497,44498,44499,44500,44500,44501,44502,44503,44503, +44504,44505,44506,44506,44507,44508,44508,44509,44510,44511,44511,44512,44513, +44514,44514,44515,44516,44516,44517,44518,44519,44519,44520,44521,44522,44522, +44523,44524,44524,44525,44526,44527,44527,44528,44529,44530,44530,44531,44532, +44533,44533,44534,44535,44535,44536,44537,44538,44538,44539,44540,44541,44541, +44542,44543,44543,44544,44545,44546,44546,44547,44548,44549,44549,44550,44551, +44551,44552,44553,44554,44554,44555,44556,44557,44557,44558,44559,44560,44560, +44561,44562,44562,44563,44564,44565,44565,44566,44567,44568,44568,44569,44570, +44570,44571,44572,44573,44573,44574,44575,44576,44576,44577,44578,44578,44579, +44580,44581,44581,44582,44583,44584,44584,44585,44586,44586,44587,44588,44589, +44589,44590,44591,44592,44592,44593,44594,44594,44595,44596,44597,44597,44598, +44599,44600,44600,44601,44602,44603,44603,44604,44605,44605,44606,44607,44608, +44608,44609,44610,44611,44611,44612,44613,44613,44614,44615,44616,44616,44617, +44618,44619,44619,44620,44621,44621,44622,44623,44624,44624,44625,44626,44627, +44627,44628,44629,44629,44630,44631,44632,44632,44633,44634,44635,44635,44636, +44637,44637,44638,44639,44640,44640,44641,44642,44643,44643,44644,44645,44645, +44646,44647,44648,44648,44649,44650,44651,44651,44652,44653,44653,44654,44655, +44656,44656,44657,44658,44659,44659,44660,44661,44661,44662,44663,44664,44664, +44665,44666,44667,44667,44668,44669,44669,44670,44671,44672,44672,44673,44674, +44675,44675,44676,44677,44677,44678,44679,44680,44680,44681,44682,44683,44683, +44684,44685,44685,44686,44687,44688,44688,44689,44690,44691,44691,44692,44693, +44693,44694,44695,44696,44696,44697,44698,44699,44699,44700,44701,44701,44702, +44703,44704,44704,44705,44706,44706,44707,44708,44709,44709,44710,44711,44712, +44712,44713,44714,44714,44715,44716,44717,44717,44718,44719,44720,44720,44721, +44722,44722,44723,44724,44725,44725,44726,44727,44728,44728,44729,44730,44730, +44731,44732,44733,44733,44734,44735,44736,44736,44737,44738,44738,44739,44740, +44741,44741,44742,44743,44744,44744,44745,44746,44746,44747,44748,44749,44749, +44750,44751,44751,44752,44753,44754,44754,44755,44756,44757,44757,44758,44759, +44759,44760,44761,44762,44762,44763,44764,44765,44765,44766,44767,44767,44768, +44769,44770,44770,44771,44772,44773,44773,44774,44775,44775,44776,44777,44778, +44778,44779,44780,44780,44781,44782,44783,44783,44784,44785,44786,44786,44787, +44788,44788,44789,44790,44791,44791,44792,44793,44794,44794,44795,44796,44796, +44797,44798,44799,44799,44800,44801,44801,44802,44803,44804,44804,44805,44806, +44807,44807,44808,44809,44809,44810,44811,44812,44812,44813,44814,44815,44815, +44816,44817,44817,44818,44819,44820,44820,44821,44822,44822,44823,44824,44825, +44825,44826,44827,44828,44828,44829,44830,44830,44831,44832,44833,44833,44834, +44835,44835,44836,44837,44838,44838,44839,44840,44841,44841,44842,44843,44843, +44844,44845,44846,44846,44847,44848,44849,44849,44850,44851,44851,44852,44853, +44854,44854,44855,44856,44856,44857,44858,44859,44859,44860,44861,44862,44862, +44863,44864,44864,44865,44866,44867,44867,44868,44869,44869,44870,44871,44872, +44872,44873,44874,44875,44875,44876,44877,44877,44878,44879,44880,44880,44881, +44882,44882,44883,44884,44885,44885,44886,44887,44888,44888,44889,44890,44890, +44891,44892,44893,44893,44894,44895,44895,44896,44897,44898,44898,44899,44900, +44901,44901,44902,44903,44903,44904,44905,44906,44906,44907,44908,44908,44909, +44910,44911,44911,44912,44913,44914,44914,44915,44916,44916,44917,44918,44919, +44919,44920,44921,44921,44922,44923,44924,44924,44925,44926,44927,44927,44928, +44929,44929,44930,44931,44932,44932,44933,44934,44934,44935,44936,44937,44937, +44938,44939,44940,44940,44941,44942,44942,44943,44944,44945,44945,44946,44947, +44947,44948,44949,44950,44950,44951,44952,44952,44953,44954,44955,44955,44956, +44957,44958,44958,44959,44960,44960,44961,44962,44963,44963,44964,44965,44965, +44966,44967,44968,44968,44969,44970,44971,44971,44972,44973,44973,44974,44975, +44976,44976,44977,44978,44978,44979,44980,44981,44981,44982,44983,44983,44984, +44985,44986,44986,44987,44988,44989,44989,44990,44991,44991,44992,44993,44994, +44994,44995,44996,44996,44997,44998,44999,44999,45000,45001,45001,45002,45003, +45004,45004,45005,45006,45007,45007,45008,45009,45009,45010,45011,45012,45012, +45013,45014,45014,45015,45016,45017,45017,45018,45019,45019,45020,45021,45022, +45022,45023,45024,45025,45025,45026,45027,45027,45028,45029,45030,45030,45031, +45032,45032,45033,45034,45035,45035,45036,45037,45037,45038,45039,45040,45040, +45041,45042,45042,45043,45044,45045,45045,45046,45047,45048,45048,45049,45050, +45050,45051,45052,45053,45053,45054,45055,45055,45056,45057,45058,45058,45059, +45060,45060,45061,45062,45063,45063,45064,45065,45065,45066,45067,45068,45068, +45069,45070,45071,45071,45072,45073,45073,45074,45075,45076,45076,45077,45078, +45078,45079,45080,45081,45081,45082,45083,45083,45084,45085,45086,45086,45087, +45088,45088,45089,45090,45091,45091,45092,45093,45094,45094,45095,45096,45096, +45097,45098,45099,45099,45100,45101,45101,45102,45103,45104,45104,45105,45106, +45106,45107,45108,45109,45109,45110,45111,45111,45112,45113,45114,45114,45115, +45116,45116,45117,45118,45119,45119,45120,45121,45121,45122,45123,45124,45124, +45125,45126,45127,45127,45128,45129,45129,45130,45131,45132,45132,45133,45134, +45134,45135,45136,45137,45137,45138,45139,45139,45140,45141,45142,45142,45143, +45144,45144,45145,45146,45147,45147,45148,45149,45149,45150,45151,45152,45152, +45153,45154,45154,45155,45156,45157,45157,45158,45159,45160,45160,45161,45162, +45162,45163,45164,45165,45165,45166,45167,45167,45168,45169,45170,45170,45171, +45172,45172,45173,45174,45175,45175,45176,45177,45177,45178,45179,45180,45180, +45181,45182,45182,45183,45184,45185,45185,45186,45187,45187,45188,45189,45190, +45190,45191,45192,45192,45193,45194,45195,45195,45196,45197,45197,45198,45199, +45200,45200,45201,45202,45202,45203,45204,45205,45205,45206,45207,45207,45208, +45209,45210,45210,45211,45212,45212,45213,45214,45215,45215,45216,45217,45218, +45218,45219,45220,45220,45221,45222,45223,45223,45224,45225,45225,45226,45227, +45228,45228,45229,45230,45230,45231,45232,45233,45233,45234,45235,45235,45236, +45237,45238,45238,45239,45240,45240,45241,45242,45243,45243,45244,45245,45245, +45246,45247,45248,45248,45249,45250,45250,45251,45252,45253,45253,45254,45255, +45255,45256,45257,45258,45258,45259,45260,45260,45261,45262,45263,45263,45264, +45265,45265,45266,45267,45268,45268,45269,45270,45270,45271,45272,45273,45273, +45274,45275,45275,45276,45277,45278,45278,45279,45280,45280,45281,45282,45283, +45283,45284,45285,45285,45286,45287,45288,45288,45289,45290,45290,45291,45292, +45293,45293,45294,45295,45295,45296,45297,45298,45298,45299,45300,45300,45301, +45302,45303,45303,45304,45305,45305,45306,45307,45308,45308,45309,45310,45310, +45311,45312,45313,45313,45314,45315,45315,45316,45317,45318,45318,45319,45320, +45320,45321,45322,45323,45323,45324,45325,45325,45326,45327,45328,45328,45329, +45330,45330,45331,45332,45333,45333,45334,45335,45335,45336,45337,45337,45338, +45339,45340,45340,45341,45342,45342,45343,45344,45345,45345,45346,45347,45347, +45348,45349,45350,45350,45351,45352,45352,45353,45354,45355,45355,45356,45357, +45357,45358,45359,45360,45360,45361,45362,45362,45363,45364,45365,45365,45366, +45367,45367,45368,45369,45370,45370,45371,45372,45372,45373,45374,45375,45375, +45376,45377,45377,45378,45379,45380,45380,45381,45382,45382,45383,45384,45385, +45385,45386,45387,45387,45388,45389,45390,45390,45391,45392,45392,45393,45394, +45394,45395,45396,45397,45397,45398,45399,45399,45400,45401,45402,45402,45403, +45404,45404,45405,45406,45407,45407,45408,45409,45409,45410,45411,45412,45412, +45413,45414,45414,45415,45416,45417,45417,45418,45419,45419,45420,45421,45422, +45422,45423,45424,45424,45425,45426,45427,45427,45428,45429,45429,45430,45431, +45431,45432,45433,45434,45434,45435,45436,45436,45437,45438,45439,45439,45440, +45441,45441,45442,45443,45444,45444,45445,45446,45446,45447,45448,45449,45449, +45450,45451,45451,45452,45453,45454,45454,45455,45456,45456,45457,45458,45458, +45459,45460,45461,45461,45462,45463,45463,45464,45465,45466,45466,45467,45468, +45468,45469,45470,45471,45471,45472,45473,45473,45474,45475,45476,45476,45477, +45478,45478,45479,45480,45481,45481,45482,45483,45483,45484,45485,45485,45486, +45487,45488,45488,45489,45490,45490,45491,45492,45493,45493,45494,45495,45495, +45496,45497,45498,45498,45499,45500,45500,45501,45502,45503,45503,45504,45505, +45505,45506,45507,45507,45508,45509,45510,45510,45511,45512,45512,45513,45514, +45515,45515,45516,45517,45517,45518,45519,45520,45520,45521,45522,45522,45523, +45524,45525,45525,45526,45527,45527,45528,45529,45529,45530,45531,45532,45532, +45533,45534,45534,45535,45536,45537,45537,45538,45539,45539,45540,45541,45542, +45542,45543,45544,45544,45545,45546,45546,45547,45548,45549,45549,45550,45551, +45551,45552,45553,45554,45554,45555,45556,45556,45557,45558,45559,45559,45560, +45561,45561,45562,45563,45564,45564,45565,45566,45566,45567,45568,45568,45569, +45570,45571,45571,45572,45573,45573,45574,45575,45576,45576,45577,45578,45578, +45579,45580,45581,45581,45582,45583,45583,45584,45585,45585,45586,45587,45588, +45588,45589,45590,45590,45591,45592,45593,45593,45594,45595,45595,45596,45597, +45597,45598,45599,45600,45600,45601,45602,45602,45603,45604,45605,45605,45606, +45607,45607,45608,45609,45610,45610,45611,45612,45612,45613,45614,45614,45615, +45616,45617,45617,45618,45619,45619,45620,45621,45622,45622,45623,45624,45624, +45625,45626,45626,45627,45628,45629,45629,45630,45631,45631,45632,45633,45634, +45634,45635,45636,45636,45637,45638,45639,45639,45640,45641,45641,45642,45643, +45643,45644,45645,45646,45646,45647,45648,45648,45649,45650,45651,45651,45652, +45653,45653,45654,45655,45655,45656,45657,45658,45658,45659,45660,45660,45661, +45662,45663,45663,45664,45665,45665,45666,45667,45667,45668,45669,45670,45670, +45671,45672,45672,45673,45674,45675,45675,45676,45677,45677,45678,45679,45679, +45680,45681,45682,45682,45683,45684,45684,45685,45686,45687,45687,45688,45689, +45689,45690,45691,45691,45692,45693,45694,45694,45695,45696,45696,45697,45698, +45699,45699,45700,45701,45701,45702,45703,45703,45704,45705,45706,45706,45707, +45708,45708,45709,45710,45711,45711,45712,45713,45713,45714,45715,45715,45716, +45717,45718,45718,45719,45720,45720,45721,45722,45723,45723,45724,45725,45725, +45726,45727,45727,45728,45729,45730,45730,45731,45732,45732,45733,45734,45735, +45735,45736,45737,45737,45738,45739,45739,45740,45741,45742,45742,45743,45744, +45744,45745,45746,45747,45747,45748,45749,45749,45750,45751,45751,45752,45753, +45754,45754,45755,45756,45756,45757,45758,45758,45759,45760,45761,45761,45762, +45763,45763,45764,45765,45766,45766,45767,45768,45768,45769,45770,45770,45771, +45772,45773,45773,45774,45775,45775,45776,45777,45778,45778,45779,45780,45780, +45781,45782,45782,45783,45784,45785,45785,45786,45787,45787,45788,45789,45789, +45790,45791,45792,45792,45793,45794,45794,45795,45796,45797,45797,45798,45799, +45799,45800,45801,45801,45802,45803,45804,45804,45805,45806,45806,45807,45808, +45808,45809,45810,45811,45811,45812,45813,45813,45814,45815,45816,45816,45817, +45818,45818,45819,45820,45820,45821,45822,45823,45823,45824,45825,45825,45826, +45827,45827,45828,45829,45830,45830,45831,45832,45832,45833,45834,45834,45835, +45836,45837,45837,45838,45839,45839,45840,45841,45842,45842,45843,45844,45844, +45845,45846,45846,45847,45848,45849,45849,45850,45851,45851,45852,45853,45853, +45854,45855,45856,45856,45857,45858,45858,45859,45860,45860,45861,45862,45863, +45863,45864,45865,45865,45866,45867,45868,45868,45869,45870,45870,45871,45872, +45872,45873,45874,45875,45875,45876,45877,45877,45878,45879,45879,45880,45881, +45882,45882,45883,45884,45884,45885,45886,45886,45887,45888,45889,45889,45890, +45891,45891,45892,45893,45894,45894,45895,45896,45896,45897,45898,45898,45899, +45900,45901,45901,45902,45903,45903,45904,45905,45905,45906,45907,45908,45908, +45909,45910,45910,45911,45912,45912,45913,45914,45915,45915,45916,45917,45917, +45918,45919,45919,45920,45921,45922,45922,45923,45924,45924,45925,45926,45926, +45927,45928,45929,45929,45930,45931,45931,45932,45933,45933,45934,45935,45936, +45936,45937,45938,45938,45939,45940,45940,45941,45942,45943,45943,45944,45945, +45945,45946,45947,45948,45948,45949,45950,45950,45951,45952,45952,45953,45954, +45955,45955,45956,45957,45957,45958,45959,45959,45960,45961,45962,45962,45963, +45964,45964,45965,45966,45966,45967,45968,45969,45969,45970,45971,45971,45972, +45973,45973,45974,45975,45976,45976,45977,45978,45978,45979,45980,45980,45981, +45982,45983,45983,45984,45985,45985,45986,45987,45987,45988,45989,45990,45990, +45991,45992,45992,45993,45994,45994,45995,45996,45997,45997,45998,45999,45999, +46000,46001,46001,46002,46003,46004,46004,46005,46006,46006,46007,46008,46008, +46009,46010,46011,46011,46012,46013,46013,46014,46015,46015,46016,46017,46018, +46018,46019,46020,46020,46021,46022,46022,46023,46024,46025,46025,46026,46027, +46027,46028,46029,46029,46030,46031,46031,46032,46033,46034,46034,46035,46036, +46036,46037,46038,46038,46039,46040,46041,46041,46042,46043,46043,46044,46045, +46045,46046,46047,46048,46048,46049,46050,46050,46051,46052,46052,46053,46054, +46055,46055,46056,46057,46057,46058,46059,46059,46060,46061,46062,46062,46063, +46064,46064,46065,46066,46066,46067,46068,46069,46069,46070,46071,46071,46072, +46073,46073,46074,46075,46076,46076,46077,46078,46078,46079,46080,46080,46081, +46082,46082,46083,46084,46085,46085,46086,46087,46087,46088,46089,46089,46090, +46091,46092,46092,46093,46094,46094,46095,46096,46096,46097,46098,46099,46099, +46100,46101,46101,46102,46103,46103,46104,46105,46106,46106,46107,46108,46108, +46109,46110,46110,46111,46112,46112,46113,46114,46115,46115,46116,46117,46117, +46118,46119,46119,46120,46121,46122,46122,46123,46124,46124,46125,46126,46126, +46127,46128,46129,46129,46130,46131,46131,46132,46133,46133,46134,46135,46136, +46136,46137,46138,46138,46139,46140,46140,46141,46142,46142,46143,46144,46145, +46145,46146,46147,46147,46148,46149,46149,46150,46151,46152,46152,46153,46154, +46154,46155,46156,46156,46157,46158,46159,46159,46160,46161,46161,46162,46163, +46163,46164,46165,46165,46166,46167,46168,46168,46169,46170,46170,46171,46172, +46172,46173,46174,46175,46175,46176,46177,46177,46178,46179,46179,46180,46181, +46181,46182,46183,46184,46184,46185,46186,46186,46187,46188,46188,46189,46190, +46191,46191,46192,46193,46193,46194,46195,46195,46196,46197,46197,46198,46199, +46200,46200,46201,46202,46202,46203,46204,46204,46205,46206,46207,46207,46208, +46209,46209,46210,46211,46211,46212,46213,46213,46214,46215,46216,46216,46217, +46218,46218,46219,46220,46220,46221,46222,46223,46223,46224,46225,46225,46226, +46227,46227,46228,46229,46229,46230,46231,46232,46232,46233,46234,46234,46235, +46236,46236,46237,46238,46239,46239,46240,46241,46241,46242,46243,46243,46244, +46245,46245,46246,46247,46248,46248,46249,46250,46250,46251,46252,46252,46253, +46254,46255,46255,46256,46257,46257,46258,46259,46259,46260,46261,46261,46262, +46263,46264,46264,46265,46266,46266,46267,46268,46268,46269,46270,46270,46271, +46272,46273,46273,46274,46275,46275,46276,46277,46277,46278,46279,46280,46280, +46281,46282,46282,46283,46284,46284,46285,46286,46286,46287,46288,46289,46289, +46290,46291,46291,46292,46293,46293,46294,46295,46295,46296,46297,46298,46298, +46299,46300,46300,46301,46302,46302,46303,46304,46304,46305,46306,46307,46307, +46308,46309,46309,46310,46311,46311,46312,46313,46314,46314,46315,46316,46316, +46317,46318,46318,46319,46320,46320,46321,46322,46323,46323,46324,46325,46325, +46326,46327,46327,46328,46329,46329,46330,46331,46332,46332,46333,46334,46334, +46335,46336,46336,46337,46338,46338,46339,46340,46341,46341,46342,46343,46343, +46344,46345,46345,46346,46347,46347,46348,46349,46350,46350,46351,46352,46352, +46353,46354,46354,46355,46356,46356,46357,46358,46359,46359,46360,46361,46361, +46362,46363,46363,46364,46365,46365,46366,46367,46368,46368,46369,46370,46370, +46371,46372,46372,46373,46374,46374,46375,46376,46377,46377,46378,46379,46379, +46380,46381,46381,46382,46383,46383,46384,46385,46386,46386,46387,46388,46388, +46389,46390,46390,46391,46392,46392,46393,46394,46395,46395,46396,46397,46397, +46398,46399,46399,46400,46401,46401,46402,46403,46404,46404,46405,46406,46406, +46407,46408,46408,46409,46410,46410,46411,46412,46413,46413,46414,46415,46415, +46416,46417,46417,46418,46419,46419,46420,46421,46422,46422,46423,46424,46424, +46425,46426,46426,46427,46428,46428,46429,46430,46431,46431,46432,46433,46433, +46434,46435,46435,46436,46437,46437,46438,46439,46440,46440,46441,46442,46442, +46443,46444,46444,46445,46446,46446,46447,46448,46449,46449,46450,46451,46451, +46452,46453,46453,46454,46455,46455,46456,46457,46457,46458,46459,46460,46460, +46461,46462,46462,46463,46464,46464,46465,46466,46466,46467,46468,46469,46469, +46470,46471,46471,46472,46473,46473,46474,46475,46475,46476,46477,46478,46478, +46479,46480,46480,46481,46482,46482,46483,46484,46484,46485,46486,46486,46487, +46488,46489,46489,46490,46491,46491,46492,46493,46493,46494,46495,46495,46496, +46497,46498,46498,46499,46500,46500,46501,46502,46502,46503,46504,46504,46505, +46506,46506,46507,46508,46509,46509,46510,46511,46511,46512,46513,46513,46514, +46515,46515,46516,46517,46518,46518,46519,46520,46520,46521,46522,46522,46523, +46524,46524,46525,46526,46526,46527,46528,46529,46529,46530,46531,46531,46532, +46533,46533,46534,46535,46535,46536,46537,46538,46538,46539,46540,46540,46541, +46542,46542,46543,46544,46544,46545,46546,46546,46547,46548,46549,46549,46550, +46551,46551,46552,46553,46553,46554,46555,46555,46556,46557,46558,46558,46559, +46560,46560,46561,46562,46562,46563,46564,46564,46565,46566,46566,46567,46568, +46569,46569,46570,46571,46571,46572,46573,46573,46574,46575,46575,46576,46577, +46577,46578,46579,46580,46580,46581,46582,46582,46583,46584,46584,46585,46586, +46586,46587,46588,46588,46589,46590,46591,46591,46592,46593,46593,46594,46595, +46595,46596,46597,46597,46598,46599,46600,46600,46601,46602,46602,46603,46604, +46604,46605,46606,46606,46607,46608,46608,46609,46610,46611,46611,46612,46613, +46613,46614,46615,46615,46616,46617,46617,46618,46619,46619,46620,46621,46622, +46622,46623,46624,46624,46625,46626,46626,46627,46628,46628,46629,46630,46630, +46631,46632,46633,46633,46634,46635,46635,46636,46637,46637,46638,46639,46639, +46640,46641,46641,46642,46643,46644,46644,46645,46646,46646,46647,46648,46648, +46649,46650,46650,46651,46652,46652,46653,46654,46655,46655,46656,46657,46657, +46658,46659,46659,46660,46661,46661,46662,46663,46663,46664,46665,46665,46666, +46667,46668,46668,46669,46670,46670,46671,46672,46672,46673,46674,46674,46675, +46676,46676,46677,46678,46679,46679,46680,46681,46681,46682,46683,46683,46684, +46685,46685,46686,46687,46687,46688,46689,46690,46690,46691,46692,46692,46693, +46694,46694,46695,46696,46696,46697,46698,46698,46699,46700,46701,46701,46702, +46703,46703,46704,46705,46705,46706,46707,46707,46708,46709,46709,46710,46711, +46711,46712,46713,46714,46714,46715,46716,46716,46717,46718,46718,46719,46720, +46720,46721,46722,46722,46723,46724,46725,46725,46726,46727,46727,46728,46729, +46729,46730,46731,46731,46732,46733,46733,46734,46735,46735,46736,46737,46738, +46738,46739,46740,46740,46741,46742,46742,46743,46744,46744,46745,46746,46746, +46747,46748,46749,46749,46750,46751,46751,46752,46753,46753,46754,46755,46755, +46756,46757,46757,46758,46759,46759,46760,46761,46762,46762,46763,46764,46764, +46765,46766,46766,46767,46768,46768,46769,46770,46770,46771,46772,46772,46773, +46774,46775,46775,46776,46777,46777,46778,46779,46779,46780,46781,46781,46782, +46783,46783,46784,46785,46785,46786,46787,46788,46788,46789,46790,46790,46791, +46792,46792,46793,46794,46794,46795,46796,46796,46797,46798,46798,46799,46800, +46801,46801,46802,46803,46803,46804,46805,46805,46806,46807,46807,46808,46809, +46809,46810,46811,46811,46812,46813,46814,46814,46815,46816,46816,46817,46818, +46818,46819,46820,46820,46821,46822,46822,46823,46824,46824,46825,46826,46827, +46827,46828,46829,46829,46830,46831,46831,46832,46833,46833,46834,46835,46835, +46836,46837,46837,46838,46839,46840,46840,46841,46842,46842,46843,46844,46844, +46845,46846,46846,46847,46848,46848,46849,46850,46850,46851,46852,46853,46853, +46854,46855,46855,46856,46857,46857,46858,46859,46859,46860,46861,46861,46862, +46863,46863,46864,46865,46865,46866,46867,46868,46868,46869,46870,46870,46871, +46872,46872,46873,46874,46874,46875,46876,46876,46877,46878,46878,46879,46880, +46881,46881,46882,46883,46883,46884,46885,46885,46886,46887,46887,46888,46889, +46889,46890,46891,46891,46892,46893,46893,46894,46895,46896,46896,46897,46898, +46898,46899,46900,46900,46901,46902,46902,46903,46904,46904,46905,46906,46906, +46907,46908,46908,46909,46910,46911,46911,46912,46913,46913,46914,46915,46915, +46916,46917,46917,46918,46919,46919,46920,46921,46921,46922,46923,46923,46924, +46925,46926,46926,46927,46928,46928,46929,46930,46930,46931,46932,46932,46933, +46934,46934,46935,46936,46936,46937,46938,46938,46939,46940,46941,46941,46942, +46943,46943,46944,46945,46945,46946,46947,46947,46948,46949,46949,46950,46951, +46951,46952,46953,46953,46954,46955,46956,46956,46957,46958,46958,46959,46960, +46960,46961,46962,46962,46963,46964,46964,46965,46966,46966,46967,46968,46968, +46969,46970,46971,46971,46972,46973,46973,46974,46975,46975,46976,46977,46977, +46978,46979,46979,46980,46981,46981,46982,46983,46983,46984,46985,46985,46986, +46987,46988,46988,46989,46990,46990,46991,46992,46992,46993,46994,46994,46995, +46996,46996,46997,46998,46998,46999,47000,47000,47001,47002,47003,47003,47004, +47005,47005,47006,47007,47007,47008,47009,47009,47010,47011,47011,47012,47013, +47013,47014,47015,47015,47016,47017,47017,47018,47019,47020,47020,47021,47022, +47022,47023,47024,47024,47025,47026,47026,47027,47028,47028,47029,47030,47030, +47031,47032,47032,47033,47034,47034,47035,47036,47037,47037,47038,47039,47039, +47040,47041,47041,47042,47043,47043,47044,47045,47045,47046,47047,47047,47048, +47049,47049,47050,47051,47051,47052,47053,47054,47054,47055,47056,47056,47057, +47058,47058,47059,47060,47060,47061,47062,47062,47063,47064,47064,47065,47066, +47066,47067,47068,47068,47069,47070,47070,47071,47072,47073,47073,47074,47075, +47075,47076,47077,47077,47078,47079,47079,47080,47081,47081,47082,47083,47083, +47084,47085,47085,47086,47087,47087,47088,47089,47089,47090,47091,47092,47092, +47093,47094,47094,47095,47096,47096,47097,47098,47098,47099,47100,47100,47101, +47102,47102,47103,47104,47104,47105,47106,47106,47107,47108,47108,47109,47110, +47111,47111,47112,47113,47113,47114,47115,47115,47116,47117,47117,47118,47119, +47119,47120,47121,47121,47122,47123,47123,47124,47125,47125,47126,47127,47127, +47128,47129,47130,47130,47131,47132,47132,47133,47134,47134,47135,47136,47136, +47137,47138,47138,47139,47140,47140,47141,47142,47142,47143,47144,47144,47145, +47146,47146,47147,47148,47149,47149,47150,47151,47151,47152,47153,47153,47154, +47155,47155,47156,47157,47157,47158,47159,47159,47160,47161,47161,47162,47163, +47163,47164,47165,47165,47166,47167,47167,47168,47169,47170,47170,47171,47172, +47172,47173,47174,47174,47175,47176,47176,47177,47178,47178,47179,47180,47180, +47181,47182,47182,47183,47184,47184,47185,47186,47186,47187,47188,47188,47189, +47190,47190,47191,47192,47193,47193,47194,47195,47195,47196,47197,47197,47198, +47199,47199,47200,47201,47201,47202,47203,47203,47204,47205,47205,47206,47207, +47207,47208,47209,47209,47210,47211,47211,47212,47213,47214,47214,47215,47216, +47216,47217,47218,47218,47219,47220,47220,47221,47222,47222,47223,47224,47224, +47225,47226,47226,47227,47228,47228,47229,47230,47230,47231,47232,47232,47233, +47234,47234,47235,47236,47236,47237,47238,47239,47239,47240,47241,47241,47242, +47243,47243,47244,47245,47245,47246,47247,47247,47248,47249,47249,47250,47251, +47251,47252,47253,47253,47254,47255,47255,47256,47257,47257,47258,47259,47259, +47260,47261,47261,47262,47263,47264,47264,47265,47266,47266,47267,47268,47268, +47269,47270,47270,47271,47272,47272,47273,47274,47274,47275,47276,47276,47277, +47278,47278,47279,47280,47280,47281,47282,47282,47283,47284,47284,47285,47286, +47286,47287,47288,47289,47289,47290,47291,47291,47292,47293,47293,47294,47295, +47295,47296,47297,47297,47298,47299,47299,47300,47301,47301,47302,47303,47303, +47304,47305,47305,47306,47307,47307,47308,47309,47309,47310,47311,47311,47312, +47313,47313,47314,47315,47316,47316,47317,47318,47318,47319,47320,47320,47321, +47322,47322,47323,47324,47324,47325,47326,47326,47327,47328,47328,47329,47330, +47330,47331,47332,47332,47333,47334,47334,47335,47336,47336,47337,47338,47338, +47339,47340,47340,47341,47342,47342,47343,47344,47344,47345,47346,47347,47347, +47348,47349,47349,47350,47351,47351,47352,47353,47353,47354,47355,47355,47356, +47357,47357,47358,47359,47359,47360,47361,47361,47362,47363,47363,47364,47365, +47365,47366,47367,47367,47368,47369,47369,47370,47371,47371,47372,47373,47373, +47374,47375,47375,47376,47377,47378,47378,47379,47380,47380,47381,47382,47382, +47383,47384,47384,47385,47386,47386,47387,47388,47388,47389,47390,47390,47391, +47392,47392,47393,47394,47394,47395,47396,47396,47397,47398,47398,47399,47400, +47400,47401,47402,47402,47403,47404,47404,47405,47406,47406,47407,47408,47408, +47409,47410,47410,47411,47412,47413,47413,47414,47415,47415,47416,47417,47417, +47418,47419,47419,47420,47421,47421,47422,47423,47423,47424,47425,47425,47426, +47427,47427,47428,47429,47429,47430,47431,47431,47432,47433,47433,47434,47435, +47435,47436,47437,47437,47438,47439,47439,47440,47441,47441,47442,47443,47443, +47444,47445,47445,47446,47447,47447,47448,47449,47449,47450,47451,47452,47452, +47453,47454,47454,47455,47456,47456,47457,47458,47458,47459,47460,47460,47461, +47462,47462,47463,47464,47464,47465,47466,47466,47467,47468,47468,47469,47470, +47470,47471,47472,47472,47473,47474,47474,47475,47476,47476,47477,47478,47478, +47479,47480,47480,47481,47482,47482,47483,47484,47484,47485,47486,47486,47487, +47488,47488,47489,47490,47490,47491,47492,47492,47493,47494,47494,47495,47496, +47497,47497,47498,47499,47499,47500,47501,47501,47502,47503,47503,47504,47505, +47505,47506,47507,47507,47508,47509,47509,47510,47511,47511,47512,47513,47513, +47514,47515,47515,47516,47517,47517,47518,47519,47519,47520,47521,47521,47522, +47523,47523,47524,47525,47525,47526,47527,47527,47528,47529,47529,47530,47531, +47531,47532,47533,47533,47534,47535,47535,47536,47537,47537,47538,47539,47539, +47540,47541,47541,47542,47543,47543,47544,47545,47545,47546,47547,47547,47548, +47549,47549,47550,47551,47552,47552,47553,47554,47554,47555,47556,47556,47557, +47558,47558,47559,47560,47560,47561,47562,47562,47563,47564,47564,47565,47566, +47566,47567,47568,47568,47569,47570,47570,47571,47572,47572,47573,47574,47574, +47575,47576,47576,47577,47578,47578,47579,47580,47580,47581,47582,47582,47583, +47584,47584,47585,47586,47586,47587,47588,47588,47589,47590,47590,47591,47592, +47592,47593,47594,47594,47595,47596,47596,47597,47598,47598,47599,47600,47600, +47601,47602,47602,47603,47604,47604,47605,47606,47606,47607,47608,47608,47609, +47610,47610,47611,47612,47612,47613,47614,47614,47615,47616,47616,47617,47618, +47618,47619,47620,47620,47621,47622,47622,47623,47624,47624,47625,47626,47626, +47627,47628,47628,47629,47630,47631,47631,47632,47633,47633,47634,47635,47635, +47636,47637,47637,47638,47639,47639,47640,47641,47641,47642,47643,47643,47644, +47645,47645,47646,47647,47647,47648,47649,47649,47650,47651,47651,47652,47653, +47653,47654,47655,47655,47656,47657,47657,47658,47659,47659,47660,47661,47661, +47662,47663,47663,47664,47665,47665,47666,47667,47667,47668,47669,47669,47670, +47671,47671,47672,47673,47673,47674,47675,47675,47676,47677,47677,47678,47679, +47679,47680,47681,47681,47682,47683,47683,47684,47685,47685,47686,47687,47687, +47688,47689,47689,47690,47691,47691,47692,47693,47693,47694,47695,47695,47696, +47697,47697,47698,47699,47699,47700,47701,47701,47702,47703,47703,47704,47705, +47705,47706,47707,47707,47708,47709,47709,47710,47711,47711,47712,47713,47713, +47714,47715,47715,47716,47717,47717,47718,47719,47719,47720,47721,47721,47722, +47723,47723,47724,47725,47725,47726,47727,47727,47728,47729,47729,47730,47731, +47731,47732,47733,47733,47734,47735,47735,47736,47737,47737,47738,47739,47739, +47740,47741,47741,47742,47743,47743,47744,47745,47745,47746,47747,47747,47748, +47749,47749,47750,47751,47751,47752,47753,47753,47754,47755,47755,47756,47757, +47757,47758,47759,47759,47760,47761,47761,47762,47763,47763,47764,47765,47765, +47766,47767,47767,47768,47769,47769,47770,47771,47771,47772,47773,47773,47774, +47775,47775,47776,47777,47777,47778,47779,47779,47780,47781,47781,47782,47783, +47783,47784,47785,47785,47786,47787,47787,47788,47789,47789,47790,47791,47791, +47792,47793,47793,47794,47795,47795,47796,47797,47797,47798,47799,47799,47800, +47801,47801,47802,47803,47803,47804,47805,47805,47806,47807,47807,47808,47809, +47809,47810,47811,47811,47812,47813,47813,47814,47815,47815,47816,47817,47817, +47818,47819,47819,47820,47821,47821,47822,47823,47823,47824,47825,47825,47826, +47827,47827,47828,47829,47829,47830,47831,47831,47832,47833,47833,47834,47835, +47835,47836,47837,47837,47838,47839,47839,47840,47841,47841,47842,47843,47843, +47844,47845,47845,47846,47847,47847,47848,47849,47849,47850,47851,47851,47852, +47853,47853,47854,47855,47855,47856,47857,47857,47858,47859,47859,47860,47860, +47861,47862,47862,47863,47864,47864,47865,47866,47866,47867,47868,47868,47869, +47870,47870,47871,47872,47872,47873,47874,47874,47875,47876,47876,47877,47878, +47878,47879,47880,47880,47881,47882,47882,47883,47884,47884,47885,47886,47886, +47887,47888,47888,47889,47890,47890,47891,47892,47892,47893,47894,47894,47895, +47896,47896,47897,47898,47898,47899,47900,47900,47901,47902,47902,47903,47904, +47904,47905,47906,47906,47907,47908,47908,47909,47910,47910,47911,47912,47912, +47913,47914,47914,47915,47916,47916,47917,47918,47918,47919,47920,47920,47921, +47922,47922,47923,47924,47924,47925,47926,47926,47927,47928,47928,47929,47930, +47930,47931,47932,47932,47933,47934,47934,47935,47936,47936,47937,47938,47938, +47939,47939,47940,47941,47941,47942,47943,47943,47944,47945,47945,47946,47947, +47947,47948,47949,47949,47950,47951,47951,47952,47953,47953,47954,47955,47955, +47956,47957,47957,47958,47959,47959,47960,47961,47961,47962,47963,47963,47964, +47965,47965,47966,47967,47967,47968,47969,47969,47970,47971,47971,47972,47973, +47973,47974,47975,47975,47976,47977,47977,47978,47979,47979,47980,47981,47981, +47982,47983,47983,47984,47985,47985,47986,47987,47987,47988,47989,47989,47990, +47991,47991,47992,47993,47993,47994,47994,47995,47996,47996,47997,47998,47998, +47999,48000,48000,48001,48002,48002,48003,48004,48004,48005,48006,48006,48007, +48008,48008,48009,48010,48010,48011,48012,48012,48013,48014,48014,48015,48016, +48016,48017,48018,48018,48019,48020,48020,48021,48022,48022,48023,48024,48024, +48025,48026,48026,48027,48028,48028,48029,48030,48030,48031,48032,48032,48033, +48034,48034,48035,48036,48036,48037,48038,48038,48039,48039,48040,48041,48041, +48042,48043,48043,48044,48045,48045,48046,48047,48047,48048,48049,48049,48050, +48051,48051,48052,48053,48053,48054,48055,48055,48056,48057,48057,48058,48059, +48059,48060,48061,48061,48062,48063,48063,48064,48065,48065,48066,48067,48067, +48068,48069,48069,48070,48071,48071,48072,48073,48073,48074,48075,48075,48076, +48077,48077,48078,48078,48079,48080,48080,48081,48082,48082,48083,48084,48084, +48085,48086,48086,48087,48088,48088,48089,48090,48090,48091,48092,48092,48093, +48094,48094,48095,48096,48096,48097,48098,48098,48099,48100,48100,48101,48102, +48102,48103,48104,48104,48105,48106,48106,48107,48108,48108,48109,48110,48110, +48111,48112,48112,48113,48113,48114,48115,48115,48116,48117,48117,48118,48119, +48119,48120,48121,48121,48122,48123,48123,48124,48125,48125,48126,48127,48127, +48128,48129,48129,48130,48131,48131,48132,48133,48133,48134,48135,48135,48136, +48137,48137,48138,48139,48139,48140,48141,48141,48142,48143,48143,48144,48144, +48145,48146,48146,48147,48148,48148,48149,48150,48150,48151,48152,48152,48153, +48154,48154,48155,48156,48156,48157,48158,48158,48159,48160,48160,48161,48162, +48162,48163,48164,48164,48165,48166,48166,48167,48168,48168,48169,48170,48170, +48171,48172,48172,48173,48173,48174,48175,48175,48176,48177,48177,48178,48179, +48179,48180,48181,48181,48182,48183,48183,48184,48185,48185,48186,48187,48187, +48188,48189,48189,48190,48191,48191,48192,48193,48193,48194,48195,48195,48196, +48197,48197,48198,48199,48199,48200,48201,48201,48202,48202,48203,48204,48204, +48205,48206,48206,48207,48208,48208,48209,48210,48210,48211,48212,48212,48213, +48214,48214,48215,48216,48216,48217,48218,48218,48219,48220,48220,48221,48222, +48222,48223,48224,48224,48225,48226,48226,48227,48228,48228,48229,48229,48230, +48231,48231,48232,48233,48233,48234,48235,48235,48236,48237,48237,48238,48239, +48239,48240,48241,48241,48242,48243,48243,48244,48245,48245,48246,48247,48247, +48248,48249,48249,48250,48251,48251,48252,48252,48253,48254,48254,48255,48256, +48256,48257,48258,48258,48259,48260,48260,48261,48262,48262,48263,48264,48264, +48265,48266,48266,48267,48268,48268,48269,48270,48270,48271,48272,48272,48273, +48274,48274,48275,48276,48276,48277,48277,48278,48279,48279,48280,48281,48281, +48282,48283,48283,48284,48285,48285,48286,48287,48287,48288,48289,48289,48290, +48291,48291,48292,48293,48293,48294,48295,48295,48296,48297,48297,48298,48298, +48299,48300,48300,48301,48302,48302,48303,48304,48304,48305,48306,48306,48307, +48308,48308,48309,48310,48310,48311,48312,48312,48313,48314,48314,48315,48316, +48316,48317,48318,48318,48319,48320,48320,48321,48321,48322,48323,48323,48324, +48325,48325,48326,48327,48327,48328,48329,48329,48330,48331,48331,48332,48333, +48333,48334,48335,48335,48336,48337,48337,48338,48339,48339,48340,48341,48341, +48342,48342,48343,48344,48344,48345,48346,48346,48347,48348,48348,48349,48350, +48350,48351,48352,48352,48353,48354,48354,48355,48356,48356,48357,48358,48358, +48359,48360,48360,48361,48361,48362,48363,48363,48364,48365,48365,48366,48367, +48367,48368,48369,48369,48370,48371,48371,48372,48373,48373,48374,48375,48375, +48376,48377,48377,48378,48379,48379,48380,48380,48381,48382,48382,48383,48384, +48384,48385,48386,48386,48387,48388,48388,48389,48390,48390,48391,48392,48392, +48393,48394,48394,48395,48396,48396,48397,48398,48398,48399,48399,48400,48401, +48401,48402,48403,48403,48404,48405,48405,48406,48407,48407,48408,48409,48409, +48410,48411,48411,48412,48413,48413,48414,48415,48415,48416,48417,48417,48418, +48418,48419,48420,48420,48421,48422,48422,48423,48424,48424,48425,48426,48426, +48427,48428,48428,48429,48430,48430,48431,48432,48432,48433,48434,48434,48435, +48435,48436,48437,48437,48438,48439,48439,48440,48441,48441,48442,48443,48443, +48444,48445,48445,48446,48447,48447,48448,48449,48449,48450,48451,48451,48452, +48453,48453,48454,48454,48455,48456,48456,48457,48458,48458,48459,48460,48460, +48461,48462,48462,48463,48464,48464,48465,48466,48466,48467,48468,48468,48469, +48470,48470,48471,48471,48472,48473,48473,48474,48475,48475,48476,48477,48477, +48478,48479,48479,48480,48481,48481,48482,48483,48483,48484,48485,48485,48486, +48486,48487,48488,48488,48489,48490,48490,48491,48492,48492,48493,48494,48494, +48495,48496,48496,48497,48498,48498,48499,48500,48500,48501,48502,48502,48503, +48503,48504,48505,48505,48506,48507,48507,48508,48509,48509,48510,48511,48511, +48512,48513,48513,48514,48515,48515,48516,48517,48517,48518,48518,48519,48520, +48520,48521,48522,48522,48523,48524,48524,48525,48526,48526,48527,48528,48528, +48529,48530,48530,48531,48532,48532,48533,48534,48534,48535,48535,48536,48537, +48537,48538,48539,48539,48540,48541,48541,48542,48543,48543,48544,48545,48545, +48546,48547,48547,48548,48549,48549,48550,48550,48551,48552,48552,48553,48554, +48554,48555,48556,48556,48557,48558,48558,48559,48560,48560,48561,48562,48562, +48563,48564,48564,48565,48565,48566,48567,48567,48568,48569,48569,48570,48571, +48571,48572,48573,48573,48574,48575,48575,48576,48577,48577,48578,48579,48579, +48580,48580,48581,48582,48582,48583,48584,48584,48585,48586,48586,48587,48588, +48588,48589,48590,48590,48591,48592,48592,48593,48593,48594,48595,48595,48596, +48597,48597,48598,48599,48599,48600,48601,48601,48602,48603,48603,48604,48605, +48605,48606,48607,48607,48608,48608,48609,48610,48610,48611,48612,48612,48613, +48614,48614,48615,48616,48616,48617,48618,48618,48619,48620,48620,48621,48622, +48622,48623,48623,48624,48625,48625,48626,48627,48627,48628,48629,48629,48630, +48631,48631,48632,48633,48633,48634,48635,48635,48636,48636,48637,48638,48638, +48639,48640,48640,48641,48642,48642,48643,48644,48644,48645,48646,48646,48647, +48648,48648,48649,48649,48650,48651,48651,48652,48653,48653,48654,48655,48655, +48656,48657,48657,48658,48659,48659,48660,48661,48661,48662,48662,48663,48664, +48664,48665,48666,48666,48667,48668,48668,48669,48670,48670,48671,48672,48672, +48673,48674,48674,48675,48676,48676,48677,48677,48678,48679,48679,48680,48681, +48681,48682,48683,48683,48684,48685,48685,48686,48687,48687,48688,48689,48689, +48690,48690,48691,48692,48692,48693,48694,48694,48695,48696,48696,48697,48698, +48698,48699,48700,48700,48701,48701,48702,48703,48703,48704,48705,48705,48706, +48707,48707,48708,48709,48709,48710,48711,48711,48712,48713,48713,48714,48714, +48715,48716,48716,48717,48718,48718,48719,48720,48720,48721,48722,48722,48723, +48724,48724,48725,48726,48726,48727,48727,48728,48729,48729,48730,48731,48731, +48732,48733,48733,48734,48735,48735,48736,48737,48737,48738,48739,48739,48740, +48740,48741,48742,48742,48743,48744,48744,48745,48746,48746,48747,48748,48748, +48749,48750,48750,48751,48751,48752,48753,48753,48754,48755,48755,48756,48757, +48757,48758,48759,48759,48760,48761,48761,48762,48763,48763,48764,48764,48765, +48766,48766,48767,48768,48768,48769,48770,48770,48771,48772,48772,48773,48774, +48774,48775,48775,48776,48777,48777,48778,48779,48779,48780,48781,48781,48782, +48783,48783,48784,48785,48785,48786,48787,48787,48788,48788,48789,48790,48790, +48791,48792,48792,48793,48794,48794,48795,48796,48796,48797,48798,48798,48799, +48799,48800,48801,48801,48802,48803,48803,48804,48805,48805,48806,48807,48807, +48808,48809,48809,48810,48810,48811,48812,48812,48813,48814,48814,48815,48816, +48816,48817,48818,48818,48819,48820,48820,48821,48821,48822,48823,48823,48824, +48825,48825,48826,48827,48827,48828,48829,48829,48830,48831,48831,48832,48832, +48833,48834,48834,48835,48836,48836,48837,48838,48838,48839,48840,48840,48841, +48842,48842,48843,48843,48844,48845,48845,48846,48847,48847,48848,48849,48849, +48850,48851,48851,48852,48853,48853,48854,48854,48855,48856,48856,48857,48858, +48858,48859,48860,48860,48861,48862,48862,48863,48864,48864,48865,48865,48866, +48867,48867,48868,48869,48869,48870,48871,48871,48872,48873,48873,48874,48875, +48875,48876,48876,48877,48878,48878,48879,48880,48880,48881,48882,48882,48883, +48884,48884,48885,48886,48886,48887,48887,48888,48889,48889,48890,48891,48891, +48892,48893,48893,48894,48895,48895,48896,48897,48897,48898,48898,48899,48900, +48900,48901,48902,48902,48903,48904,48904,48905,48906,48906,48907,48908,48908, +48909,48909,48910,48911,48911,48912,48913,48913,48914,48915,48915,48916,48917, +48917,48918,48918,48919,48920,48920,48921,48922,48922,48923,48924,48924,48925, +48926,48926,48927,48928,48928,48929,48929,48930,48931,48931,48932,48933,48933, +48934,48935,48935,48936,48937,48937,48938,48939,48939,48940,48940,48941,48942, +48942,48943,48944,48944,48945,48946,48946,48947,48948,48948,48949,48949,48950, +48951,48951,48952,48953,48953,48954,48955,48955,48956,48957,48957,48958,48959, +48959,48960,48960,48961,48962,48962,48963,48964,48964,48965,48966,48966,48967, +48968,48968,48969,48969,48970,48971,48971,48972,48973,48973,48974,48975,48975, +48976,48977,48977,48978,48979,48979,48980,48980,48981,48982,48982,48983,48984, +48984,48985,48986,48986,48987,48988,48988,48989,48989,48990,48991,48991,48992, +48993,48993,48994,48995,48995,48996,48997,48997,48998,48999,48999,49000,49000, +49001,49002,49002,49003,49004,49004,49005,49006,49006,49007,49008,49008,49009, +49009,49010,49011,49011,49012,49013,49013,49014,49015,49015,49016,49017,49017, +49018,49018,49019,49020,49020,49021,49022,49022,49023,49024,49024,49025,49026, +49026,49027,49027,49028,49029,49029,49030,49031,49031,49032,49033,49033,49034, +49035,49035,49036,49037,49037,49038,49038,49039,49040,49040,49041,49042,49042, +49043,49044,49044,49045,49046,49046,49047,49047,49048,49049,49049,49050,49051, +49051,49052,49053,49053,49054,49055,49055,49056,49056,49057,49058,49058,49059, +49060,49060,49061,49062,49062,49063,49064,49064,49065,49065,49066,49067,49067, +49068,49069,49069,49070,49071,49071,49072,49073,49073,49074,49074,49075,49076, +49076,49077,49078,49078,49079,49080,49080,49081,49082,49082,49083,49083,49084, +49085,49085,49086,49087,49087,49088,49089,49089,49090,49091,49091,49092,49092, +49093,49094,49094,49095,49096,49096,49097,49098,49098,49099,49100,49100,49101, +49101,49102,49103,49103,49104,49105,49105,49106,49107,49107,49108,49109,49109, +49110,49110,49111,49112,49112,49113,49114,49114,49115,49116,49116,49117,49118, +49118,49119,49119,49120,49121,49121,49122,49123,49123,49124,49125,49125,49126, +49127,49127,49128,49128,49129,49130,49130,49131,49132,49132,49133,49134,49134, +49135,49136,49136,49137,49137,49138,49139,49139,49140,49141,49141,49142,49143, +49143,49144,49145,49145,49146,49146,49147,49148,49148,49149,49150,49150,49151, +49152,49152,49153,49154,49154,49155,49155,49156,49157,49157,49158,49159,49159, +49160,49161,49161,49162,49163,49163,49164,49164,49165,49166,49166,49167,49168, +49168,49169,49170,49170,49171,49171,49172,49173,49173,49174,49175,49175,49176, +49177,49177,49178,49179,49179,49180,49180,49181,49182,49182,49183,49184,49184, +49185,49186,49186,49187,49188,49188,49189,49189,49190,49191,49191,49192,49193, +49193,49194,49195,49195,49196,49196,49197,49198,49198,49199,49200,49200,49201, +49202,49202,49203,49204,49204,49205,49205,49206,49207,49207,49208,49209,49209, +49210,49211,49211,49212,49213,49213,49214,49214,49215,49216,49216,49217,49218, +49218,49219,49220,49220,49221,49221,49222,49223,49223,49224,49225,49225,49226, +49227,49227,49228,49229,49229,49230,49230,49231,49232,49232,49233,49234,49234, +49235,49236,49236,49237,49238,49238,49239,49239,49240,49241,49241,49242,49243, +49243,49244,49245,49245,49246,49246,49247,49248,49248,49249,49250,49250,49251, +49252,49252,49253,49254,49254,49255,49255,49256,49257,49257,49258,49259,49259, +49260,49261,49261,49262,49262,49263,49264,49264,49265,49266,49266,49267,49268, +49268,49269,49270,49270,49271,49271,49272,49273,49273,49274,49275,49275,49276, +49277,49277,49278,49278,49279,49280,49280,49281,49282,49282,49283,49284,49284, +49285,49286,49286,49287,49287,49288,49289,49289,49290,49291,49291,49292,49293, +49293,49294,49294,49295,49296,49296,49297,49298,49298,49299,49300,49300,49301, +49301,49302,49303,49303,49304,49305,49305,49306,49307,49307,49308,49309,49309, +49310,49310,49311,49312,49312,49313,49314,49314,49315,49316,49316,49317,49317, +49318,49319,49319,49320,49321,49321,49322,49323,49323,49324,49325,49325,49326, +49326,49327,49328,49328,49329,49330,49330,49331,49332,49332,49333,49333,49334, +49335,49335,49336,49337,49337,49338,49339,49339,49340,49340,49341,49342,49342, +49343,49344,49344,49345,49346,49346,49347,49348,49348,49349,49349,49350,49351, +49351,49352,49353,49353,49354,49355,49355,49356,49356,49357,49358,49358,49359, +49360,49360,49361,49362,49362,49363,49363,49364,49365,49365,49366,49367,49367, +49368,49369,49369,49370,49370,49371,49372,49372,49373,49374,49374,49375,49376, +49376,49377,49378,49378,49379,49379,49380,49381,49381,49382,49383,49383,49384, +49385,49385,49386,49386,49387,49388,49388,49389,49390,49390,49391,49392,49392, +49393,49393,49394,49395,49395,49396,49397,49397,49398,49399,49399,49400,49400, +49401,49402,49402,49403,49404,49404,49405,49406,49406,49407,49407,49408,49409, +49409,49410,49411,49411,49412,49413,49413,49414,49414,49415,49416,49416,49417, +49418,49418,49419,49420,49420,49421,49422,49422,49423,49423,49424,49425,49425, +49426,49427,49427,49428,49429,49429,49430,49430,49431,49432,49432,49433,49434, +49434,49435,49436,49436,49437,49437,49438,49439,49439,49440,49441,49441,49442, +49443,49443,49444,49444,49445,49446,49446,49447,49448,49448,49449,49450,49450, +49451,49451,49452,49453,49453,49454,49455,49455,49456,49457,49457,49458,49458, +49459,49460,49460,49461,49462,49462,49463,49464,49464,49465,49465,49466,49467, +49467,49468,49469,49469,49470,49471,49471,49472,49472,49473,49474,49474,49475, +49476,49476,49477,49478,49478,49479,49479,49480,49481,49481,49482,49483,49483, +49484,49485,49485,49486,49486,49487,49488,49488,49489,49490,49490,49491,49492, +49492,49493,49493,49494,49495,49495,49496,49497,49497,49498,49499,49499,49500, +49500,49501,49502,49502,49503,49504,49504,49505,49506,49506,49507,49507,49508, +49509,49509,49510,49511,49511,49512,49513,49513,49514,49514,49515,49516,49516, +49517,49518,49518,49519,49520,49520,49521,49521,49522,49523,49523,49524,49525, +49525,49526,49527,49527,49528,49528,49529,49530,49530,49531,49532,49532,49533, +49534,49534,49535,49535,49536,49537,49537,49538,49539,49539,49540,49541,49541, +49542,49542,49543,49544,49544,49545,49546,49546,49547,49547,49548,49549,49549, +49550,49551,49551,49552,49553,49553,49554,49554,49555,49556,49556,49557,49558, +49558,49559,49560,49560,49561,49561,49562,49563,49563,49564,49565,49565,49566, +49567,49567,49568,49568,49569,49570,49570,49571,49572,49572,49573,49574,49574, +49575,49575,49576,49577,49577,49578,49579,49579,49580,49581,49581,49582,49582, +49583,49584,49584,49585,49586,49586,49587,49587,49588,49589,49589,49590,49591, +49591,49592,49593,49593,49594,49594,49595,49596,49596,49597,49598,49598,49599, +49600,49600,49601,49601,49602,49603,49603,49604,49605,49605,49606,49607,49607, +49608,49608,49609,49610,49610,49611,49612,49612,49613,49614,49614,49615,49615, +49616,49617,49617,49618,49619,49619,49620,49620,49621,49622,49622,49623,49624, +49624,49625,49626,49626,49627,49627,49628,49629,49629,49630,49631,49631,49632, +49633,49633,49634,49634,49635,49636,49636,49637,49638,49638,49639,49639,49640, +49641,49641,49642,49643,49643,49644,49645,49645,49646,49646,49647,49648,49648, +49649,49650,49650,49651,49652,49652,49653,49653,49654,49655,49655,49656,49657, +49657,49658,49658,49659,49660,49660,49661,49662,49662,49663,49664,49664,49665, +49665,49666,49667,49667,49668,49669,49669,49670,49671,49671,49672,49672,49673, +49674,49674,49675,49676,49676,49677,49677,49678,49679,49679,49680,49681,49681, +49682,49683,49683,49684,49684,49685,49686,49686,49687,49688,49688,49689,49690, +49690,49691,49691,49692,49693,49693,49694,49695,49695,49696,49696,49697,49698, +49698,49699,49700,49700,49701,49702,49702,49703,49703,49704,49705,49705,49706, +49707,49707,49708,49709,49709,49710,49710,49711,49712,49712,49713,49714,49714, +49715,49715,49716,49717,49717,49718,49719,49719,49720,49721,49721,49722,49722, +49723,49724,49724,49725,49726,49726,49727,49727,49728,49729,49729,49730,49731, +49731,49732,49733,49733,49734,49734,49735,49736,49736,49737,49738,49738,49739, +49739,49740,49741,49741,49742,49743,49743,49744,49745,49745,49746,49746,49747, +49748,49748,49749,49750,49750,49751,49751,49752,49753,49753,49754,49755,49755, +49756,49757,49757,49758,49758,49759,49760,49760,49761,49762,49762,49763,49763, +49764,49765,49765,49766,49767,49767,49768,49769,49769,49770,49770,49771,49772, +49772,49773,49774,49774,49775,49775,49776,49777,49777,49778,49779,49779,49780, +49781,49781,49782,49782,49783,49784,49784,49785,49786,49786,49787,49787,49788, +49789,49789,49790,49791,49791,49792,49793,49793,49794,49794,49795,49796,49796, +49797,49798,49798,49799,49799,49800,49801,49801,49802,49803,49803,49804,49805, +49805,49806,49806,49807,49808,49808,49809,49810,49810,49811,49811,49812,49813, +49813,49814,49815,49815,49816,49817,49817,49818,49818,49819,49820,49820,49821, +49822,49822,49823,49823,49824,49825,49825,49826,49827,49827,49828,49828,49829, +49830,49830,49831,49832,49832,49833,49834,49834,49835,49835,49836,49837,49837, +49838,49839,49839,49840,49840,49841,49842,49842,49843,49844,49844,49845,49846, +49846,49847,49847,49848,49849,49849,49850,49851,49851,49852,49852,49853,49854, +49854,49855,49856,49856,49857,49857,49858,49859,49859,49860,49861,49861,49862, +49863,49863,49864,49864,49865,49866,49866,49867,49868,49868,49869,49869,49870, +49871,49871,49872,49873,49873,49874,49875,49875,49876,49876,49877,49878,49878, +49879,49880,49880,49881,49881,49882,49883,49883,49884,49885,49885,49886,49886, +49887,49888,49888,49889,49890,49890,49891,49892,49892,49893,49893,49894,49895, +49895,49896,49897,49897,49898,49898,49899,49900,49900,49901,49902,49902,49903, +49903,49904,49905,49905,49906,49907,49907,49908,49908,49909,49910,49910,49911, +49912,49912,49913,49914,49914,49915,49915,49916,49917,49917,49918,49919,49919, +49920,49920,49921,49922,49922,49923,49924,49924,49925,49925,49926,49927,49927, +49928,49929,49929,49930,49931,49931,49932,49932,49933,49934,49934,49935,49936, +49936,49937,49937,49938,49939,49939,49940,49941,49941,49942,49942,49943,49944, +49944,49945,49946,49946,49947,49947,49948,49949,49949,49950,49951,49951,49952, +49953,49953,49954,49954,49955,49956,49956,49957,49958,49958,49959,49959,49960, +49961,49961,49962,49963,49963,49964,49964,49965,49966,49966,49967,49968,49968, +49969,49969,49970,49971,49971,49972,49973,49973,49974,49975,49975,49976,49976, +49977,49978,49978,49979,49980,49980,49981,49981,49982,49983,49983,49984,49985, +49985,49986,49986,49987,49988,49988,49989,49990,49990,49991,49991,49992,49993, +49993,49994,49995,49995,49996,49996,49997,49998,49998,49999,50000,50000,50001, +50002,50002,50003,50003,50004,50005,50005,50006,50007,50007,50008,50008,50009, +50010,50010,50011,50012,50012,50013,50013,50014,50015,50015,50016,50017,50017, +50018,50018,50019,50020,50020,50021,50022,50022,50023,50023,50024,50025,50025, +50026,50027,50027,50028,50028,50029,50030,50030,50031,50032,50032,50033,50034, +50034,50035,50035,50036,50037,50037,50038,50039,50039,50040,50040,50041,50042, +50042,50043,50044,50044,50045,50045,50046,50047,50047,50048,50049,50049,50050, +50050,50051,50052,50052,50053,50054,50054,50055,50055,50056,50057,50057,50058, +50059,50059,50060,50060,50061,50062,50062,50063,50064,50064,50065,50065,50066, +50067,50067,50068,50069,50069,50070,50070,50071,50072,50072,50073,50074,50074, +50075,50076,50076,50077,50077,50078,50079,50079,50080,50081,50081,50082,50082, +50083,50084,50084,50085,50086,50086,50087,50087,50088,50089,50089,50090,50091, +50091,50092,50092,50093,50094,50094,50095,50096,50096,50097,50097,50098,50099, +50099,50100,50101,50101,50102,50102,50103,50104,50104,50105,50106,50106,50107, +50107,50108,50109,50109,50110,50111,50111,50112,50112,50113,50114,50114,50115, +50116,50116,50117,50117,50118,50119,50119,50120,50121,50121,50122,50122,50123, +50124,50124,50125,50126,50126,50127,50127,50128,50129,50129,50130,50131,50131, +50132,50132,50133,50134,50134,50135,50136,50136,50137,50137,50138,50139,50139, +50140,50141,50141,50142,50142,50143,50144,50144,50145,50146,50146,50147,50147, +50148,50149,50149,50150,50151,50151,50152,50152,50153,50154,50154,50155,50156, +50156,50157,50157,50158,50159,50159,50160,50161,50161,50162,50162,50163,50164, +50164,50165,50166,50166,50167,50167,50168,50169,50169,50170,50171,50171,50172, +50172,50173,50174,50174,50175,50176,50176,50177,50177,50178,50179,50179,50180, +50181,50181,50182,50182,50183,50184,50184,50185,50186,50186,50187,50187,50188, +50189,50189,50190,50191,50191,50192,50192,50193,50194,50194,50195,50196,50196, +50197,50197,50198,50199,50199,50200,50201,50201,50202,50202,50203,50204,50204, +50205,50206,50206,50207,50207,50208,50209,50209,50210,50211,50211,50212,50212, +50213,50214,50214,50215,50216,50216,50217,50217,50218,50219,50219,50220,50221, +50221,50222,50222,50223,50224,50224,50225,50226,50226,50227,50227,50228,50229, +50229,50230,50231,50231,50232,50232,50233,50234,50234,50235,50236,50236,50237, +50237,50238,50239,50239,50240,50241,50241,50242,50242,50243,50244,50244,50245, +50246,50246,50247,50247,50248,50249,50249,50250,50251,50251,50252,50252,50253, +50254,50254,50255,50256,50256,50257,50257,50258,50259,50259,50260,50261,50261, +50262,50262,50263,50264,50264,50265,50265,50266,50267,50267,50268,50269,50269, +50270,50270,50271,50272,50272,50273,50274,50274,50275,50275,50276,50277,50277, +50278,50279,50279,50280,50280,50281,50282,50282,50283,50284,50284,50285,50285, +50286,50287,50287,50288,50289,50289,50290,50290,50291,50292,50292,50293,50294, +50294,50295,50295,50296,50297,50297,50298,50299,50299,50300,50300,50301,50302, +50302,50303,50304,50304,50305,50305,50306,50307,50307,50308,50308,50309,50310, +50310,50311,50312,50312,50313,50313,50314,50315,50315,50316,50317,50317,50318, +50318,50319,50320,50320,50321,50322,50322,50323,50323,50324,50325,50325,50326, +50327,50327,50328,50328,50329,50330,50330,50331,50332,50332,50333,50333,50334, +50335,50335,50336,50337,50337,50338,50338,50339,50340,50340,50341,50341,50342, +50343,50343,50344,50345,50345,50346,50346,50347,50348,50348,50349,50350,50350, +50351,50351,50352,50353,50353,50354,50355,50355,50356,50356,50357,50358,50358, +50359,50360,50360,50361,50361,50362,50363,50363,50364,50364,50365,50366,50366, +50367,50368,50368,50369,50369,50370,50371,50371,50372,50373,50373,50374,50374, +50375,50376,50376,50377,50378,50378,50379,50379,50380,50381,50381,50382,50383, +50383,50384,50384,50385,50386,50386,50387,50387,50388,50389,50389,50390,50391, +50391,50392,50392,50393,50394,50394,50395,50396,50396,50397,50397,50398,50399, +50399,50400,50401,50401,50402,50402,50403,50404,50404,50405,50406,50406,50407, +50407,50408,50409,50409,50410,50410,50411,50412,50412,50413,50414,50414,50415, +50415,50416,50417,50417,50418,50419,50419,50420,50420,50421,50422,50422,50423, +50424,50424,50425,50425,50426,50427,50427,50428,50428,50429,50430,50430,50431, +50432,50432,50433,50433,50434,50435,50435,50436,50437,50437,50438,50438,50439, +50440,50440,50441,50442,50442,50443,50443,50444,50445,50445,50446,50446,50447, +50448,50448,50449,50450,50450,50451,50451,50452,50453,50453,50454,50455,50455, +50456,50456,50457,50458,50458,50459,50460,50460,50461,50461,50462,50463,50463, +50464,50464,50465,50466,50466,50467,50468,50468,50469,50469,50470,50471,50471, +50472,50473,50473,50474,50474,50475,50476,50476,50477,50477,50478,50479,50479, +50480,50481,50481,50482,50482,50483,50484,50484,50485,50486,50486,50487,50487, +50488,50489,50489,50490,50491,50491,50492,50492,50493,50494,50494,50495,50495, +50496,50497,50497,50498,50499,50499,50500,50500,50501,50502,50502,50503,50504, +50504,50505,50505,50506,50507,50507,50508,50508,50509,50510,50510,50511,50512, +50512,50513,50513,50514,50515,50515,50516,50517,50517,50518,50518,50519,50520, +50520,50521,50521,50522,50523,50523,50524,50525,50525,50526,50526,50527,50528, +50528,50529,50530,50530,50531,50531,50532,50533,50533,50534,50534,50535,50536, +50536,50537,50538,50538,50539,50539,50540,50541,50541,50542,50543,50543,50544, +50544,50545,50546,50546,50547,50547,50548,50549,50549,50550,50551,50551,50552, +50552,50553,50554,50554,50555,50556,50556,50557,50557,50558,50559,50559,50560, +50560,50561,50562,50562,50563,50564,50564,50565,50565,50566,50567,50567,50568, +50569,50569,50570,50570,50571,50572,50572,50573,50573,50574,50575,50575,50576, +50577,50577,50578,50578,50579,50580,50580,50581,50582,50582,50583,50583,50584, +50585,50585,50586,50586,50587,50588,50588,50589,50590,50590,50591,50591,50592, +50593,50593,50594,50595,50595,50596,50596,50597,50598,50598,50599,50599,50600, +50601,50601,50602,50603,50603,50604,50604,50605,50606,50606,50607,50607,50608, +50609,50609,50610,50611,50611,50612,50612,50613,50614,50614,50615,50616,50616, +50617,50617,50618,50619,50619,50620,50620,50621,50622,50622,50623,50624,50624, +50625,50625,50626,50627,50627,50628,50628,50629,50630,50630,50631,50632,50632, +50633,50633,50634,50635,50635,50636,50637,50637,50638,50638,50639,50640,50640, +50641,50641,50642,50643,50643,50644,50645,50645,50646,50646,50647,50648,50648, +50649,50649,50650,50651,50651,50652,50653,50653,50654,50654,50655,50656,50656, +50657,50657,50658,50659,50659,50660,50661,50661,50662,50662,50663,50664,50664, +50665,50666,50666,50667,50667,50668,50669,50669,50670,50670,50671,50672,50672, +50673,50674,50674,50675,50675,50676,50677,50677,50678,50678,50679,50680,50680, +50681,50682,50682,50683,50683,50684,50685,50685,50686,50686,50687,50688,50688, +50689,50690,50690,50691,50691,50692,50693,50693,50694,50695,50695,50696,50696, +50697,50698,50698,50699,50699,50700,50701,50701,50702,50703,50703,50704,50704, +50705,50706,50706,50707,50707,50708,50709,50709,50710,50711,50711,50712,50712, +50713,50714,50714,50715,50715,50716,50717,50717,50718,50719,50719,50720,50720, +50721,50722,50722,50723,50723,50724,50725,50725,50726,50727,50727,50728,50728, +50729,50730,50730,50731,50731,50732,50733,50733,50734,50735,50735,50736,50736, +50737,50738,50738,50739,50739,50740,50741,50741,50742,50743,50743,50744,50744, +50745,50746,50746,50747,50747,50748,50749,50749,50750,50751,50751,50752,50752, +50753,50754,50754,50755,50755,50756,50757,50757,50758,50759,50759,50760,50760, +50761,50762,50762,50763,50763,50764,50765,50765,50766,50767,50767,50768,50768, +50769,50770,50770,50771,50771,50772,50773,50773,50774,50775,50775,50776,50776, +50777,50778,50778,50779,50779,50780,50781,50781,50782,50783,50783,50784,50784, +50785,50786,50786,50787,50787,50788,50789,50789,50790,50791,50791,50792,50792, +50793,50794,50794,50795,50795,50796,50797,50797,50798,50799,50799,50800,50800, +50801,50802,50802,50803,50803,50804,50805,50805,50806,50807,50807,50808,50808, +50809,50810,50810,50811,50811,50812,50813,50813,50814,50815,50815,50816,50816, +50817,50818,50818,50819,50819,50820,50821,50821,50822,50823,50823,50824,50824, +50825,50826,50826,50827,50827,50828,50829,50829,50830,50831,50831,50832,50832, +50833,50834,50834,50835,50835,50836,50837,50837,50838,50839,50839,50840,50840, +50841,50842,50842,50843,50843,50844,50845,50845,50846,50846,50847,50848,50848, +50849,50850,50850,50851,50851,50852,50853,50853,50854,50854,50855,50856,50856, +50857,50858,50858,50859,50859,50860,50861,50861,50862,50862,50863,50864,50864, +50865,50866,50866,50867,50867,50868,50869,50869,50870,50870,50871,50872,50872, +50873,50874,50874,50875,50875,50876,50877,50877,50878,50878,50879,50880,50880, +50881,50881,50882,50883,50883,50884,50885,50885,50886,50886,50887,50888,50888, +50889,50889,50890,50891,50891,50892,50893,50893,50894,50894,50895,50896,50896, +50897,50897,50898,50899,50899,50900,50900,50901,50902,50902,50903,50904,50904, +50905,50905,50906,50907,50907,50908,50908,50909,50910,50910,50911,50912,50912, +50913,50913,50914,50915,50915,50916,50916,50917,50918,50918,50919,50920,50920, +50921,50921,50922,50923,50923,50924,50924,50925,50926,50926,50927,50927,50928, +50929,50929,50930,50931,50931,50932,50932,50933,50934,50934,50935,50935,50936, +50937,50937,50938,50939,50939,50940,50940,50941,50942,50942,50943,50943,50944, +50945,50945,50946,50946,50947,50948,50948,50949,50950,50950,50951,50951,50952, +50953,50953,50954,50954,50955,50956,50956,50957,50957,50958,50959,50959,50960, +50961,50961,50962,50962,50963,50964,50964,50965,50965,50966,50967,50967,50968, +50969,50969,50970,50970,50971,50972,50972,50973,50973,50974,50975,50975,50976, +50976,50977,50978,50978,50979,50980,50980,50981,50981,50982,50983,50983,50984, +50984,50985,50986,50986,50987,50987,50988,50989,50989,50990,50991,50991,50992, +50992,50993,50994,50994,50995,50995,50996,50997,50997,50998,50998,50999,51000, +51000,51001,51002,51002,51003,51003,51004,51005,51005,51006,51006,51007,51008, +51008,51009,51010,51010,51011,51011,51012,51013,51013,51014,51014,51015,51016, +51016,51017,51017,51018,51019,51019,51020,51021,51021,51022,51022,51023,51024, +51024,51025,51025,51026,51027,51027,51028,51028,51029,51030,51030,51031,51032, +51032,51033,51033,51034,51035,51035,51036,51036,51037,51038,51038,51039,51039, +51040,51041,51041,51042,51043,51043,51044,51044,51045,51046,51046,51047,51047, +51048,51049,51049,51050,51050,51051,51052,51052,51053,51054,51054,51055,51055, +51056,51057,51057,51058,51058,51059,51060,51060,51061,51061,51062,51063,51063, +51064,51065,51065,51066,51066,51067,51068,51068,51069,51069,51070,51071,51071, +51072,51072,51073,51074,51074,51075,51075,51076,51077,51077,51078,51079,51079, +51080,51080,51081,51082,51082,51083,51083,51084,51085,51085,51086,51086,51087, +51088,51088,51089,51090,51090,51091,51091,51092,51093,51093,51094,51094,51095, +51096,51096,51097,51097,51098,51099,51099,51100,51101,51101,51102,51102,51103, +51104,51104,51105,51105,51106,51107,51107,51108,51108,51109,51110,51110,51111, +51112,51112,51113,51113,51114,51115,51115,51116,51116,51117,51118,51118,51119, +51119,51120,51121,51121,51122,51122,51123,51124,51124,51125,51126,51126,51127, +51127,51128,51129,51129,51130,51130,51131,51132,51132,51133,51133,51134,51135, +51135,51136,51137,51137,51138,51138,51139,51140,51140,51141,51141,51142,51143, +51143,51144,51144,51145,51146,51146,51147,51147,51148,51149,51149,51150,51151, +51151,51152,51152,51153,51154,51154,51155,51155,51156,51157,51157,51158,51158, +51159,51160,51160,51161,51161,51162,51163,51163,51164,51165,51165,51166,51166, +51167,51168,51168,51169,51169,51170,51171,51171,51172,51172,51173,51174,51174, +51175,51175,51176,51177,51177,51178,51179,51179,51180,51180,51181,51182,51182, +51183,51183,51184,51185,51185,51186,51186,51187,51188,51188,51189,51190,51190, +51191,51191,51192,51193,51193,51194,51194,51195,51196,51196,51197,51197,51198, +51199,51199,51200,51200,51201,51202,51202,51203,51203,51204,51205,51205,51206, +51207,51207,51208,51208,51209,51210,51210,51211,51211,51212,51213,51213,51214, +51214,51215,51216,51216,51217,51217,51218,51219,51219,51220,51221,51221,51222, +51222,51223,51224,51224,51225,51225,51226,51227,51227,51228,51228,51229,51230, +51230,51231,51231,51232,51233,51233,51234,51235,51235,51236,51236,51237,51238, +51238,51239,51239,51240,51241,51241,51242,51242,51243,51244,51244,51245,51245, +51246,51247,51247,51248,51249,51249,51250,51250,51251,51252,51252,51253,51253, +51254,51255,51255,51256,51256,51257,51258,51258,51259,51259,51260,51261,51261, +51262,51262,51263,51264,51264,51265,51266,51266,51267,51267,51268,51269,51269, +51270,51270,51271,51272,51272,51273,51273,51274,51275,51275,51276,51276,51277, +51278,51278,51279,51279,51280,51281,51281,51282,51283,51283,51284,51284,51285, +51286,51286,51287,51287,51288,51289,51289,51290,51290,51291,51292,51292,51293, +51293,51294,51295,51295,51296,51296,51297,51298,51298,51299,51300,51300,51301, +51301,51302,51303,51303,51304,51304,51305,51306,51306,51307,51307,51308,51309, +51309,51310,51310,51311,51312,51312,51313,51313,51314,51315,51315,51316,51317, +51317,51318,51318,51319,51320,51320,51321,51321,51322,51323,51323,51324,51324, +51325,51326,51326,51327,51327,51328,51329,51329,51330,51330,51331,51332,51332, +51333,51334,51334,51335,51335,51336,51337,51337,51338,51338,51339,51340,51340, +51341,51341,51342,51343,51343,51344,51344,51345,51346,51346,51347,51347,51348, +51349,51349,51350,51350,51351,51352,51352,51353,51354,51354,51355,51355,51356, +51357,51357,51358,51358,51359,51360,51360,51361,51361,51362,51363,51363,51364, +51364,51365,51366,51366,51367,51367,51368,51369,51369,51370,51370,51371,51372, +51372,51373,51374,51374,51375,51375,51376,51377,51377,51378,51378,51379,51380, +51380,51381,51381,51382,51383,51383,51384,51384,51385,51386,51386,51387,51387, +51388,51389,51389,51390,51390,51391,51392,51392,51393,51394,51394,51395,51395, +51396,51397,51397,51398,51398,51399,51400,51400,51401,51401,51402,51403,51403, +51404,51404,51405,51406,51406,51407,51407,51408,51409,51409,51410,51410,51411, +51412,51412,51413,51413,51414,51415,51415,51416,51417,51417,51418,51418,51419, +51420,51420,51421,51421,51422,51423,51423,51424,51424,51425,51426,51426,51427, +51427,51428,51429,51429,51430,51430,51431,51432,51432,51433,51433,51434,51435, +51435,51436,51436,51437,51438,51438,51439,51440,51440,51441,51441,51442,51443, +51443,51444,51444,51445,51446,51446,51447,51447,51448,51449,51449,51450,51450, +51451,51452,51452,51453,51453,51454,51455,51455,51456,51456,51457,51458,51458, +51459,51459,51460,51461,51461,51462,51462,51463,51464,51464,51465,51466,51466, +51467,51467,51468,51469,51469,51470,51470,51471,51472,51472,51473,51473,51474, +51475,51475,51476,51476,51477,51478,51478,51479,51479,51480,51481,51481,51482, +51482,51483,51484,51484,51485,51485,51486,51487,51487,51488,51488,51489,51490, +51490,51491,51491,51492,51493,51493,51494,51495,51495,51496,51496,51497,51498, +51498,51499,51499,51500,51501,51501,51502,51502,51503,51504,51504,51505,51505, +51506,51507,51507,51508,51508,51509,51510,51510,51511,51511,51512,51513,51513, +51514,51514,51515,51516,51516,51517,51517,51518,51519,51519,51520,51520,51521, +51522,51522,51523,51523,51524,51525,51525,51526,51527,51527,51528,51528,51529, +51530,51530,51531,51531,51532,51533,51533,51534,51534,51535,51536,51536,51537, +51537,51538,51539,51539,51540,51540,51541,51542,51542,51543,51543,51544,51545, +51545,51546,51546,51547,51548,51548,51549,51549,51550,51551,51551,51552,51552, +51553,51554,51554,51555,51555,51556,51557,51557,51558,51558,51559,51560,51560, +51561,51561,51562,51563,51563,51564,51565,51565,51566,51566,51567,51568,51568, +51569,51569,51570,51571,51571,51572,51572,51573,51574,51574,51575,51575,51576, +51577,51577,51578,51578,51579,51580,51580,51581,51581,51582,51583,51583,51584, +51584,51585,51586,51586,51587,51587,51588,51589,51589,51590,51590,51591,51592, +51592,51593,51593,51594,51595,51595,51596,51596,51597,51598,51598,51599,51599, +51600,51601,51601,51602,51602,51603,51604,51604,51605,51605,51606,51607,51607, +51608,51609,51609,51610,51610,51611,51612,51612,51613,51613,51614,51615,51615, +51616,51616,51617,51618,51618,51619,51619,51620,51621,51621,51622,51622,51623, +51624,51624,51625,51625,51626,51627,51627,51628,51628,51629,51630,51630,51631, +51631,51632,51633,51633,51634,51634,51635,51636,51636,51637,51637,51638,51639, +51639,51640,51640,51641,51642,51642,51643,51643,51644,51645,51645,51646,51646, +51647,51648,51648,51649,51649,51650,51651,51651,51652,51652,51653,51654,51654, +51655,51655,51656,51657,51657,51658,51658,51659,51660,51660,51661,51661,51662, +51663,51663,51664,51664,51665,51666,51666,51667,51667,51668,51669,51669,51670, +51670,51671,51672,51672,51673,51673,51674,51675,51675,51676,51677,51677,51678, +51678,51679,51680,51680,51681,51681,51682,51683,51683,51684,51684,51685,51686, +51686,51687,51687,51688,51689,51689,51690,51690,51691,51692,51692,51693,51693, +51694,51695,51695,51696,51696,51697,51698,51698,51699,51699,51700,51701,51701, +51702,51702,51703,51704,51704,51705,51705,51706,51707,51707,51708,51708,51709, +51710,51710,51711,51711,51712,51713,51713,51714,51714,51715,51716,51716,51717, +51717,51718,51719,51719,51720,51720,51721,51722,51722,51723,51723,51724,51725, +51725,51726,51726,51727,51728,51728,51729,51729,51730,51731,51731,51732,51732, +51733,51734,51734,51735,51735,51736,51737,51737,51738,51738,51739,51740,51740, +51741,51741,51742,51743,51743,51744,51744,51745,51746,51746,51747,51747,51748, +51749,51749,51750,51750,51751,51752,51752,51753,51753,51754,51755,51755,51756, +51756,51757,51758,51758,51759,51759,51760,51761,51761,51762,51762,51763,51764, +51764,51765,51765,51766,51767,51767,51768,51768,51769,51770,51770,51771,51771, +51772,51773,51773,51774,51774,51775,51776,51776,51777,51777,51778,51779,51779, +51780,51780,51781,51782,51782,51783,51783,51784,51785,51785,51786,51786,51787, +51788,51788,51789,51789,51790,51791,51791,51792,51792,51793,51794,51794,51795, +51795,51796,51797,51797,51798,51798,51799,51800,51800,51801,51801,51802,51803, +51803,51804,51804,51805,51806,51806,51807,51807,51808,51809,51809,51810,51810, +51811,51812,51812,51813,51813,51814,51815,51815,51816,51816,51817,51818,51818, +51819,51819,51820,51821,51821,51822,51822,51823,51824,51824,51825,51825,51826, +51827,51827,51828,51828,51829,51830,51830,51831,51831,51832,51833,51833,51834, +51834,51835,51836,51836,51837,51837,51838,51839,51839,51840,51840,51841,51842, +51842,51843,51843,51844,51844,51845,51846,51846,51847,51847,51848,51849,51849, +51850,51850,51851,51852,51852,51853,51853,51854,51855,51855,51856,51856,51857, +51858,51858,51859,51859,51860,51861,51861,51862,51862,51863,51864,51864,51865, +51865,51866,51867,51867,51868,51868,51869,51870,51870,51871,51871,51872,51873, +51873,51874,51874,51875,51876,51876,51877,51877,51878,51879,51879,51880,51880, +51881,51882,51882,51883,51883,51884,51885,51885,51886,51886,51887,51888,51888, +51889,51889,51890,51891,51891,51892,51892,51893,51894,51894,51895,51895,51896, +51897,51897,51898,51898,51899,51900,51900,51901,51901,51902,51903,51903,51904, +51904,51905,51906,51906,51907,51907,51908,51909,51909,51910,51910,51911,51911, +51912,51913,51913,51914,51914,51915,51916,51916,51917,51917,51918,51919,51919, +51920,51920,51921,51922,51922,51923,51923,51924,51925,51925,51926,51926,51927, +51928,51928,51929,51929,51930,51931,51931,51932,51932,51933,51934,51934,51935, +51935,51936,51937,51937,51938,51938,51939,51940,51940,51941,51941,51942,51943, +51943,51944,51944,51945,51946,51946,51947,51947,51948,51949,51949,51950,51950, +51951,51952,51952,51953,51953,51954,51955,51955,51956,51956,51957,51957,51958, +51959,51959,51960,51960,51961,51962,51962,51963,51963,51964,51965,51965,51966, +51966,51967,51968,51968,51969,51969,51970,51971,51971,51972,51972,51973,51974, +51974,51975,51975,51976,51977,51977,51978,51978,51979,51980,51980,51981,51981, +51982,51983,51983,51984,51984,51985,51986,51986,51987,51987,51988,51989,51989, +51990,51990,51991,51992,51992,51993,51993,51994,51994,51995,51996,51996,51997, +51997,51998,51999,51999,52000,52000,52001,52002,52002,52003,52003,52004,52005, +52005,52006,52006,52007,52008,52008,52009,52009,52010,52011,52011,52012,52012, +52013,52014,52014,52015,52015,52016,52017,52017,52018,52018,52019,52020,52020, +52021,52021,52022,52023,52023,52024,52024,52025,52025,52026,52027,52027,52028, +52028,52029,52030,52030,52031,52031,52032,52033,52033,52034,52034,52035,52036, +52036,52037,52037,52038,52039,52039,52040,52040,52041,52042,52042,52043,52043, +52044,52045,52045,52046,52046,52047,52048,52048,52049,52049,52050,52051,52051, +52052,52052,52053,52053,52054,52055,52055,52056,52056,52057,52058,52058,52059, +52059,52060,52061,52061,52062,52062,52063,52064,52064,52065,52065,52066,52067, +52067,52068,52068,52069,52070,52070,52071,52071,52072,52073,52073,52074,52074, +52075,52076,52076,52077,52077,52078,52078,52079,52080,52080,52081,52081,52082, +52083,52083,52084,52084,52085,52086,52086,52087,52087,52088,52089,52089,52090, +52090,52091,52092,52092,52093,52093,52094,52095,52095,52096,52096,52097,52098, +52098,52099,52099,52100,52101,52101,52102,52102,52103,52103,52104,52105,52105, +52106,52106,52107,52108,52108,52109,52109,52110,52111,52111,52112,52112,52113, +52114,52114,52115,52115,52116,52117,52117,52118,52118,52119,52120,52120,52121, +52121,52122,52123,52123,52124,52124,52125,52125,52126,52127,52127,52128,52128, +52129,52130,52130,52131,52131,52132,52133,52133,52134,52134,52135,52136,52136, +52137,52137,52138,52139,52139,52140,52140,52141,52142,52142,52143,52143,52144, +52145,52145,52146,52146,52147,52147,52148,52149,52149,52150,52150,52151,52152, +52152,52153,52153,52154,52155,52155,52156,52156,52157,52158,52158,52159,52159, +52160,52161,52161,52162,52162,52163,52164,52164,52165,52165,52166,52166,52167, +52168,52168,52169,52169,52170,52171,52171,52172,52172,52173,52174,52174,52175, +52175,52176,52177,52177,52178,52178,52179,52180,52180,52181,52181,52182,52183, +52183,52184,52184,52185,52185,52186,52187,52187,52188,52188,52189,52190,52190, +52191,52191,52192,52193,52193,52194,52194,52195,52196,52196,52197,52197,52198, +52199,52199,52200,52200,52201,52202,52202,52203,52203,52204,52204,52205,52206, +52206,52207,52207,52208,52209,52209,52210,52210,52211,52212,52212,52213,52213, +52214,52215,52215,52216,52216,52217,52218,52218,52219,52219,52220,52220,52221, +52222,52222,52223,52223,52224,52225,52225,52226,52226,52227,52228,52228,52229, +52229,52230,52231,52231,52232,52232,52233,52234,52234,52235,52235,52236,52236, +52237,52238,52238,52239,52239,52240,52241,52241,52242,52242,52243,52244,52244, +52245,52245,52246,52247,52247,52248,52248,52249,52250,52250,52251,52251,52252, +52252,52253,52254,52254,52255,52255,52256,52257,52257,52258,52258,52259,52260, +52260,52261,52261,52262,52263,52263,52264,52264,52265,52266,52266,52267,52267, +52268,52268,52269,52270,52270,52271,52271,52272,52273,52273,52274,52274,52275, +52276,52276,52277,52277,52278,52279,52279,52280,52280,52281,52282,52282,52283, +52283,52284,52284,52285,52286,52286,52287,52287,52288,52289,52289,52290,52290, +52291,52292,52292,52293,52293,52294,52295,52295,52296,52296,52297,52298,52298, +52299,52299,52300,52300,52301,52302,52302,52303,52303,52304,52305,52305,52306, +52306,52307,52308,52308,52309,52309,52310,52311,52311,52312,52312,52313,52313, +52314,52315,52315,52316,52316,52317,52318,52318,52319,52319,52320,52321,52321, +52322,52322,52323,52324,52324,52325,52325,52326,52327,52327,52328,52328,52329, +52329,52330,52331,52331,52332,52332,52333,52334,52334,52335,52335,52336,52337, +52337,52338,52338,52339,52340,52340,52341,52341,52342,52342,52343,52344,52344, +52345,52345,52346,52347,52347,52348,52348,52349,52350,52350,52351,52351,52352, +52353,52353,52354,52354,52355,52355,52356,52357,52357,52358,52358,52359,52360, +52360,52361,52361,52362,52363,52363,52364,52364,52365,52366,52366,52367,52367, +52368,52368,52369,52370,52370,52371,52371,52372,52373,52373,52374,52374,52375, +52376,52376,52377,52377,52378,52379,52379,52380,52380,52381,52381,52382,52383, +52383,52384,52384,52385,52386,52386,52387,52387,52388,52389,52389,52390,52390, +52391,52392,52392,52393,52393,52394,52394,52395,52396,52396,52397,52397,52398, +52399,52399,52400,52400,52401,52402,52402,52403,52403,52404,52405,52405,52406, +52406,52407,52407,52408,52409,52409,52410,52410,52411,52412,52412,52413,52413, +52414,52415,52415,52416,52416,52417,52417,52418,52419,52419,52420,52420,52421, +52422,52422,52423,52423,52424,52425,52425,52426,52426,52427,52428,52428,52429, +52429,52430,52430,52431,52432,52432,52433,52433,52434,52435,52435,52436,52436, +52437,52438,52438,52439,52439,52440,52440,52441,52442,52442,52443,52443,52444, +52445,52445,52446,52446,52447,52448,52448,52449,52449,52450,52451,52451,52452, +52452,52453,52453,52454,52455,52455,52456,52456,52457,52458,52458,52459,52459, +52460,52461,52461,52462,52462,52463,52463,52464,52465,52465,52466,52466,52467, +52468,52468,52469,52469,52470,52471,52471,52472,52472,52473,52474,52474,52475, +52475,52476,52476,52477,52478,52478,52479,52479,52480,52481,52481,52482,52482, +52483,52484,52484,52485,52485,52486,52486,52487,52488,52488,52489,52489,52490, +52491,52491,52492,52492,52493,52494,52494,52495,52495,52496,52496,52497,52498, +52498,52499,52499,52500,52501,52501,52502,52502,52503,52504,52504,52505,52505, +52506,52507,52507,52508,52508,52509,52509,52510,52511,52511,52512,52512,52513, +52514,52514,52515,52515,52516,52517,52517,52518,52518,52519,52519,52520,52521, +52521,52522,52522,52523,52524,52524,52525,52525,52526,52527,52527,52528,52528, +52529,52529,52530,52531,52531,52532,52532,52533,52534,52534,52535,52535,52536, +52537,52537,52538,52538,52539,52539,52540,52541,52541,52542,52542,52543,52544, +52544,52545,52545,52546,52547,52547,52548,52548,52549,52549,52550,52551,52551, +52552,52552,52553,52554,52554,52555,52555,52556,52557,52557,52558,52558,52559, +52559,52560,52561,52561,52562,52562,52563,52564,52564,52565,52565,52566,52567, +52567,52568,52568,52569,52569,52570,52571,52571,52572,52572,52573,52574,52574, +52575,52575,52576,52577,52577,52578,52578,52579,52579,52580,52581,52581,52582, +52582,52583,52584,52584,52585,52585,52586,52587,52587,52588,52588,52589,52589, +52590,52591,52591,52592,52592,52593,52594,52594,52595,52595,52596,52596,52597, +52598,52598,52599,52599,52600,52601,52601,52602,52602,52603,52604,52604,52605, +52605,52606,52606,52607,52608,52608,52609,52609,52610,52611,52611,52612,52612, +52613,52614,52614,52615,52615,52616,52616,52617,52618,52618,52619,52619,52620, +52621,52621,52622,52622,52623,52624,52624,52625,52625,52626,52626,52627,52628, +52628,52629,52629,52630,52631,52631,52632,52632,52633,52633,52634,52635,52635, +52636,52636,52637,52638,52638,52639,52639,52640,52641,52641,52642,52642,52643, +52643,52644,52645,52645,52646,52646,52647,52648,52648,52649,52649,52650,52651, +52651,52652,52652,52653,52653,52654,52655,52655,52656,52656,52657,52658,52658, +52659,52659,52660,52660,52661,52662,52662,52663,52663,52664,52665,52665,52666, +52666,52667,52668,52668,52669,52669,52670,52670,52671,52672,52672,52673,52673, +52674,52675,52675,52676,52676,52677,52677,52678,52679,52679,52680,52680,52681, +52682,52682,52683,52683,52684,52685,52685,52686,52686,52687,52687,52688,52689, +52689,52690,52690,52691,52692,52692,52693,52693,52694,52694,52695,52696,52696, +52697,52697,52698,52699,52699,52700,52700,52701,52702,52702,52703,52703,52704, +52704,52705,52706,52706,52707,52707,52708,52709,52709,52710,52710,52711,52711, +52712,52713,52713,52714,52714,52715,52716,52716,52717,52717,52718,52719,52719, +52720,52720,52721,52721,52722,52723,52723,52724,52724,52725,52726,52726,52727, +52727,52728,52728,52729,52730,52730,52731,52731,52732,52733,52733,52734,52734, +52735,52735,52736,52737,52737,52738,52738,52739,52740,52740,52741,52741,52742, +52743,52743,52744,52744,52745,52745,52746,52747,52747,52748,52748,52749,52750, +52750,52751,52751,52752,52752,52753,52754,52754,52755,52755,52756,52757,52757, +52758,52758,52759,52759,52760,52761,52761,52762,52762,52763,52764,52764,52765, +52765,52766,52767,52767,52768,52768,52769,52769,52770,52771,52771,52772,52772, +52773,52774,52774,52775,52775,52776,52776,52777,52778,52778,52779,52779,52780, +52781,52781,52782,52782,52783,52783,52784,52785,52785,52786,52786,52787,52788, +52788,52789,52789,52790,52790,52791,52792,52792,52793,52793,52794,52795,52795, +52796,52796,52797,52798,52798,52799,52799,52800,52800,52801,52802,52802,52803, +52803,52804,52805,52805,52806,52806,52807,52807,52808,52809,52809,52810,52810, +52811,52812,52812,52813,52813,52814,52814,52815,52816,52816,52817,52817,52818, +52819,52819,52820,52820,52821,52821,52822,52823,52823,52824,52824,52825,52826, +52826,52827,52827,52828,52828,52829,52830,52830,52831,52831,52832,52833,52833, +52834,52834,52835,52835,52836,52837,52837,52838,52838,52839,52840,52840,52841, +52841,52842,52842,52843,52844,52844,52845,52845,52846,52847,52847,52848,52848, +52849,52849,52850,52851,52851,52852,52852,52853,52854,52854,52855,52855,52856, +52857,52857,52858,52858,52859,52859,52860,52861,52861,52862,52862,52863,52864, +52864,52865,52865,52866,52866,52867,52868,52868,52869,52869,52870,52871,52871, +52872,52872,52873,52873,52874,52875,52875,52876,52876,52877,52878,52878,52879, +52879,52880,52880,52881,52882,52882,52883,52883,52884,52885,52885,52886,52886, +52887,52887,52888,52889,52889,52890,52890,52891,52892,52892,52893,52893,52894, +52894,52895,52896,52896,52897,52897,52898,52899,52899,52900,52900,52901,52901, +52902,52903,52903,52904,52904,52905,52906,52906,52907,52907,52908,52908,52909, +52910,52910,52911,52911,52912,52913,52913,52914,52914,52915,52915,52916,52917, +52917,52918,52918,52919,52919,52920,52921,52921,52922,52922,52923,52924,52924, +52925,52925,52926,52926,52927,52928,52928,52929,52929,52930,52931,52931,52932, +52932,52933,52933,52934,52935,52935,52936,52936,52937,52938,52938,52939,52939, +52940,52940,52941,52942,52942,52943,52943,52944,52945,52945,52946,52946,52947, +52947,52948,52949,52949,52950,52950,52951,52952,52952,52953,52953,52954,52954, +52955,52956,52956,52957,52957,52958,52959,52959,52960,52960,52961,52961,52962, +52963,52963,52964,52964,52965,52966,52966,52967,52967,52968,52968,52969,52970, +52970,52971,52971,52972,52972,52973,52974,52974,52975,52975,52976,52977,52977, +52978,52978,52979,52979,52980,52981,52981,52982,52982,52983,52984,52984,52985, +52985,52986,52986,52987,52988,52988,52989,52989,52990,52991,52991,52992,52992, +52993,52993,52994,52995,52995,52996,52996,52997,52998,52998,52999,52999,53000, +53000,53001,53002,53002,53003,53003,53004,53004,53005,53006,53006,53007,53007, +53008,53009,53009,53010,53010,53011,53011,53012,53013,53013,53014,53014,53015, +53016,53016,53017,53017,53018,53018,53019,53020,53020,53021,53021,53022,53023, +53023,53024,53024,53025,53025,53026,53027,53027,53028,53028,53029,53029,53030, +53031,53031,53032,53032,53033,53034,53034,53035,53035,53036,53036,53037,53038, +53038,53039,53039,53040,53041,53041,53042,53042,53043,53043,53044,53045,53045, +53046,53046,53047,53048,53048,53049,53049,53050,53050,53051,53052,53052,53053, +53053,53054,53054,53055,53056,53056,53057,53057,53058,53059,53059,53060,53060, +53061,53061,53062,53063,53063,53064,53064,53065,53066,53066,53067,53067,53068, +53068,53069,53070,53070,53071,53071,53072,53072,53073,53074,53074,53075,53075, +53076,53077,53077,53078,53078,53079,53079,53080,53081,53081,53082,53082,53083, +53084,53084,53085,53085,53086,53086,53087,53088,53088,53089,53089,53090,53090, +53091,53092,53092,53093,53093,53094,53095,53095,53096,53096,53097,53097,53098, +53099,53099,53100,53100,53101,53102,53102,53103,53103,53104,53104,53105,53106, +53106,53107,53107,53108,53108,53109,53110,53110,53111,53111,53112,53113,53113, +53114,53114,53115,53115,53116,53117,53117,53118,53118,53119,53119,53120,53121, +53121,53122,53122,53123,53124,53124,53125,53125,53126,53126,53127,53128,53128, +53129,53129,53130,53131,53131,53132,53132,53133,53133,53134,53135,53135,53136, +53136,53137,53137,53138,53139,53139,53140,53140,53141,53142,53142,53143,53143, +53144,53144,53145,53146,53146,53147,53147,53148,53148,53149,53150,53150,53151, +53151,53152,53153,53153,53154,53154,53155,53155,53156,53157,53157,53158,53158, +53159,53159,53160,53161,53161,53162,53162,53163,53164,53164,53165,53165,53166, +53166,53167,53168,53168,53169,53169,53170,53170,53171,53172,53172,53173,53173, +53174,53175,53175,53176,53176,53177,53177,53178,53179,53179,53180,53180,53181, +53181,53182,53183,53183,53184,53184,53185,53186,53186,53187,53187,53188,53188, +53189,53190,53190,53191,53191,53192,53192,53193,53194,53194,53195,53195,53196, +53197,53197,53198,53198,53199,53199,53200,53201,53201,53202,53202,53203,53203, +53204,53205,53205,53206,53206,53207,53208,53208,53209,53209,53210,53210,53211, +53212,53212,53213,53213,53214,53214,53215,53216,53216,53217,53217,53218,53219, +53219,53220,53220,53221,53221,53222,53223,53223,53224,53224,53225,53225,53226, +53227,53227,53228,53228,53229,53230,53230,53231,53231,53232,53232,53233,53234, +53234,53235,53235,53236,53236,53237,53238,53238,53239,53239,53240,53241,53241, +53242,53242,53243,53243,53244,53245,53245,53246,53246,53247,53247,53248,53249, +53249,53250,53250,53251,53251,53252,53253,53253,53254,53254,53255,53256,53256, +53257,53257,53258,53258,53259,53260,53260,53261,53261,53262,53262,53263,53264, +53264,53265,53265,53266,53267,53267,53268,53268,53269,53269,53270,53271,53271, +53272,53272,53273,53273,53274,53275,53275,53276,53276,53277,53278,53278,53279, +53279,53280,53280,53281,53282,53282,53283,53283,53284,53284,53285,53286,53286, +53287,53287,53288,53288,53289,53290,53290,53291,53291,53292,53293,53293,53294, +53294,53295,53295,53296,53297,53297,53298,53298,53299,53299,53300,53301,53301, +53302,53302,53303,53303,53304,53305,53305,53306,53306,53307,53308,53308,53309, +53309,53310,53310,53311,53312,53312,53313,53313,53314,53314,53315,53316,53316, +53317,53317,53318,53318,53319,53320,53320,53321,53321,53322,53323,53323,53324, +53324,53325,53325,53326,53327,53327,53328,53328,53329,53329,53330,53331,53331, +53332,53332,53333,53333,53334,53335,53335,53336,53336,53337,53338,53338,53339, +53339,53340,53340,53341,53342,53342,53343,53343,53344,53344,53345,53346,53346, +53347,53347,53348,53348,53349,53350,53350,53351,53351,53352,53353,53353,53354, +53354,53355,53355,53356,53357,53357,53358,53358,53359,53359,53360,53361,53361, +53362,53362,53363,53363,53364,53365,53365,53366,53366,53367,53368,53368,53369, +53369,53370,53370,53371,53372,53372,53373,53373,53374,53374,53375,53376,53376, +53377,53377,53378,53378,53379,53380,53380,53381,53381,53382,53383,53383,53384, +53384,53385,53385,53386,53387,53387,53388,53388,53389,53389,53390,53391,53391, +53392,53392,53393,53393,53394,53395,53395,53396,53396,53397,53397,53398,53399, +53399,53400,53400,53401,53402,53402,53403,53403,53404,53404,53405,53406,53406, +53407,53407,53408,53408,53409,53410,53410,53411,53411,53412,53412,53413,53414, +53414,53415,53415,53416,53416,53417,53418,53418,53419,53419,53420,53421,53421, +53422,53422,53423,53423,53424,53425,53425,53426,53426,53427,53427,53428,53429, +53429,53430,53430,53431,53431,53432,53433,53433,53434,53434,53435,53435,53436, +53437,53437,53438,53438,53439,53440,53440,53441,53441,53442,53442,53443,53444, +53444,53445,53445,53446,53446,53447,53448,53448,53449,53449,53450,53450,53451, +53452,53452,53453,53453,53454,53454,53455,53456,53456,53457,53457,53458,53458, +53459,53460,53460,53461,53461,53462,53463,53463,53464,53464,53465,53465,53466, +53467,53467,53468,53468,53469,53469,53470,53471,53471,53472,53472,53473,53473, +53474,53475,53475,53476,53476,53477,53477,53478,53479,53479,53480,53480,53481, +53481,53482,53483,53483,53484,53484,53485,53486,53486,53487,53487,53488,53488, +53489,53490,53490,53491,53491,53492,53492,53493,53494,53494,53495,53495,53496, +53496,53497,53498,53498,53499,53499,53500,53500,53501,53502,53502,53503,53503, +53504,53504,53505,53506,53506,53507,53507,53508,53508,53509,53510,53510,53511, +53511,53512,53513,53513,53514,53514,53515,53515,53516,53517,53517,53518,53518, +53519,53519,53520,53521,53521,53522,53522,53523,53523,53524,53525,53525,53526, +53526,53527,53527,53528,53529,53529,53530,53530,53531,53531,53532,53533,53533, +53534,53534,53535,53535,53536,53537,53537,53538,53538,53539,53540,53540,53541, +53541,53542,53542,53543,53544,53544,53545,53545,53546,53546,53547,53548,53548, +53549,53549,53550,53550,53551,53552,53552,53553,53553,53554,53554,53555,53556, +53556,53557,53557,53558,53558,53559,53560,53560,53561,53561,53562,53562,53563, +53564,53564,53565,53565,53566,53566,53567,53568,53568,53569,53569,53570,53570, +53571,53572,53572,53573,53573,53574,53574,53575,53576,53576,53577,53577,53578, +53579,53579,53580,53580,53581,53581,53582,53583,53583,53584,53584,53585,53585, +53586,53587,53587,53588,53588,53589,53589,53590,53591,53591,53592,53592,53593, +53593,53594,53595,53595,53596,53596,53597,53597,53598,53599,53599,53600,53600, +53601,53601,53602,53603,53603,53604,53604,53605,53605,53606,53607,53607,53608, +53608,53609,53609,53610,53611,53611,53612,53612,53613,53613,53614,53615,53615, +53616,53616,53617,53617,53618,53619,53619,53620,53620,53621,53621,53622,53623, +53623,53624,53624,53625,53626,53626,53627,53627,53628,53628,53629,53630,53630, +53631,53631,53632,53632,53633,53634,53634,53635,53635,53636,53636,53637,53638, +53638,53639,53639,53640,53640,53641,53642,53642,53643,53643,53644,53644,53645, +53646,53646,53647,53647,53648,53648,53649,53650,53650,53651,53651,53652,53652, +53653,53654,53654,53655,53655,53656,53656,53657,53658,53658,53659,53659,53660, +53660,53661,53662,53662,53663,53663,53664,53664,53665,53666,53666,53667,53667, +53668,53668,53669,53670,53670,53671,53671,53672,53672,53673,53674,53674,53675, +53675,53676,53676,53677,53678,53678,53679,53679,53680,53680,53681,53682,53682, +53683,53683,53684,53684,53685,53686,53686,53687,53687,53688,53688,53689,53690, +53690,53691,53691,53692,53692,53693,53694,53694,53695,53695,53696,53696,53697, +53698,53698,53699,53699,53700,53700,53701,53702,53702,53703,53703,53704,53704, +53705,53706,53706,53707,53707,53708,53708,53709,53710,53710,53711,53711,53712, +53712,53713,53714,53714,53715,53715,53716,53716,53717,53718,53718,53719,53719, +53720,53720,53721,53722,53722,53723,53723,53724,53724,53725,53726,53726,53727, +53727,53728,53728,53729,53730,53730,53731,53731,53732,53732,53733,53734,53734, +53735,53735,53736,53736,53737,53738,53738,53739,53739,53740,53740,53741,53742, +53742,53743,53743,53744,53744,53745,53746,53746,53747,53747,53748,53748,53749, +53750,53750,53751,53751,53752,53752,53753,53754,53754,53755,53755,53756,53756, +53757,53758,53758,53759,53759,53760,53760,53761,53762,53762,53763,53763,53764, +53764,53765,53766,53766,53767,53767,53768,53768,53769,53770,53770,53771,53771, +53772,53772,53773,53774,53774,53775,53775,53776,53776,53777,53778,53778,53779, +53779,53780,53780,53781,53782,53782,53783,53783,53784,53784,53785,53786,53786, +53787,53787,53788,53788,53789,53790,53790,53791,53791,53792,53792,53793,53794, +53794,53795,53795,53796,53796,53797,53798,53798,53799,53799,53800,53800,53801, +53802,53802,53803,53803,53804,53804,53805,53806,53806,53807,53807,53808,53808, +53809,53810,53810,53811,53811,53812,53812,53813,53814,53814,53815,53815,53816, +53816,53817,53818,53818,53819,53819,53820,53820,53821,53821,53822,53823,53823, +53824,53824,53825,53825,53826,53827,53827,53828,53828,53829,53829,53830,53831, +53831,53832,53832,53833,53833,53834,53835,53835,53836,53836,53837,53837,53838, +53839,53839,53840,53840,53841,53841,53842,53843,53843,53844,53844,53845,53845, +53846,53847,53847,53848,53848,53849,53849,53850,53851,53851,53852,53852,53853, +53853,53854,53855,53855,53856,53856,53857,53857,53858,53859,53859,53860,53860, +53861,53861,53862,53863,53863,53864,53864,53865,53865,53866,53867,53867,53868, +53868,53869,53869,53870,53870,53871,53872,53872,53873,53873,53874,53874,53875, +53876,53876,53877,53877,53878,53878,53879,53880,53880,53881,53881,53882,53882, +53883,53884,53884,53885,53885,53886,53886,53887,53888,53888,53889,53889,53890, +53890,53891,53892,53892,53893,53893,53894,53894,53895,53896,53896,53897,53897, +53898,53898,53899,53900,53900,53901,53901,53902,53902,53903,53904,53904,53905, +53905,53906,53906,53907,53907,53908,53909,53909,53910,53910,53911,53911,53912, +53913,53913,53914,53914,53915,53915,53916,53917,53917,53918,53918,53919,53919, +53920,53921,53921,53922,53922,53923,53923,53924,53925,53925,53926,53926,53927, +53927,53928,53929,53929,53930,53930,53931,53931,53932,53933,53933,53934,53934, +53935,53935,53936,53936,53937,53938,53938,53939,53939,53940,53940,53941,53942, +53942,53943,53943,53944,53944,53945,53946,53946,53947,53947,53948,53948,53949, +53950,53950,53951,53951,53952,53952,53953,53954,53954,53955,53955,53956,53956, +53957,53958,53958,53959,53959,53960,53960,53961,53961,53962,53963,53963,53964, +53964,53965,53965,53966,53967,53967,53968,53968,53969,53969,53970,53971,53971, +53972,53972,53973,53973,53974,53975,53975,53976,53976,53977,53977,53978,53979, +53979,53980,53980,53981,53981,53982,53983,53983,53984,53984,53985,53985,53986, +53986,53987,53988,53988,53989,53989,53990,53990,53991,53992,53992,53993,53993, +53994,53994,53995,53996,53996,53997,53997,53998,53998,53999,54000,54000,54001, +54001,54002,54002,54003,54004,54004,54005,54005,54006,54006,54007,54007,54008, +54009,54009,54010,54010,54011,54011,54012,54013,54013,54014,54014,54015,54015, +54016,54017,54017,54018,54018,54019,54019,54020,54021,54021,54022,54022,54023, +54023,54024,54024,54025,54026,54026,54027,54027,54028,54028,54029,54030,54030, +54031,54031,54032,54032,54033,54034,54034,54035,54035,54036,54036,54037,54038, +54038,54039,54039,54040,54040,54041,54042,54042,54043,54043,54044,54044,54045, +54045,54046,54047,54047,54048,54048,54049,54049,54050,54051,54051,54052,54052, +54053,54053,54054,54055,54055,54056,54056,54057,54057,54058,54059,54059,54060, +54060,54061,54061,54062,54062,54063,54064,54064,54065,54065,54066,54066,54067, +54068,54068,54069,54069,54070,54070,54071,54072,54072,54073,54073,54074,54074, +54075,54076,54076,54077,54077,54078,54078,54079,54079,54080,54081,54081,54082, +54082,54083,54083,54084,54085,54085,54086,54086,54087,54087,54088,54089,54089, +54090,54090,54091,54091,54092,54093,54093,54094,54094,54095,54095,54096,54096, +54097,54098,54098,54099,54099,54100,54100,54101,54102,54102,54103,54103,54104, +54104,54105,54106,54106,54107,54107,54108,54108,54109,54109,54110,54111,54111, +54112,54112,54113,54113,54114,54115,54115,54116,54116,54117,54117,54118,54119, +54119,54120,54120,54121,54121,54122,54123,54123,54124,54124,54125,54125,54126, +54126,54127,54128,54128,54129,54129,54130,54130,54131,54132,54132,54133,54133, +54134,54134,54135,54136,54136,54137,54137,54138,54138,54139,54139,54140,54141, +54141,54142,54142,54143,54143,54144,54145,54145,54146,54146,54147,54147,54148, +54149,54149,54150,54150,54151,54151,54152,54152,54153,54154,54154,54155,54155, +54156,54156,54157,54158,54158,54159,54159,54160,54160,54161,54162,54162,54163, +54163,54164,54164,54165,54165,54166,54167,54167,54168,54168,54169,54169,54170, +54171,54171,54172,54172,54173,54173,54174,54175,54175,54176,54176,54177,54177, +54178,54178,54179,54180,54180,54181,54181,54182,54182,54183,54184,54184,54185, +54185,54186,54186,54187,54188,54188,54189,54189,54190,54190,54191,54191,54192, +54193,54193,54194,54194,54195,54195,54196,54197,54197,54198,54198,54199,54199, +54200,54201,54201,54202,54202,54203,54203,54204,54204,54205,54206,54206,54207, +54207,54208,54208,54209,54210,54210,54211,54211,54212,54212,54213,54214,54214, +54215,54215,54216,54216,54217,54217,54218,54219,54219,54220,54220,54221,54221, +54222,54223,54223,54224,54224,54225,54225,54226,54227,54227,54228,54228,54229, +54229,54230,54230,54231,54232,54232,54233,54233,54234,54234,54235,54236,54236, +54237,54237,54238,54238,54239,54239,54240,54241,54241,54242,54242,54243,54243, +54244,54245,54245,54246,54246,54247,54247,54248,54249,54249,54250,54250,54251, +54251,54252,54252,54253,54254,54254,54255,54255,54256,54256,54257,54258,54258, +54259,54259,54260,54260,54261,54261,54262,54263,54263,54264,54264,54265,54265, +54266,54267,54267,54268,54268,54269,54269,54270,54271,54271,54272,54272,54273, +54273,54274,54274,54275,54276,54276,54277,54277,54278,54278,54279,54280,54280, +54281,54281,54282,54282,54283,54283,54284,54285,54285,54286,54286,54287,54287, +54288,54289,54289,54290,54290,54291,54291,54292,54292,54293,54294,54294,54295, +54295,54296,54296,54297,54298,54298,54299,54299,54300,54300,54301,54302,54302, +54303,54303,54304,54304,54305,54305,54306,54307,54307,54308,54308,54309,54309, +54310,54311,54311,54312,54312,54313,54313,54314,54314,54315,54316,54316,54317, +54317,54318,54318,54319,54320,54320,54321,54321,54322,54322,54323,54323,54324, +54325,54325,54326,54326,54327,54327,54328,54329,54329,54330,54330,54331,54331, +54332,54332,54333,54334,54334,54335,54335,54336,54336,54337,54338,54338,54339, +54339,54340,54340,54341,54341,54342,54343,54343,54344,54344,54345,54345,54346, +54347,54347,54348,54348,54349,54349,54350,54350,54351,54352,54352,54353,54353, +54354,54354,54355,54356,54356,54357,54357,54358,54358,54359,54360,54360,54361, +54361,54362,54362,54363,54363,54364,54365,54365,54366,54366,54367,54367,54368, +54369,54369,54370,54370,54371,54371,54372,54372,54373,54374,54374,54375,54375, +54376,54376,54377,54378,54378,54379,54379,54380,54380,54381,54381,54382,54383, +54383,54384,54384,54385,54385,54386,54386,54387,54388,54388,54389,54389,54390, +54390,54391,54392,54392,54393,54393,54394,54394,54395,54395,54396,54397,54397, +54398,54398,54399,54399,54400,54401,54401,54402,54402,54403,54403,54404,54404, +54405,54406,54406,54407,54407,54408,54408,54409,54410,54410,54411,54411,54412, +54412,54413,54413,54414,54415,54415,54416,54416,54417,54417,54418,54419,54419, +54420,54420,54421,54421,54422,54422,54423,54424,54424,54425,54425,54426,54426, +54427,54428,54428,54429,54429,54430,54430,54431,54431,54432,54433,54433,54434, +54434,54435,54435,54436,54437,54437,54438,54438,54439,54439,54440,54440,54441, +54442,54442,54443,54443,54444,54444,54445,54445,54446,54447,54447,54448,54448, +54449,54449,54450,54451,54451,54452,54452,54453,54453,54454,54454,54455,54456, +54456,54457,54457,54458,54458,54459,54460,54460,54461,54461,54462,54462,54463, +54463,54464,54465,54465,54466,54466,54467,54467,54468,54469,54469,54470,54470, +54471,54471,54472,54472,54473,54474,54474,54475,54475,54476,54476,54477,54477, +54478,54479,54479,54480,54480,54481,54481,54482,54483,54483,54484,54484,54485, +54485,54486,54486,54487,54488,54488,54489,54489,54490,54490,54491,54492,54492, +54493,54493,54494,54494,54495,54495,54496,54497,54497,54498,54498,54499,54499, +54500,54500,54501,54502,54502,54503,54503,54504,54504,54505,54506,54506,54507, +54507,54508,54508,54509,54509,54510,54511,54511,54512,54512,54513,54513,54514, +54514,54515,54516,54516,54517,54517,54518,54518,54519,54520,54520,54521,54521, +54522,54522,54523,54523,54524,54525,54525,54526,54526,54527,54527,54528,54529, +54529,54530,54530,54531,54531,54532,54532,54533,54534,54534,54535,54535,54536, +54536,54537,54537,54538,54539,54539,54540,54540,54541,54541,54542,54543,54543, +54544,54544,54545,54545,54546,54546,54547,54548,54548,54549,54549,54550,54550, +54551,54551,54552,54553,54553,54554,54554,54555,54555,54556,54557,54557,54558, +54558,54559,54559,54560,54560,54561,54562,54562,54563,54563,54564,54564,54565, +54565,54566,54567,54567,54568,54568,54569,54569,54570,54571,54571,54572,54572, +54573,54573,54574,54574,54575,54576,54576,54577,54577,54578,54578,54579,54579, +54580,54581,54581,54582,54582,54583,54583,54584,54585,54585,54586,54586,54587, +54587,54588,54588,54589,54590,54590,54591,54591,54592,54592,54593,54593,54594, +54595,54595,54596,54596,54597,54597,54598,54598,54599,54600,54600,54601,54601, +54602,54602,54603,54604,54604,54605,54605,54606,54606,54607,54607,54608,54609, +54609,54610,54610,54611,54611,54612,54612,54613,54614,54614,54615,54615,54616, +54616,54617,54618,54618,54619,54619,54620,54620,54621,54621,54622,54623,54623, +54624,54624,54625,54625,54626,54626,54627,54628,54628,54629,54629,54630,54630, +54631,54631,54632,54633,54633,54634,54634,54635,54635,54636,54637,54637,54638, +54638,54639,54639,54640,54640,54641,54642,54642,54643,54643,54644,54644,54645, +54645,54646,54647,54647,54648,54648,54649,54649,54650,54650,54651,54652,54652, +54653,54653,54654,54654,54655,54656,54656,54657,54657,54658,54658,54659,54659, +54660,54661,54661,54662,54662,54663,54663,54664,54664,54665,54666,54666,54667, +54667,54668,54668,54669,54669,54670,54671,54671,54672,54672,54673,54673,54674, +54675,54675,54676,54676,54677,54677,54678,54678,54679,54680,54680,54681,54681, +54682,54682,54683,54683,54684,54685,54685,54686,54686,54687,54687,54688,54688, +54689,54690,54690,54691,54691,54692,54692,54693,54693,54694,54695,54695,54696, +54696,54697,54697,54698,54699,54699,54700,54700,54701,54701,54702,54702,54703, +54704,54704,54705,54705,54706,54706,54707,54707,54708,54709,54709,54710,54710, +54711,54711,54712,54712,54713,54714,54714,54715,54715,54716,54716,54717,54717, +54718,54719,54719,54720,54720,54721,54721,54722,54723,54723,54724,54724,54725, +54725,54726,54726,54727,54728,54728,54729,54729,54730,54730,54731,54731,54732, +54733,54733,54734,54734,54735,54735,54736,54736,54737,54738,54738,54739,54739, +54740,54740,54741,54741,54742,54743,54743,54744,54744,54745,54745,54746,54746, +54747,54748,54748,54749,54749,54750,54750,54751,54751,54752,54753,54753,54754, +54754,54755,54755,54756,54757,54757,54758,54758,54759,54759,54760,54760,54761, +54762,54762,54763,54763,54764,54764,54765,54765,54766,54767,54767,54768,54768, +54769,54769,54770,54770,54771,54772,54772,54773,54773,54774,54774,54775,54775, +54776,54777,54777,54778,54778,54779,54779,54780,54780,54781,54782,54782,54783, +54783,54784,54784,54785,54785,54786,54787,54787,54788,54788,54789,54789,54790, +54790,54791,54792,54792,54793,54793,54794,54794,54795,54796,54796,54797,54797, +54798,54798,54799,54799,54800,54801,54801,54802,54802,54803,54803,54804,54804, +54805,54806,54806,54807,54807,54808,54808,54809,54809,54810,54811,54811,54812, +54812,54813,54813,54814,54814,54815,54816,54816,54817,54817,54818,54818,54819, +54819,54820,54821,54821,54822,54822,54823,54823,54824,54824,54825,54826,54826, +54827,54827,54828,54828,54829,54829,54830,54831,54831,54832,54832,54833,54833, +54834,54834,54835,54836,54836,54837,54837,54838,54838,54839,54839,54840,54841, +54841,54842,54842,54843,54843,54844,54844,54845,54846,54846,54847,54847,54848, +54848,54849,54849,54850,54851,54851,54852,54852,54853,54853,54854,54854,54855, +54856,54856,54857,54857,54858,54858,54859,54859,54860,54861,54861,54862,54862, +54863,54863,54864,54864,54865,54866,54866,54867,54867,54868,54868,54869,54869, +54870,54871,54871,54872,54872,54873,54873,54874,54874,54875,54876,54876,54877, +54877,54878,54878,54879,54879,54880,54881,54881,54882,54882,54883,54883,54884, +54884,54885,54886,54886,54887,54887,54888,54888,54889,54889,54890,54891,54891, +54892,54892,54893,54893,54894,54894,54895,54896,54896,54897,54897,54898,54898, +54899,54899,54900,54901,54901,54902,54902,54903,54903,54904,54904,54905,54906, +54906,54907,54907,54908,54908,54909,54909,54910,54911,54911,54912,54912,54913, +54913,54914,54914,54915,54916,54916,54917,54917,54918,54918,54919,54919,54920, +54921,54921,54922,54922,54923,54923,54924,54924,54925,54926,54926,54927,54927, +54928,54928,54929,54929,54930,54931,54931,54932,54932,54933,54933,54934,54934, +54935,54936,54936,54937,54937,54938,54938,54939,54939,54940,54941,54941,54942, +54942,54943,54943,54944,54944,54945,54946,54946,54947,54947,54948,54948,54949, +54949,54950,54951,54951,54952,54952,54953,54953,54954,54954,54955,54956,54956, +54957,54957,54958,54958,54959,54959,54960,54961,54961,54962,54962,54963,54963, +54964,54964,54965,54966,54966,54967,54967,54968,54968,54969,54969,54970,54971, +54971,54972,54972,54973,54973,54974,54974,54975,54976,54976,54977,54977,54978, +54978,54979,54979,54980,54980,54981,54982,54982,54983,54983,54984,54984,54985, +54985,54986,54987,54987,54988,54988,54989,54989,54990,54990,54991,54992,54992, +54993,54993,54994,54994,54995,54995,54996,54997,54997,54998,54998,54999,54999, +55000,55000,55001,55002,55002,55003,55003,55004,55004,55005,55005,55006,55007, +55007,55008,55008,55009,55009,55010,55010,55011,55012,55012,55013,55013,55014, +55014,55015,55015,55016,55017,55017,55018,55018,55019,55019,55020,55020,55021, +55021,55022,55023,55023,55024,55024,55025,55025,55026,55026,55027,55028,55028, +55029,55029,55030,55030,55031,55031,55032,55033,55033,55034,55034,55035,55035, +55036,55036,55037,55038,55038,55039,55039,55040,55040,55041,55041,55042,55043, +55043,55044,55044,55045,55045,55046,55046,55047,55048,55048,55049,55049,55050, +55050,55051,55051,55052,55052,55053,55054,55054,55055,55055,55056,55056,55057, +55057,55058,55059,55059,55060,55060,55061,55061,55062,55062,55063,55064,55064, +55065,55065,55066,55066,55067,55067,55068,55069,55069,55070,55070,55071,55071, +55072,55072,55073,55074,55074,55075,55075,55076,55076,55077,55077,55078,55078, +55079,55080,55080,55081,55081,55082,55082,55083,55083,55084,55085,55085,55086, +55086,55087,55087,55088,55088,55089,55090,55090,55091,55091,55092,55092,55093, +55093,55094,55095,55095,55096,55096,55097,55097,55098,55098,55099,55100,55100, +55101,55101,55102,55102,55103,55103,55104,55104,55105,55106,55106,55107,55107, +55108,55108,55109,55109,55110,55111,55111,55112,55112,55113,55113,55114,55114, +55115,55116,55116,55117,55117,55118,55118,55119,55119,55120,55121,55121,55122, +55122,55123,55123,55124,55124,55125,55125,55126,55127,55127,55128,55128,55129, +55129,55130,55130,55131,55132,55132,55133,55133,55134,55134,55135,55135,55136, +55137,55137,55138,55138,55139,55139,55140,55140,55141,55141,55142,55143,55143, +55144,55144,55145,55145,55146,55146,55147,55148,55148,55149,55149,55150,55150, +55151,55151,55152,55153,55153,55154,55154,55155,55155,55156,55156,55157,55158, +55158,55159,55159,55160,55160,55161,55161,55162,55162,55163,55164,55164,55165, +55165,55166,55166,55167,55167,55168,55169,55169,55170,55170,55171,55171,55172, +55172,55173,55174,55174,55175,55175,55176,55176,55177,55177,55178,55178,55179, +55180,55180,55181,55181,55182,55182,55183,55183,55184,55185,55185,55186,55186, +55187,55187,55188,55188,55189,55190,55190,55191,55191,55192,55192,55193,55193, +55194,55194,55195,55196,55196,55197,55197,55198,55198,55199,55199,55200,55201, +55201,55202,55202,55203,55203,55204,55204,55205,55205,55206,55207,55207,55208, +55208,55209,55209,55210,55210,55211,55212,55212,55213,55213,55214,55214,55215, +55215,55216,55217,55217,55218,55218,55219,55219,55220,55220,55221,55221,55222, +55223,55223,55224,55224,55225,55225,55226,55226,55227,55228,55228,55229,55229, +55230,55230,55231,55231,55232,55233,55233,55234,55234,55235,55235,55236,55236, +55237,55237,55238,55239,55239,55240,55240,55241,55241,55242,55242,55243,55244, +55244,55245,55245,55246,55246,55247,55247,55248,55248,55249,55250,55250,55251, +55251,55252,55252,55253,55253,55254,55255,55255,55256,55256,55257,55257,55258, +55258,55259,55259,55260,55261,55261,55262,55262,55263,55263,55264,55264,55265, +55266,55266,55267,55267,55268,55268,55269,55269,55270,55271,55271,55272,55272, +55273,55273,55274,55274,55275,55275,55276,55277,55277,55278,55278,55279,55279, +55280,55280,55281,55282,55282,55283,55283,55284,55284,55285,55285,55286,55286, +55287,55288,55288,55289,55289,55290,55290,55291,55291,55292,55293,55293,55294, +55294,55295,55295,55296,55296,55297,55297,55298,55299,55299,55300,55300,55301, +55301,55302,55302,55303,55304,55304,55305,55305,55306,55306,55307,55307,55308, +55308,55309,55310,55310,55311,55311,55312,55312,55313,55313,55314,55315,55315, +55316,55316,55317,55317,55318,55318,55319,55319,55320,55321,55321,55322,55322, +55323,55323,55324,55324,55325,55326,55326,55327,55327,55328,55328,55329,55329, +55330,55330,55331,55332,55332,55333,55333,55334,55334,55335,55335,55336,55337, +55337,55338,55338,55339,55339,55340,55340,55341,55341,55342,55343,55343,55344, +55344,55345,55345,55346,55346,55347,55348,55348,55349,55349,55350,55350,55351, +55351,55352,55352,55353,55354,55354,55355,55355,55356,55356,55357,55357,55358, +55358,55359,55360,55360,55361,55361,55362,55362,55363,55363,55364,55365,55365, +55366,55366,55367,55367,55368,55368,55369,55369,55370,55371,55371,55372,55372, +55373,55373,55374,55374,55375,55376,55376,55377,55377,55378,55378,55379,55379, +55380,55380,55381,55382,55382,55383,55383,55384,55384,55385,55385,55386,55387, +55387,55388,55388,55389,55389,55390,55390,55391,55391,55392,55393,55393,55394, +55394,55395,55395,55396,55396,55397,55397,55398,55399,55399,55400,55400,55401, +55401,55402,55402,55403,55404,55404,55405,55405,55406,55406,55407,55407,55408, +55408,55409,55410,55410,55411,55411,55412,55412,55413,55413,55414,55414,55415, +55416,55416,55417,55417,55418,55418,55419,55419,55420,55421,55421,55422,55422, +55423,55423,55424,55424,55425,55425,55426,55427,55427,55428,55428,55429,55429, +55430,55430,55431,55431,55432,55433,55433,55434,55434,55435,55435,55436,55436, +55437,55438,55438,55439,55439,55440,55440,55441,55441,55442,55442,55443,55444, +55444,55445,55445,55446,55446,55447,55447,55448,55448,55449,55450,55450,55451, +55451,55452,55452,55453,55453,55454,55455,55455,55456,55456,55457,55457,55458, +55458,55459,55459,55460,55461,55461,55462,55462,55463,55463,55464,55464,55465, +55465,55466,55467,55467,55468,55468,55469,55469,55470,55470,55471,55472,55472, +55473,55473,55474,55474,55475,55475,55476,55476,55477,55478,55478,55479,55479, +55480,55480,55481,55481,55482,55482,55483,55484,55484,55485,55485,55486,55486, +55487,55487,55488,55488,55489,55490,55490,55491,55491,55492,55492,55493,55493, +55494,55495,55495,55496,55496,55497,55497,55498,55498,55499,55499,55500,55501, +55501,55502,55502,55503,55503,55504,55504,55505,55505,55506,55507,55507,55508, +55508,55509,55509,55510,55510,55511,55511,55512,55513,55513,55514,55514,55515, +55515,55516,55516,55517,55518,55518,55519,55519,55520,55520,55521,55521,55522, +55522,55523,55524,55524,55525,55525,55526,55526,55527,55527,55528,55528,55529, +55530,55530,55531,55531,55532,55532,55533,55533,55534,55534,55535,55536,55536, +55537,55537,55538,55538,55539,55539,55540,55540,55541,55542,55542,55543,55543, +55544,55544,55545,55545,55546,55546,55547,55548,55548,55549,55549,55550,55550, +55551,55551,55552,55553,55553,55554,55554,55555,55555,55556,55556,55557,55557, +55558,55559,55559,55560,55560,55561,55561,55562,55562,55563,55563,55564,55565, +55565,55566,55566,55567,55567,55568,55568,55569,55569,55570,55571,55571,55572, +55572,55573,55573,55574,55574,55575,55575,55576,55577,55577,55578,55578,55579, +55579,55580,55580,55581,55581,55582,55583,55583,55584,55584,55585,55585,55586, +55586,55587,55587,55588,55589,55589,55590,55590,55591,55591,55592,55592,55593, +55594,55594,55595,55595,55596,55596,55597,55597,55598,55598,55599,55600,55600, +55601,55601,55602,55602,55603,55603,55604,55604,55605,55606,55606,55607,55607, +55608,55608,55609,55609,55610,55610,55611,55612,55612,55613,55613,55614,55614, +55615,55615,55616,55616,55617,55618,55618,55619,55619,55620,55620,55621,55621, +55622,55622,55623,55624,55624,55625,55625,55626,55626,55627,55627,55628,55628, +55629,55630,55630,55631,55631,55632,55632,55633,55633,55634,55634,55635,55636, +55636,55637,55637,55638,55638,55639,55639,55640,55640,55641,55642,55642,55643, +55643,55644,55644,55645,55645,55646,55646,55647,55648,55648,55649,55649,55650, +55650,55651,55651,55652,55652,55653,55654,55654,55655,55655,55656,55656,55657, +55657,55658,55658,55659,55660,55660,55661,55661,55662,55662,55663,55663,55664, +55664,55665,55666,55666,55667,55667,55668,55668,55669,55669,55670,55670,55671, +55672,55672,55673,55673,55674,55674,55675,55675,55676,55676,55677,55678,55678, +55679,55679,55680,55680,55681,55681,55682,55682,55683,55684,55684,55685,55685, +55686,55686,55687,55687,55688,55688,55689,55690,55690,55691,55691,55692,55692, +55693,55693,55694,55694,55695,55696,55696,55697,55697,55698,55698,55699,55699, +55700,55700,55701,55702,55702,55703,55703,55704,55704,55705,55705,55706,55706, +55707,55708,55708,55709,55709,55710,55710,55711,55711,55712,55712,55713,55714, +55714,55715,55715,55716,55716,55717,55717,55718,55718,55719,55720,55720,55721, +55721,55722,55722,55723,55723,55724,55724,55725,55726,55726,55727,55727,55728, +55728,55729,55729,55730,55730,55731,55731,55732,55733,55733,55734,55734,55735, +55735,55736,55736,55737,55737,55738,55739,55739,55740,55740,55741,55741,55742, +55742,55743,55743,55744,55745,55745,55746,55746,55747,55747,55748,55748,55749, +55749,55750,55751,55751,55752,55752,55753,55753,55754,55754,55755,55755,55756, +55757,55757,55758,55758,55759,55759,55760,55760,55761,55761,55762,55763,55763, +55764,55764,55765,55765,55766,55766,55767,55767,55768,55769,55769,55770,55770, +55771,55771,55772,55772,55773,55773,55774,55774,55775,55776,55776,55777,55777, +55778,55778,55779,55779,55780,55780,55781,55782,55782,55783,55783,55784,55784, +55785,55785,55786,55786,55787,55788,55788,55789,55789,55790,55790,55791,55791, +55792,55792,55793,55794,55794,55795,55795,55796,55796,55797,55797,55798,55798, +55799,55800,55800,55801,55801,55802,55802,55803,55803,55804,55804,55805,55805, +55806,55807,55807,55808,55808,55809,55809,55810,55810,55811,55811,55812,55813, +55813,55814,55814,55815,55815,55816,55816,55817,55817,55818,55819,55819,55820, +55820,55821,55821,55822,55822,55823,55823,55824,55825,55825,55826,55826,55827, +55827,55828,55828,55829,55829,55830,55830,55831,55832,55832,55833,55833,55834, +55834,55835,55835,55836,55836,55837,55838,55838,55839,55839,55840,55840,55841, +55841,55842,55842,55843,55844,55844,55845,55845,55846,55846,55847,55847,55848, +55848,55849,55849,55850,55851,55851,55852,55852,55853,55853,55854,55854,55855, +55855,55856,55857,55857,55858,55858,55859,55859,55860,55860,55861,55861,55862, +55863,55863,55864,55864,55865,55865,55866,55866,55867,55867,55868,55868,55869, +55870,55870,55871,55871,55872,55872,55873,55873,55874,55874,55875,55876,55876, +55877,55877,55878,55878,55879,55879,55880,55880,55881,55882,55882,55883,55883, +55884,55884,55885,55885,55886,55886,55887,55887,55888,55889,55889,55890,55890, +55891,55891,55892,55892,55893,55893,55894,55895,55895,55896,55896,55897,55897, +55898,55898,55899,55899,55900,55901,55901,55902,55902,55903,55903,55904,55904, +55905,55905,55906,55906,55907,55908,55908,55909,55909,55910,55910,55911,55911, +55912,55912,55913,55914,55914,55915,55915,55916,55916,55917,55917,55918,55918, +55919,55919,55920,55921,55921,55922,55922,55923,55923,55924,55924,55925,55925, +55926,55927,55927,55928,55928,55929,55929,55930,55930,55931,55931,55932,55932, +55933,55934,55934,55935,55935,55936,55936,55937,55937,55938,55938,55939,55940, +55940,55941,55941,55942,55942,55943,55943,55944,55944,55945,55945,55946,55947, +55947,55948,55948,55949,55949,55950,55950,55951,55951,55952,55953,55953,55954, +55954,55955,55955,55956,55956,55957,55957,55958,55958,55959,55960,55960,55961, +55961,55962,55962,55963,55963,55964,55964,55965,55966,55966,55967,55967,55968, +55968,55969,55969,55970,55970,55971,55971,55972,55973,55973,55974,55974,55975, +55975,55976,55976,55977,55977,55978,55979,55979,55980,55980,55981,55981,55982, +55982,55983,55983,55984,55984,55985,55986,55986,55987,55987,55988,55988,55989, +55989,55990,55990,55991,55992,55992,55993,55993,55994,55994,55995,55995,55996, +55996,55997,55997,55998,55999,55999,56000,56000,56001,56001,56002,56002,56003, +56003,56004,56005,56005,56006,56006,56007,56007,56008,56008,56009,56009,56010, +56010,56011,56012,56012,56013,56013,56014,56014,56015,56015,56016,56016,56017, +56017,56018,56019,56019,56020,56020,56021,56021,56022,56022,56023,56023,56024, +56025,56025,56026,56026,56027,56027,56028,56028,56029,56029,56030,56030,56031, +56032,56032,56033,56033,56034,56034,56035,56035,56036,56036,56037,56037,56038, +56039,56039,56040,56040,56041,56041,56042,56042,56043,56043,56044,56045,56045, +56046,56046,56047,56047,56048,56048,56049,56049,56050,56050,56051,56052,56052, +56053,56053,56054,56054,56055,56055,56056,56056,56057,56057,56058,56059,56059, +56060,56060,56061,56061,56062,56062,56063,56063,56064,56065,56065,56066,56066, +56067,56067,56068,56068,56069,56069,56070,56070,56071,56072,56072,56073,56073, +56074,56074,56075,56075,56076,56076,56077,56077,56078,56079,56079,56080,56080, +56081,56081,56082,56082,56083,56083,56084,56085,56085,56086,56086,56087,56087, +56088,56088,56089,56089,56090,56090,56091,56092,56092,56093,56093,56094,56094, +56095,56095,56096,56096,56097,56097,56098,56099,56099,56100,56100,56101,56101, +56102,56102,56103,56103,56104,56104,56105,56106,56106,56107,56107,56108,56108, +56109,56109,56110,56110,56111,56111,56112,56113,56113,56114,56114,56115,56115, +56116,56116,56117,56117,56118,56119,56119,56120,56120,56121,56121,56122,56122, +56123,56123,56124,56124,56125,56126,56126,56127,56127,56128,56128,56129,56129, +56130,56130,56131,56131,56132,56133,56133,56134,56134,56135,56135,56136,56136, +56137,56137,56138,56138,56139,56140,56140,56141,56141,56142,56142,56143,56143, +56144,56144,56145,56145,56146,56147,56147,56148,56148,56149,56149,56150,56150, +56151,56151,56152,56152,56153,56154,56154,56155,56155,56156,56156,56157,56157, +56158,56158,56159,56160,56160,56161,56161,56162,56162,56163,56163,56164,56164, +56165,56165,56166,56167,56167,56168,56168,56169,56169,56170,56170,56171,56171, +56172,56172,56173,56174,56174,56175,56175,56176,56176,56177,56177,56178,56178, +56179,56179,56180,56181,56181,56182,56182,56183,56183,56184,56184,56185,56185, +56186,56186,56187,56188,56188,56189,56189,56190,56190,56191,56191,56192,56192, +56193,56193,56194,56195,56195,56196,56196,56197,56197,56198,56198,56199,56199, +56200,56200,56201,56202,56202,56203,56203,56204,56204,56205,56205,56206,56206, +56207,56207,56208,56209,56209,56210,56210,56211,56211,56212,56212,56213,56213, +56214,56214,56215,56216,56216,56217,56217,56218,56218,56219,56219,56220,56220, +56221,56221,56222,56223,56223,56224,56224,56225,56225,56226,56226,56227,56227, +56228,56228,56229,56230,56230,56231,56231,56232,56232,56233,56233,56234,56234, +56235,56235,56236,56237,56237,56238,56238,56239,56239,56240,56240,56241,56241, +56242,56242,56243,56244,56244,56245,56245,56246,56246,56247,56247,56248,56248, +56249,56249,56250,56251,56251,56252,56252,56253,56253,56254,56254,56255,56255, +56256,56256,56257,56257,56258,56259,56259,56260,56260,56261,56261,56262,56262, +56263,56263,56264,56264,56265,56266,56266,56267,56267,56268,56268,56269,56269, +56270,56270,56271,56271,56272,56273,56273,56274,56274,56275,56275,56276,56276, +56277,56277,56278,56278,56279,56280,56280,56281,56281,56282,56282,56283,56283, +56284,56284,56285,56285,56286,56287,56287,56288,56288,56289,56289,56290,56290, +56291,56291,56292,56292,56293,56294,56294,56295,56295,56296,56296,56297,56297, +56298,56298,56299,56299,56300,56301,56301,56302,56302,56303,56303,56304,56304, +56305,56305,56306,56306,56307,56307,56308,56309,56309,56310,56310,56311,56311, +56312,56312,56313,56313,56314,56314,56315,56316,56316,56317,56317,56318,56318, +56319,56319,56320,56320,56321,56321,56322,56323,56323,56324,56324,56325,56325, +56326,56326,56327,56327,56328,56328,56329,56330,56330,56331,56331,56332,56332, +56333,56333,56334,56334,56335,56335,56336,56336,56337,56338,56338,56339,56339, +56340,56340,56341,56341,56342,56342,56343,56343,56344,56345,56345,56346,56346, +56347,56347,56348,56348,56349,56349,56350,56350,56351,56352,56352,56353,56353, +56354,56354,56355,56355,56356,56356,56357,56357,56358,56358,56359,56360,56360, +56361,56361,56362,56362,56363,56363,56364,56364,56365,56365,56366,56367,56367, +56368,56368,56369,56369,56370,56370,56371,56371,56372,56372,56373,56374,56374, +56375,56375,56376,56376,56377,56377,56378,56378,56379,56379,56380,56380,56381, +56382,56382,56383,56383,56384,56384,56385,56385,56386,56386,56387,56387,56388, +56389,56389,56390,56390,56391,56391,56392,56392,56393,56393,56394,56394,56395, +56395,56396,56397,56397,56398,56398,56399,56399,56400,56400,56401,56401,56402, +56402,56403,56404,56404,56405,56405,56406,56406,56407,56407,56408,56408,56409, +56409,56410,56411,56411,56412,56412,56413,56413,56414,56414,56415,56415,56416, +56416,56417,56417,56418,56419,56419,56420,56420,56421,56421,56422,56422,56423, +56423,56424,56424,56425,56426,56426,56427,56427,56428,56428,56429,56429,56430, +56430,56431,56431,56432,56432,56433,56434,56434,56435,56435,56436,56436,56437, +56437,56438,56438,56439,56439,56440,56441,56441,56442,56442,56443,56443,56444, +56444,56445,56445,56446,56446,56447,56447,56448,56449,56449,56450,56450,56451, +56451,56452,56452,56453,56453,56454,56454,56455,56456,56456,56457,56457,56458, +56458,56459,56459,56460,56460,56461,56461,56462,56462,56463,56464,56464,56465, +56465,56466,56466,56467,56467,56468,56468,56469,56469,56470,56470,56471,56472, +56472,56473,56473,56474,56474,56475,56475,56476,56476,56477,56477,56478,56479, +56479,56480,56480,56481,56481,56482,56482,56483,56483,56484,56484,56485,56485, +56486,56487,56487,56488,56488,56489,56489,56490,56490,56491,56491,56492,56492, +56493,56493,56494,56495,56495,56496,56496,56497,56497,56498,56498,56499,56499, +56500,56500,56501,56502,56502,56503,56503,56504,56504,56505,56505,56506,56506, +56507,56507,56508,56508,56509,56510,56510,56511,56511,56512,56512,56513,56513, +56514,56514,56515,56515,56516,56516,56517,56518,56518,56519,56519,56520,56520, +56521,56521,56522,56522,56523,56523,56524,56525,56525,56526,56526,56527,56527, +56528,56528,56529,56529,56530,56530,56531,56531,56532,56533,56533,56534,56534, +56535,56535,56536,56536,56537,56537,56538,56538,56539,56539,56540,56541,56541, +56542,56542,56543,56543,56544,56544,56545,56545,56546,56546,56547,56547,56548, +56549,56549,56550,56550,56551,56551,56552,56552,56553,56553,56554,56554,56555, +56555,56556,56557,56557,56558,56558,56559,56559,56560,56560,56561,56561,56562, +56562,56563,56564,56564,56565,56565,56566,56566,56567,56567,56568,56568,56569, +56569,56570,56570,56571,56572,56572,56573,56573,56574,56574,56575,56575,56576, +56576,56577,56577,56578,56578,56579,56580,56580,56581,56581,56582,56582,56583, +56583,56584,56584,56585,56585,56586,56586,56587,56588,56588,56589,56589,56590, +56590,56591,56591,56592,56592,56593,56593,56594,56594,56595,56596,56596,56597, +56597,56598,56598,56599,56599,56600,56600,56601,56601,56602,56602,56603,56604, +56604,56605,56605,56606,56606,56607,56607,56608,56608,56609,56609,56610,56610, +56611,56612,56612,56613,56613,56614,56614,56615,56615,56616,56616,56617,56617, +56618,56618,56619,56620,56620,56621,56621,56622,56622,56623,56623,56624,56624, +56625,56625,56626,56626,56627,56628,56628,56629,56629,56630,56630,56631,56631, +56632,56632,56633,56633,56634,56634,56635,56636,56636,56637,56637,56638,56638, +56639,56639,56640,56640,56641,56641,56642,56642,56643,56644,56644,56645,56645, +56646,56646,56647,56647,56648,56648,56649,56649,56650,56650,56651,56652,56652, +56653,56653,56654,56654,56655,56655,56656,56656,56657,56657,56658,56658,56659, +56660,56660,56661,56661,56662,56662,56663,56663,56664,56664,56665,56665,56666, +56666,56667,56668,56668,56669,56669,56670,56670,56671,56671,56672,56672,56673, +56673,56674,56674,56675,56676,56676,56677,56677,56678,56678,56679,56679,56680, +56680,56681,56681,56682,56682,56683,56683,56684,56685,56685,56686,56686,56687, +56687,56688,56688,56689,56689,56690,56690,56691,56691,56692,56693,56693,56694, +56694,56695,56695,56696,56696,56697,56697,56698,56698,56699,56699,56700,56701, +56701,56702,56702,56703,56703,56704,56704,56705,56705,56706,56706,56707,56707, +56708,56709,56709,56710,56710,56711,56711,56712,56712,56713,56713,56714,56714, +56715,56715,56716,56716,56717,56718,56718,56719,56719,56720,56720,56721,56721, +56722,56722,56723,56723,56724,56724,56725,56726,56726,56727,56727,56728,56728, +56729,56729,56730,56730,56731,56731,56732,56732,56733,56734,56734,56735,56735, +56736,56736,56737,56737,56738,56738,56739,56739,56740,56740,56741,56741,56742, +56743,56743,56744,56744,56745,56745,56746,56746,56747,56747,56748,56748,56749, +56749,56750,56751,56751,56752,56752,56753,56753,56754,56754,56755,56755,56756, +56756,56757,56757,56758,56759,56759,56760,56760,56761,56761,56762,56762,56763, +56763,56764,56764,56765,56765,56766,56766,56767,56768,56768,56769,56769,56770, +56770,56771,56771,56772,56772,56773,56773,56774,56774,56775,56776,56776,56777, +56777,56778,56778,56779,56779,56780,56780,56781,56781,56782,56782,56783,56783, +56784,56785,56785,56786,56786,56787,56787,56788,56788,56789,56789,56790,56790, +56791,56791,56792,56793,56793,56794,56794,56795,56795,56796,56796,56797,56797, +56798,56798,56799,56799,56800,56800,56801,56802,56802,56803,56803,56804,56804, +56805,56805,56806,56806,56807,56807,56808,56808,56809,56810,56810,56811,56811, +56812,56812,56813,56813,56814,56814,56815,56815,56816,56816,56817,56817,56818, +56819,56819,56820,56820,56821,56821,56822,56822,56823,56823,56824,56824,56825, +56825,56826,56827,56827,56828,56828,56829,56829,56830,56830,56831,56831,56832, +56832,56833,56833,56834,56834,56835,56836,56836,56837,56837,56838,56838,56839, +56839,56840,56840,56841,56841,56842,56842,56843,56843,56844,56845,56845,56846, +56846,56847,56847,56848,56848,56849,56849,56850,56850,56851,56851,56852,56853, +56853,56854,56854,56855,56855,56856,56856,56857,56857,56858,56858,56859,56859, +56860,56860,56861,56862,56862,56863,56863,56864,56864,56865,56865,56866,56866, +56867,56867,56868,56868,56869,56869,56870,56871,56871,56872,56872,56873,56873, +56874,56874,56875,56875,56876,56876,56877,56877,56878,56878,56879,56880,56880, +56881,56881,56882,56882,56883,56883,56884,56884,56885,56885,56886,56886,56887, +56887,56888,56889,56889,56890,56890,56891,56891,56892,56892,56893,56893,56894, +56894,56895,56895,56896,56897,56897,56898,56898,56899,56899,56900,56900,56901, +56901,56902,56902,56903,56903,56904,56904,56905,56906,56906,56907,56907,56908, +56908,56909,56909,56910,56910,56911,56911,56912,56912,56913,56913,56914,56915, +56915,56916,56916,56917,56917,56918,56918,56919,56919,56920,56920,56921,56921, +56922,56922,56923,56924,56924,56925,56925,56926,56926,56927,56927,56928,56928, +56929,56929,56930,56930,56931,56931,56932,56933,56933,56934,56934,56935,56935, +56936,56936,56937,56937,56938,56938,56939,56939,56940,56940,56941,56942,56942, +56943,56943,56944,56944,56945,56945,56946,56946,56947,56947,56948,56948,56949, +56949,56950,56951,56951,56952,56952,56953,56953,56954,56954,56955,56955,56956, +56956,56957,56957,56958,56958,56959,56960,56960,56961,56961,56962,56962,56963, +56963,56964,56964,56965,56965,56966,56966,56967,56967,56968,56969,56969,56970, +56970,56971,56971,56972,56972,56973,56973,56974,56974,56975,56975,56976,56976, +56977,56978,56978,56979,56979,56980,56980,56981,56981,56982,56982,56983,56983, +56984,56984,56985,56985,56986,56986,56987,56988,56988,56989,56989,56990,56990, +56991,56991,56992,56992,56993,56993,56994,56994,56995,56995,56996,56997,56997, +56998,56998,56999,56999,57000,57000,57001,57001,57002,57002,57003,57003,57004, +57004,57005,57006,57006,57007,57007,57008,57008,57009,57009,57010,57010,57011, +57011,57012,57012,57013,57013,57014,57015,57015,57016,57016,57017,57017,57018, +57018,57019,57019,57020,57020,57021,57021,57022,57022,57023,57023,57024,57025, +57025,57026,57026,57027,57027,57028,57028,57029,57029,57030,57030,57031,57031, +57032,57032,57033,57034,57034,57035,57035,57036,57036,57037,57037,57038,57038, +57039,57039,57040,57040,57041,57041,57042,57043,57043,57044,57044,57045,57045, +57046,57046,57047,57047,57048,57048,57049,57049,57050,57050,57051,57051,57052, +57053,57053,57054,57054,57055,57055,57056,57056,57057,57057,57058,57058,57059, +57059,57060,57060,57061,57062,57062,57063,57063,57064,57064,57065,57065,57066, +57066,57067,57067,57068,57068,57069,57069,57070,57070,57071,57072,57072,57073, +57073,57074,57074,57075,57075,57076,57076,57077,57077,57078,57078,57079,57079, +57080,57081,57081,57082,57082,57083,57083,57084,57084,57085,57085,57086,57086, +57087,57087,57088,57088,57089,57089,57090,57091,57091,57092,57092,57093,57093, +57094,57094,57095,57095,57096,57096,57097,57097,57098,57098,57099,57100,57100, +57101,57101,57102,57102,57103,57103,57104,57104,57105,57105,57106,57106,57107, +57107,57108,57108,57109,57110,57110,57111,57111,57112,57112,57113,57113,57114, +57114,57115,57115,57116,57116,57117,57117,57118,57118,57119,57120,57120,57121, +57121,57122,57122,57123,57123,57124,57124,57125,57125,57126,57126,57127,57127, +57128,57129,57129,57130,57130,57131,57131,57132,57132,57133,57133,57134,57134, +57135,57135,57136,57136,57137,57137,57138,57139,57139,57140,57140,57141,57141, +57142,57142,57143,57143,57144,57144,57145,57145,57146,57146,57147,57147,57148, +57149,57149,57150,57150,57151,57151,57152,57152,57153,57153,57154,57154,57155, +57155,57156,57156,57157,57157,57158,57159,57159,57160,57160,57161,57161,57162, +57162,57163,57163,57164,57164,57165,57165,57166,57166,57167,57167,57168,57169, +57169,57170,57170,57171,57171,57172,57172,57173,57173,57174,57174,57175,57175, +57176,57176,57177,57177,57178,57179,57179,57180,57180,57181,57181,57182,57182, +57183,57183,57184,57184,57185,57185,57186,57186,57187,57187,57188,57189,57189, +57190,57190,57191,57191,57192,57192,57193,57193,57194,57194,57195,57195,57196, +57196,57197,57197,57198,57199,57199,57200,57200,57201,57201,57202,57202,57203, +57203,57204,57204,57205,57205,57206,57206,57207,57207,57208,57209,57209,57210, +57210,57211,57211,57212,57212,57213,57213,57214,57214,57215,57215,57216,57216, +57217,57217,57218,57219,57219,57220,57220,57221,57221,57222,57222,57223,57223, +57224,57224,57225,57225,57226,57226,57227,57227,57228,57229,57229,57230,57230, +57231,57231,57232,57232,57233,57233,57234,57234,57235,57235,57236,57236,57237, +57237,57238,57239,57239,57240,57240,57241,57241,57242,57242,57243,57243,57244, +57244,57245,57245,57246,57246,57247,57247,57248,57249,57249,57250,57250,57251, +57251,57252,57252,57253,57253,57254,57254,57255,57255,57256,57256,57257,57257, +57258,57258,57259,57260,57260,57261,57261,57262,57262,57263,57263,57264,57264, +57265,57265,57266,57266,57267,57267,57268,57268,57269,57270,57270,57271,57271, +57272,57272,57273,57273,57274,57274,57275,57275,57276,57276,57277,57277,57278, +57278,57279,57280,57280,57281,57281,57282,57282,57283,57283,57284,57284,57285, +57285,57286,57286,57287,57287,57288,57288,57289,57289,57290,57291,57291,57292, +57292,57293,57293,57294,57294,57295,57295,57296,57296,57297,57297,57298,57298, +57299,57299,57300,57301,57301,57302,57302,57303,57303,57304,57304,57305,57305, +57306,57306,57307,57307,57308,57308,57309,57309,57310,57310,57311,57312,57312, +57313,57313,57314,57314,57315,57315,57316,57316,57317,57317,57318,57318,57319, +57319,57320,57320,57321,57322,57322,57323,57323,57324,57324,57325,57325,57326, +57326,57327,57327,57328,57328,57329,57329,57330,57330,57331,57331,57332,57333, +57333,57334,57334,57335,57335,57336,57336,57337,57337,57338,57338,57339,57339, +57340,57340,57341,57341,57342,57342,57343,57344,57344,57345,57345,57346,57346, +57347,57347,57348,57348,57349,57349,57350,57350,57351,57351,57352,57352,57353, +57354,57354,57355,57355,57356,57356,57357,57357,57358,57358,57359,57359,57360, +57360,57361,57361,57362,57362,57363,57363,57364,57365,57365,57366,57366,57367, +57367,57368,57368,57369,57369,57370,57370,57371,57371,57372,57372,57373,57373, +57374,57374,57375,57376,57376,57377,57377,57378,57378,57379,57379,57380,57380, +57381,57381,57382,57382,57383,57383,57384,57384,57385,57385,57386,57387,57387, +57388,57388,57389,57389,57390,57390,57391,57391,57392,57392,57393,57393,57394, +57394,57395,57395,57396,57396,57397,57398,57398,57399,57399,57400,57400,57401, +57401,57402,57402,57403,57403,57404,57404,57405,57405,57406,57406,57407,57407, +57408,57409,57409,57410,57410,57411,57411,57412,57412,57413,57413,57414,57414, +57415,57415,57416,57416,57417,57417,57418,57418,57419,57420,57420,57421,57421, +57422,57422,57423,57423,57424,57424,57425,57425,57426,57426,57427,57427,57428, +57428,57429,57429,57430,57431,57431,57432,57432,57433,57433,57434,57434,57435, +57435,57436,57436,57437,57437,57438,57438,57439,57439,57440,57440,57441,57442, +57442,57443,57443,57444,57444,57445,57445,57446,57446,57447,57447,57448,57448, +57449,57449,57450,57450,57451,57451,57452,57452,57453,57454,57454,57455,57455, +57456,57456,57457,57457,57458,57458,57459,57459,57460,57460,57461,57461,57462, +57462,57463,57463,57464,57465,57465,57466,57466,57467,57467,57468,57468,57469, +57469,57470,57470,57471,57471,57472,57472,57473,57473,57474,57474,57475,57476, +57476,57477,57477,57478,57478,57479,57479,57480,57480,57481,57481,57482,57482, +57483,57483,57484,57484,57485,57485,57486,57486,57487,57488,57488,57489,57489, +57490,57490,57491,57491,57492,57492,57493,57493,57494,57494,57495,57495,57496, +57496,57497,57497,57498,57499,57499,57500,57500,57501,57501,57502,57502,57503, +57503,57504,57504,57505,57505,57506,57506,57507,57507,57508,57508,57509,57509, +57510,57511,57511,57512,57512,57513,57513,57514,57514,57515,57515,57516,57516, +57517,57517,57518,57518,57519,57519,57520,57520,57521,57522,57522,57523,57523, +57524,57524,57525,57525,57526,57526,57527,57527,57528,57528,57529,57529,57530, +57530,57531,57531,57532,57532,57533,57534,57534,57535,57535,57536,57536,57537, +57537,57538,57538,57539,57539,57540,57540,57541,57541,57542,57542,57543,57543, +57544,57544,57545,57546,57546,57547,57547,57548,57548,57549,57549,57550,57550, +57551,57551,57552,57552,57553,57553,57554,57554,57555,57555,57556,57556,57557, +57558,57558,57559,57559,57560,57560,57561,57561,57562,57562,57563,57563,57564, +57564,57565,57565,57566,57566,57567,57567,57568,57568,57569,57570,57570,57571, +57571,57572,57572,57573,57573,57574,57574,57575,57575,57576,57576,57577,57577, +57578,57578,57579,57579,57580,57580,57581,57582,57582,57583,57583,57584,57584, +57585,57585,57586,57586,57587,57587,57588,57588,57589,57589,57590,57590,57591, +57591,57592,57592,57593,57594,57594,57595,57595,57596,57596,57597,57597,57598, +57598,57599,57599,57600,57600,57601,57601,57602,57602,57603,57603,57604,57604, +57605,57606,57606,57607,57607,57608,57608,57609,57609,57610,57610,57611,57611, +57612,57612,57613,57613,57614,57614,57615,57615,57616,57616,57617,57618,57618, +57619,57619,57620,57620,57621,57621,57622,57622,57623,57623,57624,57624,57625, +57625,57626,57626,57627,57627,57628,57628,57629,57629,57630,57631,57631,57632, +57632,57633,57633,57634,57634,57635,57635,57636,57636,57637,57637,57638,57638, +57639,57639,57640,57640,57641,57641,57642,57643,57643,57644,57644,57645,57645, +57646,57646,57647,57647,57648,57648,57649,57649,57650,57650,57651,57651,57652, +57652,57653,57653,57654,57654,57655,57656,57656,57657,57657,57658,57658,57659, +57659,57660,57660,57661,57661,57662,57662,57663,57663,57664,57664,57665,57665, +57666,57666,57667,57668,57668,57669,57669,57670,57670,57671,57671,57672,57672, +57673,57673,57674,57674,57675,57675,57676,57676,57677,57677,57678,57678,57679, +57679,57680,57681,57681,57682,57682,57683,57683,57684,57684,57685,57685,57686, +57686,57687,57687,57688,57688,57689,57689,57690,57690,57691,57691,57692,57692, +57693,57694,57694,57695,57695,57696,57696,57697,57697,57698,57698,57699,57699, +57700,57700,57701,57701,57702,57702,57703,57703,57704,57704,57705,57705,57706, +57707,57707,57708,57708,57709,57709,57710,57710,57711,57711,57712,57712,57713, +57713,57714,57714,57715,57715,57716,57716,57717,57717,57718,57718,57719,57720, +57720,57721,57721,57722,57722,57723,57723,57724,57724,57725,57725,57726,57726, +57727,57727,57728,57728,57729,57729,57730,57730,57731,57731,57732,57733,57733, +57734,57734,57735,57735,57736,57736,57737,57737,57738,57738,57739,57739,57740, +57740,57741,57741,57742,57742,57743,57743,57744,57744,57745,57746,57746,57747, +57747,57748,57748,57749,57749,57750,57750,57751,57751,57752,57752,57753,57753, +57754,57754,57755,57755,57756,57756,57757,57757,57758,57759,57759,57760,57760, +57761,57761,57762,57762,57763,57763,57764,57764,57765,57765,57766,57766,57767, +57767,57768,57768,57769,57769,57770,57770,57771,57772,57772,57773,57773,57774, +57774,57775,57775,57776,57776,57777,57777,57778,57778,57779,57779,57780,57780, +57781,57781,57782,57782,57783,57783,57784,57784,57785,57786,57786,57787,57787, +57788,57788,57789,57789,57790,57790,57791,57791,57792,57792,57793,57793,57794, +57794,57795,57795,57796,57796,57797,57797,57798,57799,57799,57800,57800,57801, +57801,57802,57802,57803,57803,57804,57804,57805,57805,57806,57806,57807,57807, +57808,57808,57809,57809,57810,57810,57811,57811,57812,57813,57813,57814,57814, +57815,57815,57816,57816,57817,57817,57818,57818,57819,57819,57820,57820,57821, +57821,57822,57822,57823,57823,57824,57824,57825,57825,57826,57827,57827,57828, +57828,57829,57829,57830,57830,57831,57831,57832,57832,57833,57833,57834,57834, +57835,57835,57836,57836,57837,57837,57838,57838,57839,57839,57840,57841,57841, +57842,57842,57843,57843,57844,57844,57845,57845,57846,57846,57847,57847,57848, +57848,57849,57849,57850,57850,57851,57851,57852,57852,57853,57853,57854,57855, +57855,57856,57856,57857,57857,57858,57858,57859,57859,57860,57860,57861,57861, +57862,57862,57863,57863,57864,57864,57865,57865,57866,57866,57867,57867,57868, +57869,57869,57870,57870,57871,57871,57872,57872,57873,57873,57874,57874,57875, +57875,57876,57876,57877,57877,57878,57878,57879,57879,57880,57880,57881,57881, +57882,57883,57883,57884,57884,57885,57885,57886,57886,57887,57887,57888,57888, +57889,57889,57890,57890,57891,57891,57892,57892,57893,57893,57894,57894,57895, +57895,57896,57896,57897,57898,57898,57899,57899,57900,57900,57901,57901,57902, +57902,57903,57903,57904,57904,57905,57905,57906,57906,57907,57907,57908,57908, +57909,57909,57910,57910,57911,57912,57912,57913,57913,57914,57914,57915,57915, +57916,57916,57917,57917,57918,57918,57919,57919,57920,57920,57921,57921,57922, +57922,57923,57923,57924,57924,57925,57925,57926,57927,57927,57928,57928,57929, +57929,57930,57930,57931,57931,57932,57932,57933,57933,57934,57934,57935,57935, +57936,57936,57937,57937,57938,57938,57939,57939,57940,57940,57941,57942,57942, +57943,57943,57944,57944,57945,57945,57946,57946,57947,57947,57948,57948,57949, +57949,57950,57950,57951,57951,57952,57952,57953,57953,57954,57954,57955,57955, +57956,57957,57957,57958,57958,57959,57959,57960,57960,57961,57961,57962,57962, +57963,57963,57964,57964,57965,57965,57966,57966,57967,57967,57968,57968,57969, +57969,57970,57970,57971,57972,57972,57973,57973,57974,57974,57975,57975,57976, +57976,57977,57977,57978,57978,57979,57979,57980,57980,57981,57981,57982,57982, +57983,57983,57984,57984,57985,57985,57986,57987,57987,57988,57988,57989,57989, +57990,57990,57991,57991,57992,57992,57993,57993,57994,57994,57995,57995,57996, +57996,57997,57997,57998,57998,57999,57999,58000,58000,58001,58001,58002,58003, +58003,58004,58004,58005,58005,58006,58006,58007,58007,58008,58008,58009,58009, +58010,58010,58011,58011,58012,58012,58013,58013,58014,58014,58015,58015,58016, +58016,58017,58018,58018,58019,58019,58020,58020,58021,58021,58022,58022,58023, +58023,58024,58024,58025,58025,58026,58026,58027,58027,58028,58028,58029,58029, +58030,58030,58031,58031,58032,58032,58033,58034,58034,58035,58035,58036,58036, +58037,58037,58038,58038,58039,58039,58040,58040,58041,58041,58042,58042,58043, +58043,58044,58044,58045,58045,58046,58046,58047,58047,58048,58048,58049,58050, +58050,58051,58051,58052,58052,58053,58053,58054,58054,58055,58055,58056,58056, +58057,58057,58058,58058,58059,58059,58060,58060,58061,58061,58062,58062,58063, +58063,58064,58064,58065,58066,58066,58067,58067,58068,58068,58069,58069,58070, +58070,58071,58071,58072,58072,58073,58073,58074,58074,58075,58075,58076,58076, +58077,58077,58078,58078,58079,58079,58080,58080,58081,58081,58082,58083,58083, +58084,58084,58085,58085,58086,58086,58087,58087,58088,58088,58089,58089,58090, +58090,58091,58091,58092,58092,58093,58093,58094,58094,58095,58095,58096,58096, +58097,58097,58098,58099,58099,58100,58100,58101,58101,58102,58102,58103,58103, +58104,58104,58105,58105,58106,58106,58107,58107,58108,58108,58109,58109,58110, +58110,58111,58111,58112,58112,58113,58113,58114,58114,58115,58116,58116,58117, +58117,58118,58118,58119,58119,58120,58120,58121,58121,58122,58122,58123,58123, +58124,58124,58125,58125,58126,58126,58127,58127,58128,58128,58129,58129,58130, +58130,58131,58131,58132,58133,58133,58134,58134,58135,58135,58136,58136,58137, +58137,58138,58138,58139,58139,58140,58140,58141,58141,58142,58142,58143,58143, +58144,58144,58145,58145,58146,58146,58147,58147,58148,58148,58149,58150,58150, +58151,58151,58152,58152,58153,58153,58154,58154,58155,58155,58156,58156,58157, +58157,58158,58158,58159,58159,58160,58160,58161,58161,58162,58162,58163,58163, +58164,58164,58165,58165,58166,58167,58167,58168,58168,58169,58169,58170,58170, +58171,58171,58172,58172,58173,58173,58174,58174,58175,58175,58176,58176,58177, +58177,58178,58178,58179,58179,58180,58180,58181,58181,58182,58182,58183,58183, +58184,58185,58185,58186,58186,58187,58187,58188,58188,58189,58189,58190,58190, +58191,58191,58192,58192,58193,58193,58194,58194,58195,58195,58196,58196,58197, +58197,58198,58198,58199,58199,58200,58200,58201,58201,58202,58203,58203,58204, +58204,58205,58205,58206,58206,58207,58207,58208,58208,58209,58209,58210,58210, +58211,58211,58212,58212,58213,58213,58214,58214,58215,58215,58216,58216,58217, +58217,58218,58218,58219,58219,58220,58221,58221,58222,58222,58223,58223,58224, +58224,58225,58225,58226,58226,58227,58227,58228,58228,58229,58229,58230,58230, +58231,58231,58232,58232,58233,58233,58234,58234,58235,58235,58236,58236,58237, +58237,58238,58239,58239,58240,58240,58241,58241,58242,58242,58243,58243,58244, +58244,58245,58245,58246,58246,58247,58247,58248,58248,58249,58249,58250,58250, +58251,58251,58252,58252,58253,58253,58254,58254,58255,58255,58256,58256,58257, +58258,58258,58259,58259,58260,58260,58261,58261,58262,58262,58263,58263,58264, +58264,58265,58265,58266,58266,58267,58267,58268,58268,58269,58269,58270,58270, +58271,58271,58272,58272,58273,58273,58274,58274,58275,58275,58276,58277,58277, +58278,58278,58279,58279,58280,58280,58281,58281,58282,58282,58283,58283,58284, +58284,58285,58285,58286,58286,58287,58287,58288,58288,58289,58289,58290,58290, +58291,58291,58292,58292,58293,58293,58294,58294,58295,58296,58296,58297,58297, +58298,58298,58299,58299,58300,58300,58301,58301,58302,58302,58303,58303,58304, +58304,58305,58305,58306,58306,58307,58307,58308,58308,58309,58309,58310,58310, +58311,58311,58312,58312,58313,58313,58314,58314,58315,58316,58316,58317,58317, +58318,58318,58319,58319,58320,58320,58321,58321,58322,58322,58323,58323,58324, +58324,58325,58325,58326,58326,58327,58327,58328,58328,58329,58329,58330,58330, +58331,58331,58332,58332,58333,58333,58334,58334,58335,58336,58336,58337,58337, +58338,58338,58339,58339,58340,58340,58341,58341,58342,58342,58343,58343,58344, +58344,58345,58345,58346,58346,58347,58347,58348,58348,58349,58349,58350,58350, +58351,58351,58352,58352,58353,58353,58354,58354,58355,58356,58356,58357,58357, +58358,58358,58359,58359,58360,58360,58361,58361,58362,58362,58363,58363,58364, +58364,58365,58365,58366,58366,58367,58367,58368,58368,58369,58369,58370,58370, +58371,58371,58372,58372,58373,58373,58374,58374,58375,58375,58376,58377,58377, +58378,58378,58379,58379,58380,58380,58381,58381,58382,58382,58383,58383,58384, +58384,58385,58385,58386,58386,58387,58387,58388,58388,58389,58389,58390,58390, +58391,58391,58392,58392,58393,58393,58394,58394,58395,58395,58396,58396,58397, +58398,58398,58399,58399,58400,58400,58401,58401,58402,58402,58403,58403,58404, +58404,58405,58405,58406,58406,58407,58407,58408,58408,58409,58409,58410,58410, +58411,58411,58412,58412,58413,58413,58414,58414,58415,58415,58416,58416,58417, +58417,58418,58419,58419,58420,58420,58421,58421,58422,58422,58423,58423,58424, +58424,58425,58425,58426,58426,58427,58427,58428,58428,58429,58429,58430,58430, +58431,58431,58432,58432,58433,58433,58434,58434,58435,58435,58436,58436,58437, +58437,58438,58438,58439,58439,58440,58441,58441,58442,58442,58443,58443,58444, +58444,58445,58445,58446,58446,58447,58447,58448,58448,58449,58449,58450,58450, +58451,58451,58452,58452,58453,58453,58454,58454,58455,58455,58456,58456,58457, +58457,58458,58458,58459,58459,58460,58460,58461,58461,58462,58463,58463,58464, +58464,58465,58465,58466,58466,58467,58467,58468,58468,58469,58469,58470,58470, +58471,58471,58472,58472,58473,58473,58474,58474,58475,58475,58476,58476,58477, +58477,58478,58478,58479,58479,58480,58480,58481,58481,58482,58482,58483,58483, +58484,58484,58485,58486,58486,58487,58487,58488,58488,58489,58489,58490,58490, +58491,58491,58492,58492,58493,58493,58494,58494,58495,58495,58496,58496,58497, +58497,58498,58498,58499,58499,58500,58500,58501,58501,58502,58502,58503,58503, +58504,58504,58505,58505,58506,58506,58507,58507,58508,58508,58509,58510,58510, +58511,58511,58512,58512,58513,58513,58514,58514,58515,58515,58516,58516,58517, +58517,58518,58518,58519,58519,58520,58520,58521,58521,58522,58522,58523,58523, +58524,58524,58525,58525,58526,58526,58527,58527,58528,58528,58529,58529,58530, +58530,58531,58531,58532,58532,58533,58534,58534,58535,58535,58536,58536,58537, +58537,58538,58538,58539,58539,58540,58540,58541,58541,58542,58542,58543,58543, +58544,58544,58545,58545,58546,58546,58547,58547,58548,58548,58549,58549,58550, +58550,58551,58551,58552,58552,58553,58553,58554,58554,58555,58555,58556,58556, +58557,58557,58558,58559,58559,58560,58560,58561,58561,58562,58562,58563,58563, +58564,58564,58565,58565,58566,58566,58567,58567,58568,58568,58569,58569,58570, +58570,58571,58571,58572,58572,58573,58573,58574,58574,58575,58575,58576,58576, +58577,58577,58578,58578,58579,58579,58580,58580,58581,58581,58582,58582,58583, +58584,58584,58585,58585,58586,58586,58587,58587,58588,58588,58589,58589,58590, +58590,58591,58591,58592,58592,58593,58593,58594,58594,58595,58595,58596,58596, +58597,58597,58598,58598,58599,58599,58600,58600,58601,58601,58602,58602,58603, +58603,58604,58604,58605,58605,58606,58606,58607,58607,58608,58608,58609,58610, +58610,58611,58611,58612,58612,58613,58613,58614,58614,58615,58615,58616,58616, +58617,58617,58618,58618,58619,58619,58620,58620,58621,58621,58622,58622,58623, +58623,58624,58624,58625,58625,58626,58626,58627,58627,58628,58628,58629,58629, +58630,58630,58631,58631,58632,58632,58633,58633,58634,58634,58635,58635,58636, +58637,58637,58638,58638,58639,58639,58640,58640,58641,58641,58642,58642,58643, +58643,58644,58644,58645,58645,58646,58646,58647,58647,58648,58648,58649,58649, +58650,58650,58651,58651,58652,58652,58653,58653,58654,58654,58655,58655,58656, +58656,58657,58657,58658,58658,58659,58659,58660,58660,58661,58661,58662,58662, +58663,58663,58664,58665,58665,58666,58666,58667,58667,58668,58668,58669,58669, +58670,58670,58671,58671,58672,58672,58673,58673,58674,58674,58675,58675,58676, +58676,58677,58677,58678,58678,58679,58679,58680,58680,58681,58681,58682,58682, +58683,58683,58684,58684,58685,58685,58686,58686,58687,58687,58688,58688,58689, +58689,58690,58690,58691,58691,58692,58692,58693,58694,58694,58695,58695,58696, +58696,58697,58697,58698,58698,58699,58699,58700,58700,58701,58701,58702,58702, +58703,58703,58704,58704,58705,58705,58706,58706,58707,58707,58708,58708,58709, +58709,58710,58710,58711,58711,58712,58712,58713,58713,58714,58714,58715,58715, +58716,58716,58717,58717,58718,58718,58719,58719,58720,58720,58721,58721,58722, +58722,58723,58724,58724,58725,58725,58726,58726,58727,58727,58728,58728,58729, +58729,58730,58730,58731,58731,58732,58732,58733,58733,58734,58734,58735,58735, +58736,58736,58737,58737,58738,58738,58739,58739,58740,58740,58741,58741,58742, +58742,58743,58743,58744,58744,58745,58745,58746,58746,58747,58747,58748,58748, +58749,58749,58750,58750,58751,58751,58752,58752,58753,58753,58754,58755,58755, +58756,58756,58757,58757,58758,58758,58759,58759,58760,58760,58761,58761,58762, +58762,58763,58763,58764,58764,58765,58765,58766,58766,58767,58767,58768,58768, +58769,58769,58770,58770,58771,58771,58772,58772,58773,58773,58774,58774,58775, +58775,58776,58776,58777,58777,58778,58778,58779,58779,58780,58780,58781,58781, +58782,58782,58783,58783,58784,58784,58785,58785,58786,58786,58787,58788,58788, +58789,58789,58790,58790,58791,58791,58792,58792,58793,58793,58794,58794,58795, +58795,58796,58796,58797,58797,58798,58798,58799,58799,58800,58800,58801,58801, +58802,58802,58803,58803,58804,58804,58805,58805,58806,58806,58807,58807,58808, +58808,58809,58809,58810,58810,58811,58811,58812,58812,58813,58813,58814,58814, +58815,58815,58816,58816,58817,58817,58818,58818,58819,58819,58820,58820,58821, +58821,58822,58823,58823,58824,58824,58825,58825,58826,58826,58827,58827,58828, +58828,58829,58829,58830,58830,58831,58831,58832,58832,58833,58833,58834,58834, +58835,58835,58836,58836,58837,58837,58838,58838,58839,58839,58840,58840,58841, +58841,58842,58842,58843,58843,58844,58844,58845,58845,58846,58846,58847,58847, +58848,58848,58849,58849,58850,58850,58851,58851,58852,58852,58853,58853,58854, +58854,58855,58855,58856,58856,58857,58857,58858,58859,58859,58860,58860,58861, +58861,58862,58862,58863,58863,58864,58864,58865,58865,58866,58866,58867,58867, +58868,58868,58869,58869,58870,58870,58871,58871,58872,58872,58873,58873,58874, +58874,58875,58875,58876,58876,58877,58877,58878,58878,58879,58879,58880,58880, +58881,58881,58882,58882,58883,58883,58884,58884,58885,58885,58886,58886,58887, +58887,58888,58888,58889,58889,58890,58890,58891,58891,58892,58892,58893,58893, +58894,58894,58895,58895,58896,58896,58897,58898,58898,58899,58899,58900,58900, +58901,58901,58902,58902,58903,58903,58904,58904,58905,58905,58906,58906,58907, +58907,58908,58908,58909,58909,58910,58910,58911,58911,58912,58912,58913,58913, +58914,58914,58915,58915,58916,58916,58917,58917,58918,58918,58919,58919,58920, +58920,58921,58921,58922,58922,58923,58923,58924,58924,58925,58925,58926,58926, +58927,58927,58928,58928,58929,58929,58930,58930,58931,58931,58932,58932,58933, +58933,58934,58934,58935,58935,58936,58936,58937,58937,58938,58938,58939,58940, +58940,58941,58941,58942,58942,58943,58943,58944,58944,58945,58945,58946,58946, +58947,58947,58948,58948,58949,58949,58950,58950,58951,58951,58952,58952,58953, +58953,58954,58954,58955,58955,58956,58956,58957,58957,58958,58958,58959,58959, +58960,58960,58961,58961,58962,58962,58963,58963,58964,58964,58965,58965,58966, +58966,58967,58967,58968,58968,58969,58969,58970,58970,58971,58971,58972,58972, +58973,58973,58974,58974,58975,58975,58976,58976,58977,58977,58978,58978,58979, +58979,58980,58980,58981,58981,58982,58982,58983,58983,58984,58985,58985,58986, +58986,58987,58987,58988,58988,58989,58989,58990,58990,58991,58991,58992,58992, +58993,58993,58994,58994,58995,58995,58996,58996,58997,58997,58998,58998,58999, +58999,59000,59000,59001,59001,59002,59002,59003,59003,59004,59004,59005,59005, +59006,59006,59007,59007,59008,59008,59009,59009,59010,59010,59011,59011,59012, +59012,59013,59013,59014,59014,59015,59015,59016,59016,59017,59017,59018,59018, +59019,59019,59020,59020,59021,59021,59022,59022,59023,59023,59024,59024,59025, +59025,59026,59026,59027,59027,59028,59028,59029,59029,59030,59030,59031,59031, +59032,59032,59033,59033,59034,59035,59035,59036,59036,59037,59037,59038,59038, +59039,59039,59040,59040,59041,59041,59042,59042,59043,59043,59044,59044,59045, +59045,59046,59046,59047,59047,59048,59048,59049,59049,59050,59050,59051,59051, +59052,59052,59053,59053,59054,59054,59055,59055,59056,59056,59057,59057,59058, +59058,59059,59059,59060,59060,59061,59061,59062,59062,59063,59063,59064,59064, +59065,59065,59066,59066,59067,59067,59068,59068,59069,59069,59070,59070,59071, +59071,59072,59072,59073,59073,59074,59074,59075,59075,59076,59076,59077,59077, +59078,59078,59079,59079,59080,59080,59081,59081,59082,59082,59083,59083,59084, +59084,59085,59085,59086,59086,59087,59087,59088,59088,59089,59089,59090,59090, +59091,59092,59092,59093,59093,59094,59094,59095,59095,59096,59096,59097,59097, +59098,59098,59099,59099,59100,59100,59101,59101,59102,59102,59103,59103,59104, +59104,59105,59105,59106,59106,59107,59107,59108,59108,59109,59109,59110,59110, +59111,59111,59112,59112,59113,59113,59114,59114,59115,59115,59116,59116,59117, +59117,59118,59118,59119,59119,59120,59120,59121,59121,59122,59122,59123,59123, +59124,59124,59125,59125,59126,59126,59127,59127,59128,59128,59129,59129,59130, +59130,59131,59131,59132,59132,59133,59133,59134,59134,59135,59135,59136,59136, +59137,59137,59138,59138,59139,59139,59140,59140,59141,59141,59142,59142,59143, +59143,59144,59144,59145,59145,59146,59146,59147,59147,59148,59148,59149,59149, +59150,59150,59151,59151,59152,59152,59153,59153,59154,59154,59155,59155,59156, +59156,59157,59157,59158,59158,59159,59160,59160,59161,59161,59162,59162,59163, +59163,59164,59164,59165,59165,59166,59166,59167,59167,59168,59168,59169,59169, +59170,59170,59171,59171,59172,59172,59173,59173,59174,59174,59175,59175,59176, +59176,59177,59177,59178,59178,59179,59179,59180,59180,59181,59181,59182,59182, +59183,59183,59184,59184,59185,59185,59186,59186,59187,59187,59188,59188,59189, +59189,59190,59190,59191,59191,59192,59192,59193,59193,59194,59194,59195,59195, +59196,59196,59197,59197,59198,59198,59199,59199,59200,59200,59201,59201,59202, +59202,59203,59203,59204,59204,59205,59205,59206,59206,59207,59207,59208,59208, +59209,59209,59210,59210,59211,59211,59212,59212,59213,59213,59214,59214,59215, +59215,59216,59216,59217,59217,59218,59218,59219,59219,59220,59220,59221,59221, +59222,59222,59223,59223,59224,59224,59225,59225,59226,59226,59227,59227,59228, +59228,59229,59229,59230,59230,59231,59231,59232,59232,59233,59233,59234,59234, +59235,59235,59236,59236,59237,59237,59238,59238,59239,59239,59240,59240,59241, +59241,59242,59242,59243,59243,59244,59244,59245,59245,59246,59247,59247,59248, +59248,59249,59249,59250,59250,59251,59251,59252,59252,59253,59253,59254,59254, +59255,59255,59256,59256,59257,59257,59258,59258,59259,59259,59260,59260,59261, +59261,59262,59262,59263,59263,59264,59264,59265,59265,59266,59266,59267,59267, +59268,59268,59269,59269,59270,59270,59271,59271,59272,59272,59273,59273,59274, +59274,59275,59275,59276,59276,59277,59277,59278,59278,59279,59279,59280,59280, +59281,59281,59282,59282,59283,59283,59284,59284,59285,59285,59286,59286,59287, +59287,59288,59288,59289,59289,59290,59290,59291,59291,59292,59292,59293,59293, +59294,59294,59295,59295,59296,59296,59297,59297,59298,59298,59299,59299,59300, +59300,59301,59301,59302,59302,59303,59303,59304,59304,59305,59305,59306,59306, +59307,59307,59308,59308,59309,59309,59310,59310,59311,59311,59312,59312,59313, +59313,59314,59314,59315,59315,59316,59316,59317,59317,59318,59318,59319,59319, +59320,59320,59321,59321,59322,59322,59323,59323,59324,59324,59325,59325,59326, +59326,59327,59327,59328,59328,59329,59329,59330,59330,59331,59331,59332,59332, +59333,59333,59334,59334,59335,59335,59336,59336,59337,59337,59338,59338,59339, +59339,59340,59340,59341,59341,59342,59342,59343,59343,59344,59344,59345,59345, +59346,59346,59347,59347,59348,59348,59349,59349,59350,59350,59351,59351,59352, +59352,59353,59353,59354,59354,59355,59355,59356,59356,59357,59357,59358,59358, +59359,59359,59360,59360,59361,59361,59362,59362,59363,59363,59364,59364,59365, +59365,59366,59366,59367,59367,59368,59368,59369,59369,59370,59370,59371,59371, +59372,59372,59373,59373,59374,59374,59375,59375,59376,59376,59377,59377,59378, +59378,59379,59379,59380,59380,59381,59381,59382,59382,59383,59383,59384,59384, +59385,59385,59386,59386,59387,59387,59388,59388,59389,59389,59390,59390,59391, +59391,59392,59392,59393,59393,59394,59394,59395,59395,59396,59396,59397,59397, +59398,59398,59399,59399,59400,59400,59401,59401,59402,59402,59403,59403,59404, +59404,59405,59405,59406,59406,59407,59407,59408,59408,59409,59409,59410,59410, +59411,59411,59412,59412,59413,59413,59414,59414,59415,59415,59416,59416,59417, +59417,59418,59418,59419,59419,59420,59420,59421,59421,59422,59422,59423,59423, +59424,59424,59425,59425,59426,59426,59427,59427,59428,59428,59429,59429,59430, +59430,59431,59431,59432,59432,59433,59433,59434,59434,59435,59435,59436,59436, +59437,59437,59438,59438,59439,59439,59440,59440,59441,59441,59442,59442,59443, +59443,59444,59444,59445,59445,59446,59446,59447,59447,59448,59448,59449,59449, +59450,59450,59451,59452,59452,59453,59453,59454,59454,59455,59455,59456,59456, +59457,59457,59458,59458,59459,59459,59460,59460,59461,59461,59462,59462,59463, +59463,59464,59464,59465,59465,59466,59466,59467,59467,59467,59468,59468,59469, +59469,59470,59470,59471,59471,59472,59472,59473,59473,59474,59474,59475,59475, +59476,59476,59477,59477,59478,59478,59479,59479,59480,59480,59481,59481,59482, +59482,59483,59483,59484,59484,59485,59485,59486,59486,59487,59487,59488,59488, +59489,59489,59490,59490,59491,59491,59492,59492,59493,59493,59494,59494,59495, +59495,59496,59496,59497,59497,59498,59498,59499,59499,59500,59500,59501,59501, +59502,59502,59503,59503,59504,59504,59505,59505,59506,59506,59507,59507,59508, +59508,59509,59509,59510,59510,59511,59511,59512,59512,59513,59513,59514,59514, +59515,59515,59516,59516,59517,59517,59518,59518,59519,59519,59520,59520,59521, +59521,59522,59522,59523,59523,59524,59524,59525,59525,59526,59526,59527,59527, +59528,59528,59529,59529,59530,59530,59531,59531,59532,59532,59533,59533,59534, +59534,59535,59535,59536,59536,59537,59537,59538,59538,59539,59539,59540,59540, +59541,59541,59542,59542,59543,59543,59544,59544,59545,59545,59546,59546,59547, +59547,59548,59548,59549,59549,59550,59550,59551,59551,59552,59552,59553,59553, +59554,59554,59555,59555,59556,59556,59557,59557,59558,59558,59559,59559,59560, +59560,59561,59561,59562,59562,59563,59563,59564,59564,59565,59565,59566,59566, +59567,59567,59568,59568,59569,59569,59570,59570,59571,59571,59572,59572,59573, +59573,59574,59574,59575,59575,59576,59576,59577,59577,59578,59578,59579,59579, +59580,59580,59581,59581,59582,59582,59583,59583,59584,59584,59585,59585,59586, +59586,59587,59587,59588,59588,59589,59589,59590,59590,59591,59591,59592,59592, +59593,59593,59594,59594,59595,59595,59596,59596,59597,59597,59598,59598,59599, +59599,59600,59600,59601,59601,59602,59602,59603,59603,59604,59604,59605,59605, +59606,59606,59607,59607,59608,59608,59609,59609,59610,59610,59611,59611,59612, +59612,59613,59613,59614,59614,59615,59615,59616,59616,59617,59617,59618,59618, +59619,59619,59620,59620,59621,59621,59622,59622,59623,59623,59624,59624,59625, +59625,59626,59626,59627,59627,59628,59628,59629,59629,59630,59630,59631,59631, +59632,59632,59633,59633,59634,59634,59635,59635,59636,59636,59637,59637,59638, +59638,59639,59639,59640,59640,59641,59641,59642,59642,59643,59643,59644,59644, +59645,59645,59646,59646,59647,59647,59648,59648,59649,59649,59650,59650,59651, +59651,59652,59652,59653,59653,59654,59654,59655,59655,59656,59656,59657,59657, +59658,59658,59659,59659,59660,59660,59661,59661,59662,59662,59663,59663,59664, +59664,59665,59665,59666,59666,59667,59667,59668,59668,59669,59669,59670,59670, +59671,59671,59671,59672,59672,59673,59673,59674,59674,59675,59675,59676,59676, +59677,59677,59678,59678,59679,59679,59680,59680,59681,59681,59682,59682,59683, +59683,59684,59684,59685,59685,59686,59686,59687,59687,59688,59688,59689,59689, +59690,59690,59691,59691,59692,59692,59693,59693,59694,59694,59695,59695,59696, +59696,59697,59697,59698,59698,59699,59699,59700,59700,59701,59701,59702,59702, +59703,59703,59704,59704,59705,59705,59706,59706,59707,59707,59708,59708,59709, +59709,59710,59710,59711,59711,59712,59712,59713,59713,59714,59714,59715,59715, +59716,59716,59717,59717,59718,59718,59719,59719,59720,59720,59721,59721,59722, +59722,59723,59723,59724,59724,59725,59725,59726,59726,59727,59727,59728,59728, +59729,59729,59730,59730,59731,59731,59732,59732,59733,59733,59734,59734,59735, +59735,59736,59736,59737,59737,59738,59738,59739,59739,59740,59740,59741,59741, +59742,59742,59743,59743,59744,59744,59745,59745,59746,59746,59747,59747,59748, +59748,59749,59749,59750,59750,59751,59751,59752,59752,59753,59753,59754,59754, +59755,59755,59756,59756,59757,59757,59758,59758,59759,59759,59759,59760,59760, +59761,59761,59762,59762,59763,59763,59764,59764,59765,59765,59766,59766,59767, +59767,59768,59768,59769,59769,59770,59770,59771,59771,59772,59772,59773,59773, +59774,59774,59775,59775,59776,59776,59777,59777,59778,59778,59779,59779,59780, +59780,59781,59781,59782,59782,59783,59783,59784,59784,59785,59785,59786,59786, +59787,59787,59788,59788,59789,59789,59790,59790,59791,59791,59792,59792,59793, +59793,59794,59794,59795,59795,59796,59796,59797,59797,59798,59798,59799,59799, +59800,59800,59801,59801,59802,59802,59803,59803,59804,59804,59805,59805,59806, +59806,59807,59807,59808,59808,59809,59809,59810,59810,59811,59811,59812,59812, +59813,59813,59814,59814,59815,59815,59816,59816,59817,59817,59818,59818,59819, +59819,59820,59820,59821,59821,59822,59822,59823,59823,59824,59824,59825,59825, +59826,59826,59826,59827,59827,59828,59828,59829,59829,59830,59830,59831,59831, +59832,59832,59833,59833,59834,59834,59835,59835,59836,59836,59837,59837,59838, +59838,59839,59839,59840,59840,59841,59841,59842,59842,59843,59843,59844,59844, +59845,59845,59846,59846,59847,59847,59848,59848,59849,59849,59850,59850,59851, +59851,59852,59852,59853,59853,59854,59854,59855,59855,59856,59856,59857,59857, +59858,59858,59859,59859,59860,59860,59861,59861,59862,59862,59863,59863,59864, +59864,59865,59865,59866,59866,59867,59867,59868,59868,59869,59869,59870,59870, +59871,59871,59872,59872,59873,59873,59874,59874,59875,59875,59876,59876,59877, +59877,59878,59878,59879,59879,59880,59880,59881,59881,59882,59882,59883,59883, +59883,59884,59884,59885,59885,59886,59886,59887,59887,59888,59888,59889,59889, +59890,59890,59891,59891,59892,59892,59893,59893,59894,59894,59895,59895,59896, +59896,59897,59897,59898,59898,59899,59899,59900,59900,59901,59901,59902,59902, +59903,59903,59904,59904,59905,59905,59906,59906,59907,59907,59908,59908,59909, +59909,59910,59910,59911,59911,59912,59912,59913,59913,59914,59914,59915,59915, +59916,59916,59917,59917,59918,59918,59919,59919,59920,59920,59921,59921,59922, +59922,59923,59923,59924,59924,59925,59925,59926,59926,59927,59927,59928,59928, +59929,59929,59930,59930,59931,59931,59932,59932,59933,59933,59933,59934,59934, +59935,59935,59936,59936,59937,59937,59938,59938,59939,59939,59940,59940,59941, +59941,59942,59942,59943,59943,59944,59944,59945,59945,59946,59946,59947,59947, +59948,59948,59949,59949,59950,59950,59951,59951,59952,59952,59953,59953,59954, +59954,59955,59955,59956,59956,59957,59957,59958,59958,59959,59959,59960,59960, +59961,59961,59962,59962,59963,59963,59964,59964,59965,59965,59966,59966,59967, +59967,59968,59968,59969,59969,59970,59970,59971,59971,59972,59972,59973,59973, +59974,59974,59975,59975,59976,59976,59977,59977,59978,59978,59978,59979,59979, +59980,59980,59981,59981,59982,59982,59983,59983,59984,59984,59985,59985,59986, +59986,59987,59987,59988,59988,59989,59989,59990,59990,59991,59991,59992,59992, +59993,59993,59994,59994,59995,59995,59996,59996,59997,59997,59998,59998,59999, +59999,60000,60000,60001,60001,60002,60002,60003,60003,60004,60004,60005,60005, +60006,60006,60007,60007,60008,60008,60009,60009,60010,60010,60011,60011,60012, +60012,60013,60013,60014,60014,60015,60015,60016,60016,60017,60017,60018,60018, +60019,60019,60020,60020,60020,60021,60021,60022,60022,60023,60023,60024,60024, +60025,60025,60026,60026,60027,60027,60028,60028,60029,60029,60030,60030,60031, +60031,60032,60032,60033,60033,60034,60034,60035,60035,60036,60036,60037,60037, +60038,60038,60039,60039,60040,60040,60041,60041,60042,60042,60043,60043,60044, +60044,60045,60045,60046,60046,60047,60047,60048,60048,60049,60049,60050,60050, +60051,60051,60052,60052,60053,60053,60054,60054,60055,60055,60056,60056,60057, +60057,60058,60058,60059,60059,60059,60060,60060,60061,60061,60062,60062,60063, +60063,60064,60064,60065,60065,60066,60066,60067,60067,60068,60068,60069,60069, +60070,60070,60071,60071,60072,60072,60073,60073,60074,60074,60075,60075,60076, +60076,60077,60077,60078,60078,60079,60079,60080,60080,60081,60081,60082,60082, +60083,60083,60084,60084,60085,60085,60086,60086,60087,60087,60088,60088,60089, +60089,60090,60090,60091,60091,60092,60092,60093,60093,60094,60094,60095,60095, +60095,60096,60096,60097,60097,60098,60098,60099,60099,60100,60100,60101,60101, +60102,60102,60103,60103,60104,60104,60105,60105,60106,60106,60107,60107,60108, +60108,60109,60109,60110,60110,60111,60111,60112,60112,60113,60113,60114,60114, +60115,60115,60116,60116,60117,60117,60118,60118,60119,60119,60120,60120,60121, +60121,60122,60122,60123,60123,60124,60124,60125,60125,60126,60126,60127,60127, +60128,60128,60129,60129,60129,60130,60130,60131,60131,60132,60132,60133,60133, +60134,60134,60135,60135,60136,60136,60137,60137,60138,60138,60139,60139,60140, +60140,60141,60141,60142,60142,60143,60143,60144,60144,60145,60145,60146,60146, +60147,60147,60148,60148,60149,60149,60150,60150,60151,60151,60152,60152,60153, +60153,60154,60154,60155,60155,60156,60156,60157,60157,60158,60158,60159,60159, +60160,60160,60161,60161,60162,60162,60162,60163,60163,60164,60164,60165,60165, +60166,60166,60167,60167,60168,60168,60169,60169,60170,60170,60171,60171,60172, +60172,60173,60173,60174,60174,60175,60175,60176,60176,60177,60177,60178,60178, +60179,60179,60180,60180,60181,60181,60182,60182,60183,60183,60184,60184,60185, +60185,60186,60186,60187,60187,60188,60188,60189,60189,60190,60190,60191,60191, +60192,60192,60193,60193,60193,60194,60194,60195,60195,60196,60196,60197,60197, +60198,60198,60199,60199,60200,60200,60201,60201,60202,60202,60203,60203,60204, +60204,60205,60205,60206,60206,60207,60207,60208,60208,60209,60209,60210,60210, +60211,60211,60212,60212,60213,60213,60214,60214,60215,60215,60216,60216,60217, +60217,60218,60218,60219,60219,60220,60220,60221,60221,60222,60222,60223,60223, +60223,60224,60224,60225,60225,60226,60226,60227,60227,60228,60228,60229,60229, +60230,60230,60231,60231,60232,60232,60233,60233,60234,60234,60235,60235,60236, +60236,60237,60237,60238,60238,60239,60239,60240,60240,60241,60241,60242,60242, +60243,60243,60244,60244,60245,60245,60246,60246,60247,60247,60248,60248,60249, +60249,60250,60250,60251,60251,60252,60252,60252,60253,60253,60254,60254,60255, +60255,60256,60256,60257,60257,60258,60258,60259,60259,60260,60260,60261,60261, +60262,60262,60263,60263,60264,60264,60265,60265,60266,60266,60267,60267,60268, +60268,60269,60269,60270,60270,60271,60271,60272,60272,60273,60273,60274,60274, +60275,60275,60276,60276,60277,60277,60278,60278,60279,60279,60280,60280,60280, +60281,60281,60282,60282,60283,60283,60284,60284,60285,60285,60286,60286,60287, +60287,60288,60288,60289,60289,60290,60290,60291,60291,60292,60292,60293,60293, +60294,60294,60295,60295,60296,60296,60297,60297,60298,60298,60299,60299,60300, +60300,60301,60301,60302,60302,60303,60303,60304,60304,60305,60305,60306,60306, +60307,60307,60307,60308,60308,60309,60309,60310,60310,60311,60311,60312,60312, +60313,60313,60314,60314,60315,60315,60316,60316,60317,60317,60318,60318,60319, +60319,60320,60320,60321,60321,60322,60322,60323,60323,60324,60324,60325,60325, +60326,60326,60327,60327,60328,60328,60329,60329,60330,60330,60331,60331,60332, +60332,60333,60333,60333,60334,60334,60335,60335,60336,60336,60337,60337,60338, +60338,60339,60339,60340,60340,60341,60341,60342,60342,60343,60343,60344,60344, +60345,60345,60346,60346,60347,60347,60348,60348,60349,60349,60350,60350,60351, +60351,60352,60352,60353,60353,60354,60354,60355,60355,60356,60356,60357,60357, +60358,60358,60358,60359,60359,60360,60360,60361,60361,60362,60362,60363,60363, +60364,60364,60365,60365,60366,60366,60367,60367,60368,60368,60369,60369,60370, +60370,60371,60371,60372,60372,60373,60373,60374,60374,60375,60375,60376,60376, +60377,60377,60378,60378,60379,60379,60380,60380,60381,60381,60382,60382,60383, +60383,60383,60384,60384,60385,60385,60386,60386,60387,60387,60388,60388,60389, +60389,60390,60390,60391,60391,60392,60392,60393,60393,60394,60394,60395,60395, +60396,60396,60397,60397,60398,60398,60399,60399,60400,60400,60401,60401,60402, +60402,60403,60403,60404,60404,60405,60405,60406,60406,60407,60407,60407,60408, +60408,60409,60409,60410,60410,60411,60411,60412,60412,60413,60413,60414,60414, +60415,60415,60416,60416,60417,60417,60418,60418,60419,60419,60420,60420,60421, +60421,60422,60422,60423,60423,60424,60424,60425,60425,60426,60426,60427,60427, +60428,60428,60429,60429,60430,60430,60430,60431,60431,60432,60432,60433,60433, +60434,60434,60435,60435,60436,60436,60437,60437,60438,60438,60439,60439,60440, +60440,60441,60441,60442,60442,60443,60443,60444,60444,60445,60445,60446,60446, +60447,60447,60448,60448,60449,60449,60450,60450,60451,60451,60452,60452,60453, +60453,60453,60454,60454,60455,60455,60456,60456,60457,60457,60458,60458,60459, +60459,60460,60460,60461,60461,60462,60462,60463,60463,60464,60464,60465,60465, +60466,60466,60467,60467,60468,60468,60469,60469,60470,60470,60471,60471,60472, +60472,60473,60473,60474,60474,60475,60475,60476,60476,60476,60477,60477,60478, +60478,60479,60479,60480,60480,60481,60481,60482,60482,60483,60483,60484,60484, +60485,60485,60486,60486,60487,60487,60488,60488,60489,60489,60490,60490,60491, +60491,60492,60492,60493,60493,60494,60494,60495,60495,60496,60496,60497,60497, +60497,60498,60498,60499,60499,60500,60500,60501,60501,60502,60502,60503,60503, +60504,60504,60505,60505,60506,60506,60507,60507,60508,60508,60509,60509,60510, +60510,60511,60511,60512,60512,60513,60513,60514,60514,60515,60515,60516,60516, +60517,60517,60518,60518,60519,60519,60519,60520,60520,60521,60521,60522,60522, +60523,60523,60524,60524,60525,60525,60526,60526,60527,60527,60528,60528,60529, +60529,60530,60530,60531,60531,60532,60532,60533,60533,60534,60534,60535,60535, +60536,60536,60537,60537,60538,60538,60539,60539,60540,60540,60540,60541,60541, +60542,60542,60543,60543,60544,60544,60545,60545,60546,60546,60547,60547,60548, +60548,60549,60549,60550,60550,60551,60551,60552,60552,60553,60553,60554,60554, +60555,60555,60556,60556,60557,60557,60558,60558,60559,60559,60560,60560,60560, +60561,60561,60562,60562,60563,60563,60564,60564,60565,60565,60566,60566,60567, +60567,60568,60568,60569,60569,60570,60570,60571,60571,60572,60572,60573,60573, +60574,60574,60575,60575,60576,60576,60577,60577,60578,60578,60579,60579,60580, +60580,60580,60581,60581,60582,60582,60583,60583,60584,60584,60585,60585,60586, +60586,60587,60587,60588,60588,60589,60589,60590,60590,60591,60591,60592,60592, +60593,60593,60594,60594,60595,60595,60596,60596,60597,60597,60598,60598,60599, +60599,60600,60600,60600,60601,60601,60602,60602,60603,60603,60604,60604,60605, +60605,60606,60606,60607,60607,60608,60608,60609,60609,60610,60610,60611,60611, +60612,60612,60613,60613,60614,60614,60615,60615,60616,60616,60617,60617,60618, +60618,60619,60619,60620,60620,60620,60621,60621,60622,60622,60623,60623,60624, +60624,60625,60625,60626,60626,60627,60627,60628,60628,60629,60629,60630,60630, +60631,60631,60632,60632,60633,60633,60634,60634,60635,60635,60636,60636,60637, +60637,60638,60638,60639,60639,60639,60640,60640,60641,60641,60642,60642,60643, +60643,60644,60644,60645,60645,60646,60646,60647,60647,60648,60648,60649,60649, +60650,60650,60651,60651,60652,60652,60653,60653,60654,60654,60655,60655,60656, +60656,60657,60657,60658,60658,60658,60659,60659,60660,60660,60661,60661,60662, +60662,60663,60663,60664,60664,60665,60665,60666,60666,60667,60667,60668,60668, +60669,60669,60670,60670,60671,60671,60672,60672,60673,60673,60674,60674,60675, +60675,60676,60676,60676,60677,60677,60678,60678,60679,60679,60680,60680,60681, +60681,60682,60682,60683,60683,60684,60684,60685,60685,60686,60686,60687,60687, +60688,60688,60689,60689,60690,60690,60691,60691,60692,60692,60693,60693,60694, +60694,60695,60695,60695,60696,60696,60697,60697,60698,60698,60699,60699,60700, +60700,60701,60701,60702,60702,60703,60703,60704,60704,60705,60705,60706,60706, +60707,60707,60708,60708,60709,60709,60710,60710,60711,60711,60712,60712,60713, +60713,60713,60714,60714,60715,60715,60716,60716,60717,60717,60718,60718,60719, +60719,60720,60720,60721,60721,60722,60722,60723,60723,60724,60724,60725,60725, +60726,60726,60727,60727,60728,60728,60729,60729,60730,60730,60730,60731,60731, +60732,60732,60733,60733,60734,60734,60735,60735,60736,60736,60737,60737,60738, +60738,60739,60739,60740,60740,60741,60741,60742,60742,60743,60743,60744,60744, +60745,60745,60746,60746,60747,60747,60748,60748,60748,60749,60749,60750,60750, +60751,60751,60752,60752,60753,60753,60754,60754,60755,60755,60756,60756,60757, +60757,60758,60758,60759,60759,60760,60760,60761,60761,60762,60762,60763,60763, +60764,60764,60765,60765,60765,60766,60766,60767,60767,60768,60768,60769,60769, +60770,60770,60771,60771,60772,60772,60773,60773,60774,60774,60775,60775,60776, +60776,60777,60777,60778,60778,60779,60779,60780,60780,60781,60781,60782,60782, +60782,60783,60783,60784,60784,60785,60785,60786,60786,60787,60787,60788,60788, +60789,60789,60790,60790,60791,60791,60792,60792,60793,60793,60794,60794,60795, +60795,60796,60796,60797,60797,60798,60798,60799,60799,60799,60800,60800,60801, +60801,60802,60802,60803,60803,60804,60804,60805,60805,60806,60806,60807,60807, +60808,60808,60809,60809,60810,60810,60811,60811,60812,60812,60813,60813,60814, +60814,60815,60815,60816,60816,60816,60817,60817,60818,60818,60819,60819,60820, +60820,60821,60821,60822,60822,60823,60823,60824,60824,60825,60825,60826,60826, +60827,60827,60828,60828,60829,60829,60830,60830,60831,60831,60832,60832,60832, +60833,60833,60834,60834,60835,60835,60836,60836,60837,60837,60838,60838,60839, +60839,60840,60840,60841,60841,60842,60842,60843,60843,60844,60844,60845,60845, +60846,60846,60847,60847,60848,60848,60848,60849,60849,60850,60850,60851,60851, +60852,60852,60853,60853,60854,60854,60855,60855,60856,60856,60857,60857,60858, +60858,60859,60859,60860,60860,60861,60861,60862,60862,60863,60863,60864,60864, +60864,60865,60865,60866,60866,60867,60867,60868,60868,60869,60869,60870,60870, +60871,60871,60872,60872,60873,60873,60874,60874,60875,60875,60876,60876,60877, +60877,60878,60878,60879,60879,60880,60880,60880,60881,60881,60882,60882,60883, +60883,60884,60884,60885,60885,60886,60886,60887,60887,60888,60888,60889,60889, +60890,60890,60891,60891,60892,60892,60893,60893,60894,60894,60895,60895,60896, +60896,60896,60897,60897,60898,60898,60899,60899,60900,60900,60901,60901,60902, +60902,60903,60903,60904,60904,60905,60905,60906,60906,60907,60907,60908,60908, +60909,60909,60910,60910,60911,60911,60911,60912,60912,60913,60913,60914,60914, +60915,60915,60916,60916,60917,60917,60918,60918,60919,60919,60920,60920,60921, +60921,60922,60922,60923,60923,60924,60924,60925,60925,60926,60926,60927,60927, +60927,60928,60928,60929,60929,60930,60930,60931,60931,60932,60932,60933,60933, +60934,60934,60935,60935,60936,60936,60937,60937,60938,60938,60939,60939,60940, +60940,60941,60941,60942,60942,60942,60943,60943,60944,60944,60945,60945,60946, +60946,60947,60947,60948,60948,60949,60949,60950,60950,60951,60951,60952,60952, +60953,60953,60954,60954,60955,60955,60956,60956,60957,60957,60957,60958,60958, +60959,60959,60960,60960,60961,60961,60962,60962,60963,60963,60964,60964,60965, +60965,60966,60966,60967,60967,60968,60968,60969,60969,60970,60970,60971,60971, +60972,60972,60972,60973,60973,60974,60974,60975,60975,60976,60976,60977,60977, +60978,60978,60979,60979,60980,60980,60981,60981,60982,60982,60983,60983,60984, +60984,60985,60985,60986,60986,60987,60987,60987,60988,60988,60989,60989,60990, +60990,60991,60991,60992,60992,60993,60993,60994,60994,60995,60995,60996,60996, +60997,60997,60998,60998,60999,60999,61000,61000,61001,61001,61001,61002,61002, +61003,61003,61004,61004,61005,61005,61006,61006,61007,61007,61008,61008,61009, +61009,61010,61010,61011,61011,61012,61012,61013,61013,61014,61014,61015,61015, +61016,61016,61016,61017,61017,61018,61018,61019,61019,61020,61020,61021,61021, +61022,61022,61023,61023,61024,61024,61025,61025,61026,61026,61027,61027,61028, +61028,61029,61029,61030,61030,61030,61031,61031,61032,61032,61033,61033,61034, +61034,61035,61035,61036,61036,61037,61037,61038,61038,61039,61039,61040,61040, +61041,61041,61042,61042,61043,61043,61044,61044,61044,61045,61045,61046,61046, +61047,61047,61048,61048,61049,61049,61050,61050,61051,61051,61052,61052,61053, +61053,61054,61054,61055,61055,61056,61056,61057,61057,61058,61058,61058,61059, +61059,61060,61060,61061,61061,61062,61062,61063,61063,61064,61064,61065,61065, +61066,61066,61067,61067,61068,61068,61069,61069,61070,61070,61071,61071,61072, +61072,61072,61073,61073,61074,61074,61075,61075,61076,61076,61077,61077,61078, +61078,61079,61079,61080,61080,61081,61081,61082,61082,61083,61083,61084,61084, +61085,61085,61086,61086,61086,61087,61087,61088,61088,61089,61089,61090,61090, +61091,61091,61092,61092,61093,61093,61094,61094,61095,61095,61096,61096,61097, +61097,61098,61098,61099,61099,61100,61100,61100,61101,61101,61102,61102,61103, +61103,61104,61104,61105,61105,61106,61106,61107,61107,61108,61108,61109,61109, +61110,61110,61111,61111,61112,61112,61113,61113,61113,61114,61114,61115,61115, +61116,61116,61117,61117,61118,61118,61119,61119,61120,61120,61121,61121,61122, +61122,61123,61123,61124,61124,61125,61125,61126,61126,61127,61127,61127,61128, +61128,61129,61129,61130,61130,61131,61131,61132,61132,61133,61133,61134,61134, +61135,61135,61136,61136,61137,61137,61138,61138,61139,61139,61140,61140,61140, +61141,61141,61142,61142,61143,61143,61144,61144,61145,61145,61146,61146,61147, +61147,61148,61148,61149,61149,61150,61150,61151,61151,61152,61152,61153,61153, +61154,61154,61154,61155,61155,61156,61156,61157,61157,61158,61158,61159,61159, +61160,61160,61161,61161,61162,61162,61163,61163,61164,61164,61165,61165,61166, +61166,61167,61167,61167,61168,61168,61169,61169,61170,61170,61171,61171,61172, +61172,61173,61173,61174,61174,61175,61175,61176,61176,61177,61177,61178,61178, +61179,61179,61180,61180,61180,61181,61181,61182,61182,61183,61183,61184,61184, +61185,61185,61186,61186,61187,61187,61188,61188,61189,61189,61190,61190,61191, +61191,61192,61192,61193,61193,61193,61194,61194,61195,61195,61196,61196,61197, +61197,61198,61198,61199,61199,61200,61200,61201,61201,61202,61202,61203,61203, +61204,61204,61205,61205,61206,61206,61206,61207,61207,61208,61208,61209,61209, +61210,61210,61211,61211,61212,61212,61213,61213,61214,61214,61215,61215,61216, +61216,61217,61217,61218,61218,61218,61219,61219,61220,61220,61221,61221,61222, +61222,61223,61223,61224,61224,61225,61225,61226,61226,61227,61227,61228,61228, +61229,61229,61230,61230,61231,61231,61231,61232,61232,61233,61233,61234,61234, +61235,61235,61236,61236,61237,61237,61238,61238,61239,61239,61240,61240,61241, +61241,61242,61242,61243,61243,61244,61244,61244,61245,61245,61246,61246,61247, +61247,61248,61248,61249,61249,61250,61250,61251,61251,61252,61252,61253,61253, +61254,61254,61255,61255,61256,61256,61256,61257,61257,61258,61258,61259,61259, +61260,61260,61261,61261,61262,61262,61263,61263,61264,61264,61265,61265,61266, +61266,61267,61267,61268,61268,61269,61269,61269,61270,61270,61271,61271,61272, +61272,61273,61273,61274,61274,61275,61275,61276,61276,61277,61277,61278,61278, +61279,61279,61280,61280,61281,61281,61281,61282,61282,61283,61283,61284,61284, +61285,61285,61286,61286,61287,61287,61288,61288,61289,61289,61290,61290,61291, +61291,61292,61292,61293,61293,61293,61294,61294,61295,61295,61296,61296,61297, +61297,61298,61298,61299,61299,61300,61300,61301,61301,61302,61302,61303,61303, +61304,61304,61305,61305,61305,61306,61306,61307,61307,61308,61308,61309,61309, +61310,61310,61311,61311,61312,61312,61313,61313,61314,61314,61315,61315,61316, +61316,61317,61317,61317,61318,61318,61319,61319,61320,61320,61321,61321,61322, +61322,61323,61323,61324,61324,61325,61325,61326,61326,61327,61327,61328,61328, +61329,61329,61329,61330,61330,61331,61331,61332,61332,61333,61333,61334,61334, +61335,61335,61336,61336,61337,61337,61338,61338,61339,61339,61340,61340,61341, +61341,61341,61342,61342,61343,61343,61344,61344,61345,61345,61346,61346,61347, +61347,61348,61348,61349,61349,61350,61350,61351,61351,61352,61352,61353,61353, +61353,61354,61354,61355,61355,61356,61356,61357,61357,61358,61358,61359,61359, +61360,61360,61361,61361,61362,61362,61363,61363,61364,61364,61365,61365,61365, +61366,61366,61367,61367,61368,61368,61369,61369,61370,61370,61371,61371,61372, +61372,61373,61373,61374,61374,61375,61375,61376,61376,61377,61377,61377,61378, +61378,61379,61379,61380,61380,61381,61381,61382,61382,61383,61383,61384,61384, +61385,61385,61386,61386,61387,61387,61388,61388,61388,61389,61389,61390,61390, +61391,61391,61392,61392,61393,61393,61394,61394,61395,61395,61396,61396,61397, +61397,61398,61398,61399,61399,61400,61400,61400,61401,61401,61402,61402,61403, +61403,61404,61404,61405,61405,61406,61406,61407,61407,61408,61408,61409,61409, +61410,61410,61411,61411,61411,61412,61412,61413,61413,61414,61414,61415,61415, +61416,61416,61417,61417,61418,61418,61419,61419,61420,61420,61421,61421,61422, +61422,61423,61423,61423,61424,61424,61425,61425,61426,61426,61427,61427,61428, +61428,61429,61429,61430,61430,61431,61431,61432,61432,61433,61433,61434,61434, +61434,61435,61435,61436,61436,61437,61437,61438,61438,61439,61439,61440,61440, +61441,61441,61442,61442,61443,61443,61444,61444,61445,61445,61445,61446,61446, +61447,61447,61448,61448,61449,61449,61450,61450,61451,61451,61452,61452,61453, +61453,61454,61454,61455,61455,61456,61456,61457,61457,61457,61458,61458,61459, +61459,61460,61460,61461,61461,61462,61462,61463,61463,61464,61464,61465,61465, +61466,61466,61467,61467,61468,61468,61468,61469,61469,61470,61470,61471,61471, +61472,61472,61473,61473,61474,61474,61475,61475,61476,61476,61477,61477,61478, +61478,61479,61479,61479,61480,61480,61481,61481,61482,61482,61483,61483,61484, +61484,61485,61485,61486,61486,61487,61487,61488,61488,61489,61489,61490,61490, +61490,61491,61491,61492,61492,61493,61493,61494,61494,61495,61495,61496,61496, +61497,61497,61498,61498,61499,61499,61500,61500,61501,61501,61501,61502,61502, +61503,61503,61504,61504,61505,61505,61506,61506,61507,61507,61508,61508,61509, +61509,61510,61510,61511,61511,61512,61512,61512,61513,61513,61514,61514,61515, +61515,61516,61516,61517,61517,61518,61518,61519,61519,61520,61520,61521,61521, +61522,61522,61523,61523,61523,61524,61524,61525,61525,61526,61526,61527,61527, +61528,61528,61529,61529,61530,61530,61531,61531,61532,61532,61533,61533,61534, +61534,61534,61535,61535,61536,61536,61537,61537,61538,61538,61539,61539,61540, +61540,61541,61541,61542,61542,61543,61543,61544,61544,61544,61545,61545,61546, +61546,61547,61547,61548,61548,61549,61549,61550,61550,61551,61551,61552,61552, +61553,61553,61554,61554,61555,61555,61555,61556,61556,61557,61557,61558,61558, +61559,61559,61560,61560,61561,61561,61562,61562,61563,61563,61564,61564,61565, +61565,61566,61566,61566,61567,61567,61568,61568,61569,61569,61570,61570,61571, +61571,61572,61572,61573,61573,61574,61574,61575,61575,61576,61576,61576,61577, +61577,61578,61578,61579,61579,61580,61580,61581,61581,61582,61582,61583,61583, +61584,61584,61585,61585,61586,61586,61587,61587,61587,61588,61588,61589,61589, +61590,61590,61591,61591,61592,61592,61593,61593,61594,61594,61595,61595,61596, +61596,61597,61597,61597,61598,61598,61599,61599,61600,61600,61601,61601,61602, +61602,61603,61603,61604,61604,61605,61605,61606,61606,61607,61607,61608,61608, +61608,61609,61609,61610,61610,61611,61611,61612,61612,61613,61613,61614,61614, +61615,61615,61616,61616,61617,61617,61618,61618,61618,61619,61619,61620,61620, +61621,61621,61622,61622,61623,61623,61624,61624,61625,61625,61626,61626,61627, +61627,61628,61628,61628,61629,61629,61630,61630,61631,61631,61632,61632,61633, +61633,61634,61634,61635,61635,61636,61636,61637,61637,61638,61638,61639,61639, +61639,61640,61640,61641,61641,61642,61642,61643,61643,61644,61644,61645,61645, +61646,61646,61647,61647,61648,61648,61649,61649,61649,61650,61650,61651,61651, +61652,61652,61653,61653,61654,61654,61655,61655,61656,61656,61657,61657,61658, +61658,61659,61659,61659,61660,61660,61661,61661,61662,61662,61663,61663,61664, +61664,61665,61665,61666,61666,61667,61667,61668,61668,61669,61669,61669,61670, +61670,61671,61671,61672,61672,61673,61673,61674,61674,61675,61675,61676,61676, +61677,61677,61678,61678,61679,61679,61679,61680,61680,61681,61681,61682,61682, +61683,61683,61684,61684,61685,61685,61686,61686,61687,61687,61688,61688,61689, +61689,61689,61690,61690,61691,61691,61692,61692,61693,61693,61694,61694,61695, +61695,61696,61696,61697,61697,61698,61698,61699,61699,61699,61700,61700,61701, +61701,61702,61702,61703,61703,61704,61704,61705,61705,61706,61706,61707,61707, +61708,61708,61709,61709,61709,61710,61710,61711,61711,61712,61712,61713,61713, +61714,61714,61715,61715,61716,61716,61717,61717,61718,61718,61719,61719,61719, +61720,61720,61721,61721,61722,61722,61723,61723,61724,61724,61725,61725,61726, +61726,61727,61727,61728,61728,61729,61729,61729,61730,61730,61731,61731,61732, +61732,61733,61733,61734,61734,61735,61735,61736,61736,61737,61737,61738,61738, +61739,61739,61739,61740,61740,61741,61741,61742,61742,61743,61743,61744,61744, +61745,61745,61746,61746,61747,61747,61748,61748,61749,61749,61749,61750,61750, +61751,61751,61752,61752,61753,61753,61754,61754,61755,61755,61756,61756,61757, +61757,61758,61758,61759,61759,61759,61760,61760,61761,61761,61762,61762,61763, +61763,61764,61764,61765,61765,61766,61766,61767,61767,61768,61768,61768,61769, +61769,61770,61770,61771,61771,61772,61772,61773,61773,61774,61774,61775,61775, +61776,61776,61777,61777,61778,61778,61778,61779,61779,61780,61780,61781,61781, +61782,61782,61783,61783,61784,61784,61785,61785,61786,61786,61787,61787,61788, +61788,61788,61789,61789,61790,61790,61791,61791,61792,61792,61793,61793,61794, +61794,61795,61795,61796,61796,61797,61797,61797,61798,61798,61799,61799,61800, +61800,61801,61801,61802,61802,61803,61803,61804,61804,61805,61805,61806,61806, +61807,61807,61807,61808,61808,61809,61809,61810,61810,61811,61811,61812,61812, +61813,61813,61814,61814,61815,61815,61816,61816,61816,61817,61817,61818,61818, +61819,61819,61820,61820,61821,61821,61822,61822,61823,61823,61824,61824,61825, +61825,61826,61826,61826,61827,61827,61828,61828,61829,61829,61830,61830,61831, +61831,61832,61832,61833,61833,61834,61834,61835,61835,61835,61836,61836,61837, +61837,61838,61838,61839,61839,61840,61840,61841,61841,61842,61842,61843,61843, +61844,61844,61844,61845,61845,61846,61846,61847,61847,61848,61848,61849,61849, +61850,61850,61851,61851,61852,61852,61853,61853,61854,61854,61854,61855,61855, +61856,61856,61857,61857,61858,61858,61859,61859,61860,61860,61861,61861,61862, +61862,61863,61863,61863,61864,61864,61865,61865,61866,61866,61867,61867,61868, +61868,61869,61869,61870,61870,61871,61871,61872,61872,61872,61873,61873,61874, +61874,61875,61875,61876,61876,61877,61877,61878,61878,61879,61879,61880,61880, +61881,61881,61882,61882,61882,61883,61883,61884,61884,61885,61885,61886,61886, +61887,61887,61888,61888,61889,61889,61890,61890,61891,61891,61891,61892,61892, +61893,61893,61894,61894,61895,61895,61896,61896,61897,61897,61898,61898,61899, +61899,61900,61900,61900,61901,61901,61902,61902,61903,61903,61904,61904,61905, +61905,61906,61906,61907,61907,61908,61908,61909,61909,61909,61910,61910,61911, +61911,61912,61912,61913,61913,61914,61914,61915,61915,61916,61916,61917,61917, +61918,61918,61918,61919,61919,61920,61920,61921,61921,61922,61922,61923,61923, +61924,61924,61925,61925,61926,61926,61927,61927,61927,61928,61928,61929,61929, +61930,61930,61931,61931,61932,61932,61933,61933,61934,61934,61935,61935,61936, +61936,61936,61937,61937,61938,61938,61939,61939,61940,61940,61941,61941,61942, +61942,61943,61943,61944,61944,61945,61945,61945,61946,61946,61947,61947,61948, +61948,61949,61949,61950,61950,61951,61951,61952,61952,61953,61953,61954,61954, +61954,61955,61955,61956,61956,61957,61957,61958,61958,61959,61959,61960,61960, +61961,61961,61962,61962,61963,61963,61963,61964,61964,61965,61965,61966,61966, +61967,61967,61968,61968,61969,61969,61970,61970,61971,61971,61972,61972,61972, +61973,61973,61974,61974,61975,61975,61976,61976,61977,61977,61978,61978,61979, +61979,61980,61980,61981,61981,61981,61982,61982,61983,61983,61984,61984,61985, +61985,61986,61986,61987,61987,61988,61988,61989,61989,61990,61990,61990,61991, +61991,61992,61992,61993,61993,61994,61994,61995,61995,61996,61996,61997,61997, +61998,61998,61999,61999,61999,62000,62000,62001,62001,62002,62002,62003,62003, +62004,62004,62005,62005,62006,62006,62007,62007,62007,62008,62008,62009,62009, +62010,62010,62011,62011,62012,62012,62013,62013,62014,62014,62015,62015,62016, +62016,62016,62017,62017,62018,62018,62019,62019,62020,62020,62021,62021,62022, +62022,62023,62023,62024,62024,62025,62025,62025,62026,62026,62027,62027,62028, +62028,62029,62029,62030,62030,62031,62031,62032,62032,62033,62033,62034,62034, +62034,62035,62035,62036,62036,62037,62037,62038,62038,62039,62039,62040,62040, +62041,62041,62042,62042,62042,62043,62043,62044,62044,62045,62045,62046,62046, +62047,62047,62048,62048,62049,62049,62050,62050,62051,62051,62051,62052,62052, +62053,62053,62054,62054,62055,62055,62056,62056,62057,62057,62058,62058,62059, +62059,62060,62060,62060,62061,62061,62062,62062,62063,62063,62064,62064,62065, +62065,62066,62066,62067,62067,62068,62068,62068,62069,62069,62070,62070,62071, +62071,62072,62072,62073,62073,62074,62074,62075,62075,62076,62076,62077,62077, +62077,62078,62078,62079,62079,62080,62080,62081,62081,62082,62082,62083,62083, +62084,62084,62085,62085,62085,62086,62086,62087,62087,62088,62088,62089,62089, +62090,62090,62091,62091,62092,62092,62093,62093,62094,62094,62094,62095,62095, +62096,62096,62097,62097,62098,62098,62099,62099,62100,62100,62101,62101,62102, +62102,62102,62103,62103,62104,62104,62105,62105,62106,62106,62107,62107,62108, +62108,62109,62109,62110,62110,62111,62111,62111,62112,62112,62113,62113,62114, +62114,62115,62115,62116,62116,62117,62117,62118,62118,62119,62119,62119,62120, +62120,62121,62121,62122,62122,62123,62123,62124,62124,62125,62125,62126,62126, +62127,62127,62127,62128,62128,62129,62129,62130,62130,62131,62131,62132,62132, +62133,62133,62134,62134,62135,62135,62136,62136,62136,62137,62137,62138,62138, +62139,62139,62140,62140,62141,62141,62142,62142,62143,62143,62144,62144,62144, +62145,62145,62146,62146,62147,62147,62148,62148,62149,62149,62150,62150,62151, +62151,62152,62152,62152,62153,62153,62154,62154,62155,62155,62156,62156,62157, +62157,62158,62158,62159,62159,62160,62160,62161,62161,62161,62162,62162,62163, +62163,62164,62164,62165,62165,62166,62166,62167,62167,62168,62168,62169,62169, +62169,62170,62170,62171,62171,62172,62172,62173,62173,62174,62174,62175,62175, +62176,62176,62177,62177,62177,62178,62178,62179,62179,62180,62180,62181,62181, +62182,62182,62183,62183,62184,62184,62185,62185,62185,62186,62186,62187,62187, +62188,62188,62189,62189,62190,62190,62191,62191,62192,62192,62193,62193,62193, +62194,62194,62195,62195,62196,62196,62197,62197,62198,62198,62199,62199,62200, +62200,62201,62201,62202,62202,62202,62203,62203,62204,62204,62205,62205,62206, +62206,62207,62207,62208,62208,62209,62209,62210,62210,62210,62211,62211,62212, +62212,62213,62213,62214,62214,62215,62215,62216,62216,62217,62217,62218,62218, +62218,62219,62219,62220,62220,62221,62221,62222,62222,62223,62223,62224,62224, +62225,62225,62226,62226,62226,62227,62227,62228,62228,62229,62229,62230,62230, +62231,62231,62232,62232,62233,62233,62234,62234,62234,62235,62235,62236,62236, +62237,62237,62238,62238,62239,62239,62240,62240,62241,62241,62242,62242,62242, +62243,62243,62244,62244,62245,62245,62246,62246,62247,62247,62248,62248,62249, +62249,62250,62250,62250,62251,62251,62252,62252,62253,62253,62254,62254,62255, +62255,62256,62256,62257,62257,62258,62258,62258,62259,62259,62260,62260,62261, +62261,62262,62262,62263,62263,62264,62264,62265,62265,62266,62266,62266,62267, +62267,62268,62268,62269,62269,62270,62270,62271,62271,62272,62272,62273,62273, +62274,62274,62274,62275,62275,62276,62276,62277,62277,62278,62278,62279,62279, +62280,62280,62281,62281,62282,62282,62282,62283,62283,62284,62284,62285,62285, +62286,62286,62287,62287,62288,62288,62289,62289,62290,62290,62290,62291,62291, +62292,62292,62293,62293,62294,62294,62295,62295,62296,62296,62297,62297,62298, +62298,62298,62299,62299,62300,62300,62301,62301,62302,62302,62303,62303,62304, +62304,62305,62305,62305,62306,62306,62307,62307,62308,62308,62309,62309,62310, +62310,62311,62311,62312,62312,62313,62313,62313,62314,62314,62315,62315,62316, +62316,62317,62317,62318,62318,62319,62319,62320,62320,62321,62321,62321,62322, +62322,62323,62323,62324,62324,62325,62325,62326,62326,62327,62327,62328,62328, +62329,62329,62329,62330,62330,62331,62331,62332,62332,62333,62333,62334,62334, +62335,62335,62336,62336,62337,62337,62337,62338,62338,62339,62339,62340,62340, +62341,62341,62342,62342,62343,62343,62344,62344,62344,62345,62345,62346,62346, +62347,62347,62348,62348,62349,62349,62350,62350,62351,62351,62352,62352,62352, +62353,62353,62354,62354,62355,62355,62356,62356,62357,62357,62358,62358,62359, +62359,62360,62360,62360,62361,62361,62362,62362,62363,62363,62364,62364,62365, +62365,62366,62366,62367,62367,62368,62368,62368,62369,62369,62370,62370,62371, +62371,62372,62372,62373,62373,62374,62374,62375,62375,62375,62376,62376,62377, +62377,62378,62378,62379,62379,62380,62380,62381,62381,62382,62382,62383,62383, +62383,62384,62384,62385,62385,62386,62386,62387,62387,62388,62388,62389,62389, +62390,62390,62390,62391,62391,62392,62392,62393,62393,62394,62394,62395,62395, +62396,62396,62397,62397,62398,62398,62398,62399,62399,62400,62400,62401,62401, +62402,62402,62403,62403,62404,62404,62405,62405,62406,62406,62406,62407,62407, +62408,62408,62409,62409,62410,62410,62411,62411,62412,62412,62413,62413,62413, +62414,62414,62415,62415,62416,62416,62417,62417,62418,62418,62419,62419,62420, +62420,62421,62421,62421,62422,62422,62423,62423,62424,62424,62425,62425,62426, +62426,62427,62427,62428,62428,62428,62429,62429,62430,62430,62431,62431,62432, +62432,62433,62433,62434,62434,62435,62435,62436,62436,62436,62437,62437,62438, +62438,62439,62439,62440,62440,62441,62441,62442,62442,62443,62443,62443,62444, +62444,62445,62445,62446,62446,62447,62447,62448,62448,62449,62449,62450,62450, +62451,62451,62451,62452,62452,62453,62453,62454,62454,62455,62455,62456,62456, +62457,62457,62458,62458,62458,62459,62459,62460,62460,62461,62461,62462,62462, +62463,62463,62464,62464,62465,62465,62466,62466,62466,62467,62467,62468,62468, +62469,62469,62470,62470,62471,62471,62472,62472,62473,62473,62473,62474,62474, +62475,62475,62476,62476,62477,62477,62478,62478,62479,62479,62480,62480,62480, +62481,62481,62482,62482,62483,62483,62484,62484,62485,62485,62486,62486,62487, +62487,62488,62488,62488,62489,62489,62490,62490,62491,62491,62492,62492,62493, +62493,62494,62494,62495,62495,62495,62496,62496,62497,62497,62498,62498,62499, +62499,62500,62500,62501,62501,62502,62502,62502,62503,62503,62504,62504,62505, +62505,62506,62506,62507,62507,62508,62508,62509,62509,62510,62510,62510,62511, +62511,62512,62512,62513,62513,62514,62514,62515,62515,62516,62516,62517,62517, +62517,62518,62518,62519,62519,62520,62520,62521,62521,62522,62522,62523,62523, +62524,62524,62524,62525,62525,62526,62526,62527,62527,62528,62528,62529,62529, +62530,62530,62531,62531,62532,62532,62532,62533,62533,62534,62534,62535,62535, +62536,62536,62537,62537,62538,62538,62539,62539,62539,62540,62540,62541,62541, +62542,62542,62543,62543,62544,62544,62545,62545,62546,62546,62546,62547,62547, +62548,62548,62549,62549,62550,62550,62551,62551,62552,62552,62553,62553,62553, +62554,62554,62555,62555,62556,62556,62557,62557,62558,62558,62559,62559,62560, +62560,62561,62561,62561,62562,62562,62563,62563,62564,62564,62565,62565,62566, +62566,62567,62567,62568,62568,62568,62569,62569,62570,62570,62571,62571,62572, +62572,62573,62573,62574,62574,62575,62575,62575,62576,62576,62577,62577,62578, +62578,62579,62579,62580,62580,62581,62581,62582,62582,62582,62583,62583,62584, +62584,62585,62585,62586,62586,62587,62587,62588,62588,62589,62589,62589,62590, +62590,62591,62591,62592,62592,62593,62593,62594,62594,62595,62595,62596,62596, +62596,62597,62597,62598,62598,62599,62599,62600,62600,62601,62601,62602,62602, +62603,62603,62603,62604,62604,62605,62605,62606,62606,62607,62607,62608,62608, +62609,62609,62610,62610,62610,62611,62611,62612,62612,62613,62613,62614,62614, +62615,62615,62616,62616,62617,62617,62618,62618,62618,62619,62619,62620,62620, +62621,62621,62622,62622,62623,62623,62624,62624,62625,62625,62625,62626,62626, +62627,62627,62628,62628,62629,62629,62630,62630,62631,62631,62632,62632,62632, +62633,62633,62634,62634,62635,62635,62636,62636,62637,62637,62638,62638,62639, +62639,62639,62640,62640,62641,62641,62642,62642,62643,62643,62644,62644,62645, +62645,62646,62646,62646,62647,62647,62648,62648,62649,62649,62650,62650,62651, +62651,62652,62652,62653,62653,62653,62654,62654,62655,62655,62656,62656,62657, +62657,62658,62658,62659,62659,62660,62660,62660,62661,62661,62662,62662,62663, +62663,62664,62664,62665,62665,62666,62666,62667,62667,62667,62668,62668,62669, +62669,62670,62670,62671,62671,62672,62672,62673,62673,62674,62674,62674,62675, +62675,62676,62676,62677,62677,62678,62678,62679,62679,62680,62680,62680,62681, +62681,62682,62682,62683,62683,62684,62684,62685,62685,62686,62686,62687,62687, +62687,62688,62688,62689,62689,62690,62690,62691,62691,62692,62692,62693,62693, +62694,62694,62694,62695,62695,62696,62696,62697,62697,62698,62698,62699,62699, +62700,62700,62701,62701,62701,62702,62702,62703,62703,62704,62704,62705,62705, +62706,62706,62707,62707,62708,62708,62708,62709,62709,62710,62710,62711,62711, +62712,62712,62713,62713,62714,62714,62715,62715,62715,62716,62716,62717,62717, +62718,62718,62719,62719,62720,62720,62721,62721,62722,62722,62722,62723,62723, +62724,62724,62725,62725,62726,62726,62727,62727,62728,62728,62729,62729,62729, +62730,62730,62731,62731,62732,62732,62733,62733,62734,62734,62735,62735,62735, +62736,62736,62737,62737,62738,62738,62739,62739,62740,62740,62741,62741,62742, +62742,62742,62743,62743,62744,62744,62745,62745,62746,62746,62747,62747,62748, +62748,62749,62749,62749,62750,62750,62751,62751,62752,62752,62753,62753,62754, +62754,62755,62755,62756,62756,62756,62757,62757,62758,62758,62759,62759,62760, +62760,62761,62761,62762,62762,62762,62763,62763,62764,62764,62765,62765,62766, +62766,62767,62767,62768,62768,62769,62769,62769,62770,62770,62771,62771,62772, +62772,62773,62773,62774,62774,62775,62775,62776,62776,62776,62777,62777,62778, +62778,62779,62779,62780,62780,62781,62781,62782,62782,62783,62783,62783,62784, +62784,62785,62785,62786,62786,62787,62787,62788,62788,62789,62789,62789,62790, +62790,62791,62791,62792,62792,62793,62793,62794,62794,62795,62795,62796,62796, +62796,62797,62797,62798,62798,62799,62799,62800,62800,62801,62801,62802,62802, +62803,62803,62803,62804,62804,62805,62805,62806,62806,62807,62807,62808,62808, +62809,62809,62809,62810,62810,62811,62811,62812,62812,62813,62813,62814,62814, +62815,62815,62816,62816,62816,62817,62817,62818,62818,62819,62819,62820,62820, +62821,62821,62822,62822,62823,62823,62823,62824,62824,62825,62825,62826,62826, +62827,62827,62828,62828,62829,62829,62829,62830,62830,62831,62831,62832,62832, +62833,62833,62834,62834,62835,62835,62836,62836,62836,62837,62837,62838,62838, +62839,62839,62840,62840,62841,62841,62842,62842,62842,62843,62843,62844,62844, +62845,62845,62846,62846,62847,62847,62848,62848,62849,62849,62849,62850,62850, +62851,62851,62852,62852,62853,62853,62854,62854,62855,62855,62856,62856,62856, +62857,62857,62858,62858,62859,62859,62860,62860,62861,62861,62862,62862,62862, +62863,62863,62864,62864,62865,62865,62866,62866,62867,62867,62868,62868,62869, +62869,62869,62870,62870,62871,62871,62872,62872,62873,62873,62874,62874,62875, +62875,62875,62876,62876,62877,62877,62878,62878,62879,62879,62880,62880,62881, +62881,62882,62882,62882,62883,62883,62884,62884,62885,62885,62886,62886,62887, +62887,62888,62888,62888,62889,62889,62890,62890,62891,62891,62892,62892,62893, +62893,62894,62894,62895,62895,62895,62896,62896,62897,62897,62898,62898,62899, +62899,62900,62900,62901,62901,62901,62902,62902,62903,62903,62904,62904,62905, +62905,62906,62906,62907,62907,62908,62908,62908,62909,62909,62910,62910,62911, +62911,62912,62912,62913,62913,62914,62914,62914,62915,62915,62916,62916,62917, +62917,62918,62918,62919,62919,62920,62920,62921,62921,62921,62922,62922,62923, +62923,62924,62924,62925,62925,62926,62926,62927,62927,62927,62928,62928,62929, +62929,62930,62930,62931,62931,62932,62932,62933,62933,62933,62934,62934,62935, +62935,62936,62936,62937,62937,62938,62938,62939,62939,62940,62940,62940,62941, +62941,62942,62942,62943,62943,62944,62944,62945,62945,62946,62946,62946,62947, +62947,62948,62948,62949,62949,62950,62950,62951,62951,62952,62952,62953,62953, +62953,62954,62954,62955,62955,62956,62956,62957,62957,62958,62958,62959,62959, +62959,62960,62960,62961,62961,62962,62962,62963,62963,62964,62964,62965,62965, +62965,62966,62966,62967,62967,62968,62968,62969,62969,62970,62970,62971,62971, +62972,62972,62972,62973,62973,62974,62974,62975,62975,62976,62976,62977,62977, +62978,62978,62978,62979,62979,62980,62980,62981,62981,62982,62982,62983,62983, +62984,62984,62984,62985,62985,62986,62986,62987,62987,62988,62988,62989,62989, +62990,62990,62991,62991,62991,62992,62992,62993,62993,62994,62994,62995,62995, +62996,62996,62997,62997,62997,62998,62998,62999,62999,63000,63000,63001,63001, +63002,63002,63003,63003,63003,63004,63004,63005,63005,63006,63006,63007,63007, +63008,63008,63009,63009,63010,63010,63010,63011,63011,63012,63012,63013,63013, +63014,63014,63015,63015,63016,63016,63016,63017,63017,63018,63018,63019,63019, +63020,63020,63021,63021,63022,63022,63022,63023,63023,63024,63024,63025,63025, +63026,63026,63027,63027,63028,63028,63028,63029,63029,63030,63030,63031,63031, +63032,63032,63033,63033,63034,63034,63035,63035,63035,63036,63036,63037,63037, +63038,63038,63039,63039,63040,63040,63041,63041,63041,63042,63042,63043,63043, +63044,63044,63045,63045,63046,63046,63047,63047,63047,63048,63048,63049,63049, +63050,63050,63051,63051,63052,63052,63053,63053,63053,63054,63054,63055,63055, +63056,63056,63057,63057,63058,63058,63059,63059,63059,63060,63060,63061,63061, +63062,63062,63063,63063,63064,63064,63065,63065,63066,63066,63066,63067,63067, +63068,63068,63069,63069,63070,63070,63071,63071,63072,63072,63072,63073,63073, +63074,63074,63075,63075,63076,63076,63077,63077,63078,63078,63078,63079,63079, +63080,63080,63081,63081,63082,63082,63083,63083,63084,63084,63084,63085,63085, +63086,63086,63087,63087,63088,63088,63089,63089,63090,63090,63090,63091,63091, +63092,63092,63093,63093,63094,63094,63095,63095,63096,63096,63096,63097,63097, +63098,63098,63099,63099,63100,63100,63101,63101,63102,63102,63102,63103,63103, +63104,63104,63105,63105,63106,63106,63107,63107,63108,63108,63109,63109,63109, +63110,63110,63111,63111,63112,63112,63113,63113,63114,63114,63115,63115,63115, +63116,63116,63117,63117,63118,63118,63119,63119,63120,63120,63121,63121,63121, +63122,63122,63123,63123,63124,63124,63125,63125,63126,63126,63127,63127,63127, +63128,63128,63129,63129,63130,63130,63131,63131,63132,63132,63133,63133,63133, +63134,63134,63135,63135,63136,63136,63137,63137,63138,63138,63139,63139,63139, +63140,63140,63141,63141,63142,63142,63143,63143,63144,63144,63145,63145,63145, +63146,63146,63147,63147,63148,63148,63149,63149,63150,63150,63151,63151,63151, +63152,63152,63153,63153,63154,63154,63155,63155,63156,63156,63157,63157,63157, +63158,63158,63159,63159,63160,63160,63161,63161,63162,63162,63163,63163,63163, +63164,63164,63165,63165,63166,63166,63167,63167,63168,63168,63169,63169,63169, +63170,63170,63171,63171,63172,63172,63173,63173,63174,63174,63175,63175,63175, +63176,63176,63177,63177,63178,63178,63179,63179,63180,63180,63181,63181,63181, +63182,63182,63183,63183,63184,63184,63185,63185,63186,63186,63187,63187,63187, +63188,63188,63189,63189,63190,63190,63191,63191,63192,63192,63193,63193,63193, +63194,63194,63195,63195,63196,63196,63197,63197,63198,63198,63199,63199,63199, +63200,63200,63201,63201,63202,63202,63203,63203,63204,63204,63205,63205,63205, +63206,63206,63207,63207,63208,63208,63209,63209,63210,63210,63211,63211,63211, +63212,63212,63213,63213,63214,63214,63215,63215,63216,63216,63217,63217,63217, +63218,63218,63219,63219,63220,63220,63221,63221,63222,63222,63223,63223,63223, +63224,63224,63225,63225,63226,63226,63227,63227,63228,63228,63229,63229,63229, +63230,63230,63231,63231,63232,63232,63233,63233,63234,63234,63234,63235,63235, +63236,63236,63237,63237,63238,63238,63239,63239,63240,63240,63240,63241,63241, +63242,63242,63243,63243,63244,63244,63245,63245,63246,63246,63246,63247,63247, +63248,63248,63249,63249,63250,63250,63251,63251,63252,63252,63252,63253,63253, +63254,63254,63255,63255,63256,63256,63257,63257,63258,63258,63258,63259,63259, +63260,63260,63261,63261,63262,63262,63263,63263,63264,63264,63264,63265,63265, +63266,63266,63267,63267,63268,63268,63269,63269,63270,63270,63270,63271,63271, +63272,63272,63273,63273,63274,63274,63275,63275,63276,63276,63276,63277,63277, +63278,63278,63279,63279,63280,63280,63281,63281,63281,63282,63282,63283,63283, +63284,63284,63285,63285,63286,63286,63287,63287,63287,63288,63288,63289,63289, +63290,63290,63291,63291,63292,63292,63293,63293,63293,63294,63294,63295,63295, +63296,63296,63297,63297,63298,63298,63299,63299,63299,63300,63300,63301,63301, +63302,63302,63303,63303,63304,63304,63305,63305,63305,63306,63306,63307,63307, +63308,63308,63309,63309,63310,63310,63310,63311,63311,63312,63312,63313,63313, +63314,63314,63315,63315,63316,63316,63316,63317,63317,63318,63318,63319,63319, +63320,63320,63321,63321,63322,63322,63322,63323,63323,63324,63324,63325,63325, +63326,63326,63327,63327,63328,63328,63328,63329,63329,63330,63330,63331,63331, +63332,63332,63333,63333,63333,63334,63334,63335,63335,63336,63336,63337,63337, +63338,63338,63339,63339,63339,63340,63340,63341,63341,63342,63342,63343,63343, +63344,63344,63345,63345,63345,63346,63346,63347,63347,63348,63348,63349,63349, +63350,63350,63351,63351,63351,63352,63352,63353,63353,63354,63354,63355,63355, +63356,63356,63356,63357,63357,63358,63358,63359,63359,63360,63360,63361,63361, +63362,63362,63362,63363,63363,63364,63364,63365,63365,63366,63366,63367,63367, +63368,63368,63368,63369,63369,63370,63370,63371,63371,63372,63372,63373,63373, +63373,63374,63374,63375,63375,63376,63376,63377,63377,63378,63378,63379,63379, +63379,63380,63380,63381,63381,63382,63382,63383,63383,63384,63384,63385,63385, +63385,63386,63386,63387,63387,63388,63388,63389,63389,63390,63390,63390,63391, +63391,63392,63392,63393,63393,63394,63394,63395,63395,63396,63396,63396,63397, +63397,63398,63398,63399,63399,63400,63400,63401,63401,63402,63402,63402,63403, +63403,63404,63404,63405,63405,63406,63406,63407,63407,63407,63408,63408,63409, +63409,63410,63410,63411,63411,63412,63412,63413,63413,63413,63414,63414,63415, +63415,63416,63416,63417,63417,63418,63418,63419,63419,63419,63420,63420,63421, +63421,63422,63422,63423,63423,63424,63424,63424,63425,63425,63426,63426,63427, +63427,63428,63428,63429,63429,63430,63430,63430,63431,63431,63432,63432,63433, +63433,63434,63434,63435,63435,63435,63436,63436,63437,63437,63438,63438,63439, +63439,63440,63440,63441,63441,63441,63442,63442,63443,63443,63444,63444,63445, +63445,63446,63446,63447,63447,63447,63448,63448,63449,63449,63450,63450,63451, +63451,63452,63452,63452,63453,63453,63454,63454,63455,63455,63456,63456,63457, +63457,63458,63458,63458,63459,63459,63460,63460,63461,63461,63462,63462,63463, +63463,63463,63464,63464,63465,63465,63466,63466,63467,63467,63468,63468,63469, +63469,63469,63470,63470,63471,63471,63472,63472,63473,63473,63474,63474,63474, +63475,63475,63476,63476,63477,63477,63478,63478,63479,63479,63480,63480,63480, +63481,63481,63482,63482,63483,63483,63484,63484,63485,63485,63485,63486,63486, +63487,63487,63488,63488,63489,63489,63490,63490,63491,63491,63491,63492,63492, +63493,63493,63494,63494,63495,63495,63496,63496,63496,63497,63497,63498,63498, +63499,63499,63500,63500,63501,63501,63502,63502,63502,63503,63503,63504,63504, +63505,63505,63506,63506,63507,63507,63507,63508,63508,63509,63509,63510,63510, +63511,63511,63512,63512,63513,63513,63513,63514,63514,63515,63515,63516,63516, +63517,63517,63518,63518,63518,63519,63519,63520,63520,63521,63521,63522,63522, +63523,63523,63524,63524,63524,63525,63525,63526,63526,63527,63527,63528,63528, +63529,63529,63529,63530,63530,63531,63531,63532,63532,63533,63533,63534,63534, +63535,63535,63535,63536,63536,63537,63537,63538,63538,63539,63539,63540,63540, +63540,63541,63541,63542,63542,63543,63543,63544,63544,63545,63545,63546,63546, +63546,63547,63547,63548,63548,63549,63549,63550,63550,63551,63551,63551,63552, +63552,63553,63553,63554,63554,63555,63555,63556,63556,63557,63557,63557,63558, +63558,63559,63559,63560,63560,63561,63561,63562,63562,63562,63563,63563,63564, +63564,63565,63565,63566,63566,63567,63567,63567,63568,63568,63569,63569,63570, +63570,63571,63571,63572,63572,63573,63573,63573,63574,63574,63575,63575,63576, +63576,63577,63577,63578,63578,63578,63579,63579,63580,63580,63581,63581,63582, +63582,63583,63583,63584,63584,63584,63585,63585,63586,63586,63587,63587,63588, +63588,63589,63589,63589,63590,63590,63591,63591,63592,63592,63593,63593,63594, +63594,63594,63595,63595,63596,63596,63597,63597,63598,63598,63599,63599,63600, +63600,63600,63601,63601,63602,63602,63603,63603,63604,63604,63605,63605,63605, +63606,63606,63607,63607,63608,63608,63609,63609,63610,63610,63611,63611,63611, +63612,63612,63613,63613,63614,63614,63615,63615,63616,63616,63616,63617,63617, +63618,63618,63619,63619,63620,63620,63621,63621,63621,63622,63622,63623,63623, +63624,63624,63625,63625,63626,63626,63627,63627,63627,63628,63628,63629,63629, +63630,63630,63631,63631,63632,63632,63632,63633,63633,63634,63634,63635,63635, +63636,63636,63637,63637,63637,63638,63638,63639,63639,63640,63640,63641,63641, +63642,63642,63643,63643,63643,63644,63644,63645,63645,63646,63646,63647,63647, +63648,63648,63648,63649,63649,63650,63650,63651,63651,63652,63652,63653,63653, +63653,63654,63654,63655,63655,63656,63656,63657,63657,63658,63658,63658,63659, +63659,63660,63660,63661,63661,63662,63662,63663,63663,63664,63664,63664,63665, +63665,63666,63666,63667,63667,63668,63668,63669,63669,63669,63670,63670,63671, +63671,63672,63672,63673,63673,63674,63674,63674,63675,63675,63676,63676,63677, +63677,63678,63678,63679,63679,63680,63680,63680,63681,63681,63682,63682,63683, +63683,63684,63684,63685,63685,63685,63686,63686,63687,63687,63688,63688,63689, +63689,63690,63690,63690,63691,63691,63692,63692,63693,63693,63694,63694,63695, +63695,63695,63696,63696,63697,63697,63698,63698,63699,63699,63700,63700,63701, +63701,63701,63702,63702,63703,63703,63704,63704,63705,63705,63706,63706,63706, +63707,63707,63708,63708,63709,63709,63710,63710,63711,63711,63711,63712,63712, +63713,63713,63714,63714,63715,63715,63716,63716,63716,63717,63717,63718,63718, +63719,63719,63720,63720,63721,63721,63722,63722,63722,63723,63723,63724,63724, +63725,63725,63726,63726,63727,63727,63727,63728,63728,63729,63729,63730,63730, +63731,63731,63732,63732,63732,63733,63733,63734,63734,63735,63735,63736,63736, +63737,63737,63737,63738,63738,63739,63739,63740,63740,63741,63741,63742,63742, +63742,63743,63743,63744,63744,63745,63745,63746,63746,63747,63747,63748,63748, +63748,63749,63749,63750,63750,63751,63751,63752,63752,63753,63753,63753,63754, +63754,63755,63755,63756,63756,63757,63757,63758,63758,63758,63759,63759,63760, +63760,63761,63761,63762,63762,63763,63763,63763,63764,63764,63765,63765,63766, +63766,63767,63767,63768,63768,63768,63769,63769,63770,63770,63771,63771,63772, +63772,63773,63773,63773,63774,63774,63775,63775,63776,63776,63777,63777,63778, +63778,63779,63779,63779,63780,63780,63781,63781,63782,63782,63783,63783,63784, +63784,63784,63785,63785,63786,63786,63787,63787,63788,63788,63789,63789,63789, +63790,63790,63791,63791,63792,63792,63793,63793,63794,63794,63794,63795,63795, +63796,63796,63797,63797,63798,63798,63799,63799,63799,63800,63800,63801,63801, +63802,63802,63803,63803,63804,63804,63804,63805,63805,63806,63806,63807,63807, +63808,63808,63809,63809,63809,63810,63810,63811,63811,63812,63812,63813,63813, +63814,63814,63814,63815,63815,63816,63816,63817,63817,63818,63818,63819,63819, +63819,63820,63820,63821,63821,63822,63822,63823,63823,63824,63824,63825,63825, +63825,63826,63826,63827,63827,63828,63828,63829,63829,63830,63830,63830,63831, +63831,63832,63832,63833,63833,63834,63834,63835,63835,63835,63836,63836,63837, +63837,63838,63838,63839,63839,63840,63840,63840,63841,63841,63842,63842,63843, +63843,63844,63844,63845,63845,63845,63846,63846,63847,63847,63848,63848,63849, +63849,63850,63850,63850,63851,63851,63852,63852,63853,63853,63854,63854,63855, +63855,63855,63856,63856,63857,63857,63858,63858,63859,63859,63860,63860,63860, +63861,63861,63862,63862,63863,63863,63864,63864,63865,63865,63865,63866,63866, +63867,63867,63868,63868,63869,63869,63870,63870,63870,63871,63871,63872,63872, +63873,63873,63874,63874,63875,63875,63875,63876,63876,63877,63877,63878,63878, +63879,63879,63880,63880,63880,63881,63881,63882,63882,63883,63883,63884,63884, +63885,63885,63885,63886,63886,63887,63887,63888,63888,63889,63889,63890,63890, +63890,63891,63891,63892,63892,63893,63893,63894,63894,63895,63895,63895,63896, +63896,63897,63897,63898,63898,63899,63899,63900,63900,63900,63901,63901,63902, +63902,63903,63903,63904,63904,63905,63905,63905,63906,63906,63907,63907,63908, +63908,63909,63909,63910,63910,63910,63911,63911,63912,63912,63913,63913,63914, +63914,63915,63915,63915,63916,63916,63917,63917,63918,63918,63919,63919,63920, +63920,63920,63921,63921,63922,63922,63923,63923,63924,63924,63925,63925,63925, +63926,63926,63927,63927,63928,63928,63929,63929,63930,63930,63930,63931,63931, +63932,63932,63933,63933,63934,63934,63935,63935,63935,63936,63936,63937,63937, +63938,63938,63939,63939,63940,63940,63940,63941,63941,63942,63942,63943,63943, +63944,63944,63945,63945,63945,63946,63946,63947,63947,63948,63948,63949,63949, +63950,63950,63950,63951,63951,63952,63952,63953,63953,63954,63954,63955,63955, +63955,63956,63956,63957,63957,63958,63958,63959,63959,63960,63960,63960,63961, +63961,63962,63962,63963,63963,63964,63964,63965,63965,63965,63966,63966,63967, +63967,63968,63968,63969,63969,63970,63970,63970,63971,63971,63972,63972,63973, +63973,63974,63974,63975,63975,63975,63976,63976,63977,63977,63978,63978,63979, +63979,63980,63980,63980,63981,63981,63982,63982,63983,63983,63984,63984,63984, +63985,63985,63986,63986,63987,63987,63988,63988,63989,63989,63989,63990,63990, +63991,63991,63992,63992,63993,63993,63994,63994,63994,63995,63995,63996,63996, +63997,63997,63998,63998,63999,63999,63999,64000,64000,64001,64001,64002,64002, +64003,64003,64004,64004,64004,64005,64005,64006,64006,64007,64007,64008,64008, +64009,64009,64009,64010,64010,64011,64011,64012,64012,64013,64013,64014,64014, +64014,64015,64015,64016,64016,64017,64017,64018,64018,64019,64019,64019,64020, +64020,64021,64021,64022,64022,64023,64023,64024,64024,64024,64025,64025,64026, +64026,64027,64027,64028,64028,64028,64029,64029,64030,64030,64031,64031,64032, +64032,64033,64033,64033,64034,64034,64035,64035,64036,64036,64037,64037,64038, +64038,64038,64039,64039,64040,64040,64041,64041,64042,64042,64043,64043,64043, +64044,64044,64045,64045,64046,64046,64047,64047,64048,64048,64048,64049,64049, +64050,64050,64051,64051,64052,64052,64053,64053,64053,64054,64054,64055,64055, +64056,64056,64057,64057,64057,64058,64058,64059,64059,64060,64060,64061,64061, +64062,64062,64062,64063,64063,64064,64064,64065,64065,64066,64066,64067,64067, +64067,64068,64068,64069,64069,64070,64070,64071,64071,64072,64072,64072,64073, +64073,64074,64074,64075,64075,64076,64076,64077,64077,64077,64078,64078,64079, +64079,64080,64080,64081,64081,64082,64082,64082,64083,64083,64084,64084,64085, +64085,64086,64086,64086,64087,64087,64088,64088,64089,64089,64090,64090,64091, +64091,64091,64092,64092,64093,64093,64094,64094,64095,64095,64096,64096,64096, +64097,64097,64098,64098,64099,64099,64100,64100,64101,64101,64101,64102,64102, +64103,64103,64104,64104,64105,64105,64106,64106,64106,64107,64107,64108,64108, +64109,64109,64110,64110,64110,64111,64111,64112,64112,64113,64113,64114,64114, +64115,64115,64115,64116,64116,64117,64117,64118,64118,64119,64119,64120,64120, +64120,64121,64121,64122,64122,64123,64123,64124,64124,64125,64125,64125,64126, +64126,64127,64127,64128,64128,64129,64129,64129,64130,64130,64131,64131,64132, +64132,64133,64133,64134,64134,64134,64135,64135,64136,64136,64137,64137,64138, +64138,64139,64139,64139,64140,64140,64141,64141,64142,64142,64143,64143,64144, +64144,64144,64145,64145,64146,64146,64147,64147,64148,64148,64148,64149,64149, +64150,64150,64151,64151,64152,64152,64153,64153,64153,64154,64154,64155,64155, +64156,64156,64157,64157,64158,64158,64158,64159,64159,64160,64160,64161,64161, +64162,64162,64163,64163,64163,64164,64164,64165,64165,64166,64166,64167,64167, +64167,64168,64168,64169,64169,64170,64170,64171,64171,64172,64172,64172,64173, +64173,64174,64174,64175,64175,64176,64176,64177,64177,64177,64178,64178,64179, +64179,64180,64180,64181,64181,64181,64182,64182,64183,64183,64184,64184,64185, +64185,64186,64186,64186,64187,64187,64188,64188,64189,64189,64190,64190,64191, +64191,64191,64192,64192,64193,64193,64194,64194,64195,64195,64195,64196,64196, +64197,64197,64198,64198,64199,64199,64200,64200,64200,64201,64201,64202,64202, +64203,64203,64204,64204,64205,64205,64205,64206,64206,64207,64207,64208,64208, +64209,64209,64209,64210,64210,64211,64211,64212,64212,64213,64213,64214,64214, +64214,64215,64215,64216,64216,64217,64217,64218,64218,64219,64219,64219,64220, +64220,64221,64221,64222,64222,64223,64223,64223,64224,64224,64225,64225,64226, +64226,64227,64227,64228,64228,64228,64229,64229,64230,64230,64231,64231,64232, +64232,64233,64233,64233,64234,64234,64235,64235,64236,64236,64237,64237,64237, +64238,64238,64239,64239,64240,64240,64241,64241,64242,64242,64242,64243,64243, +64244,64244,64245,64245,64246,64246,64247,64247,64247,64248,64248,64249,64249, +64250,64250,64251,64251,64251,64252,64252,64253,64253,64254,64254,64255,64255, +64256,64256,64256,64257,64257,64258,64258,64259,64259,64260,64260,64261,64261, +64261,64262,64262,64263,64263,64264,64264,64265,64265,64265,64266,64266,64267, +64267,64268,64268,64269,64269,64270,64270,64270,64271,64271,64272,64272,64273, +64273,64274,64274,64274,64275,64275,64276,64276,64277,64277,64278,64278,64279, +64279,64279,64280,64280,64281,64281,64282,64282,64283,64283,64284,64284,64284, +64285,64285,64286,64286,64287,64287,64288,64288,64288,64289,64289,64290,64290, +64291,64291,64292,64292,64293,64293,64293,64294,64294,64295,64295,64296,64296, +64297,64297,64297,64298,64298,64299,64299,64300,64300,64301,64301,64302,64302, +64302,64303,64303,64304,64304,64305,64305,64306,64306,64307,64307,64307,64308, +64308,64309,64309,64310,64310,64311,64311,64311,64312,64312,64313,64313,64314, +64314,64315,64315,64316,64316,64316,64317,64317,64318,64318,64319,64319,64320, +64320,64320,64321,64321,64322,64322,64323,64323,64324,64324,64325,64325,64325, +64326,64326,64327,64327,64328,64328,64329,64329,64329,64330,64330,64331,64331, +64332,64332,64333,64333,64334,64334,64334,64335,64335,64336,64336,64337,64337, +64338,64338,64339,64339,64339,64340,64340,64341,64341,64342,64342,64343,64343, +64343,64344,64344,64345,64345,64346,64346,64347,64347,64348,64348,64348,64349, +64349,64350,64350,64351,64351,64352,64352,64352,64353,64353,64354,64354,64355, +64355,64356,64356,64357,64357,64357,64358,64358,64359,64359,64360,64360,64361, +64361,64361,64362,64362,64363,64363,64364,64364,64365,64365,64366,64366,64366, +64367,64367,64368,64368,64369,64369,64370,64370,64370,64371,64371,64372,64372, +64373,64373,64374,64374,64375,64375,64375,64376,64376,64377,64377,64378,64378, +64379,64379,64379,64380,64380,64381,64381,64382,64382,64383,64383,64384,64384, +64384,64385,64385,64386,64386,64387,64387,64388,64388,64388,64389,64389,64390, +64390,64391,64391,64392,64392,64393,64393,64393,64394,64394,64395,64395,64396, +64396,64397,64397,64397,64398,64398,64399,64399,64400,64400,64401,64401,64402, +64402,64402,64403,64403,64404,64404,64405,64405,64406,64406,64406,64407,64407, +64408,64408,64409,64409,64410,64410,64411,64411,64411,64412,64412,64413,64413, +64414,64414,64415,64415,64415,64416,64416,64417,64417,64418,64418,64419,64419, +64420,64420,64420,64421,64421,64422,64422,64423,64423,64424,64424,64424,64425, +64425,64426,64426,64427,64427,64428,64428,64429,64429,64429,64430,64430,64431, +64431,64432,64432,64433,64433,64433,64434,64434,64435,64435,64436,64436,64437, +64437,64438,64438,64438,64439,64439,64440,64440,64441,64441,64442,64442,64442, +64443,64443,64444,64444,64445,64445,64446,64446,64446,64447,64447,64448,64448, +64449,64449,64450,64450,64451,64451,64451,64452,64452,64453,64453,64454,64454, +64455,64455,64455,64456,64456,64457,64457,64458,64458,64459,64459,64460,64460, +64460,64461,64461,64462,64462,64463,64463,64464,64464,64464,64465,64465,64466, +64466,64467,64467,64468,64468,64469,64469,64469,64470,64470,64471,64471,64472, +64472,64473,64473,64473,64474,64474,64475,64475,64476,64476,64477,64477,64477, +64478,64478,64479,64479,64480,64480,64481,64481,64482,64482,64482,64483,64483, +64484,64484,64485,64485,64486,64486,64486,64487,64487,64488,64488,64489,64489, +64490,64490,64491,64491,64491,64492,64492,64493,64493,64494,64494,64495,64495, +64495,64496,64496,64497,64497,64498,64498,64499,64499,64500,64500,64500,64501, +64501,64502,64502,64503,64503,64504,64504,64504,64505,64505,64506,64506,64507, +64507,64508,64508,64508,64509,64509,64510,64510,64511,64511,64512,64512,64513, +64513,64513,64514,64514,64515,64515,64516,64516,64517,64517,64517,64518,64518, +64519,64519,64520,64520,64521,64521,64521,64522,64522,64523,64523,64524,64524, +64525,64525,64526,64526,64526,64527,64527,64528,64528,64529,64529,64530,64530, +64530,64531,64531,64532,64532,64533,64533,64534,64534,64535,64535,64535,64536, +64536,64537,64537,64538,64538,64539,64539,64539,64540,64540,64541,64541,64542, +64542,64543,64543,64543,64544,64544,64545,64545,64546,64546,64547,64547,64548, +64548,64548,64549,64549,64550,64550,64551,64551,64552,64552,64552,64553,64553, +64554,64554,64555,64555,64556,64556,64556,64557,64557,64558,64558,64559,64559, +64560,64560,64561,64561,64561,64562,64562,64563,64563,64564,64564,64565,64565, +64565,64566,64566,64567,64567,64568,64568,64569,64569,64569,64570,64570,64571, +64571,64572,64572,64573,64573,64574,64574,64574,64575,64575,64576,64576,64577, +64577,64578,64578,64578,64579,64579,64580,64580,64581,64581,64582,64582,64582, +64583,64583,64584,64584,64585,64585,64586,64586,64587,64587,64587,64588,64588, +64589,64589,64590,64590,64591,64591,64591,64592,64592,64593,64593,64594,64594, +64595,64595,64595,64596,64596,64597,64597,64598,64598,64599,64599,64600,64600, +64600,64601,64601,64602,64602,64603,64603,64604,64604,64604,64605,64605,64606, +64606,64607,64607,64608,64608,64608,64609,64609,64610,64610,64611,64611,64612, +64612,64613,64613,64613,64614,64614,64615,64615,64616,64616,64617,64617,64617, +64618,64618,64619,64619,64620,64620,64621,64621,64621,64622,64622,64623,64623, +64624,64624,64625,64625,64625,64626,64626,64627,64627,64628,64628,64629,64629, +64630,64630,64630,64631,64631,64632,64632,64633,64633,64634,64634,64634,64635, +64635,64636,64636,64637,64637,64638,64638,64638,64639,64639,64640,64640,64641, +64641,64642,64642,64643,64643,64643,64644,64644,64645,64645,64646,64646,64647, +64647,64647,64648,64648,64649,64649,64650,64650,64651,64651,64651,64652,64652, +64653,64653,64654,64654,64655,64655,64655,64656,64656,64657,64657,64658,64658, +64659,64659,64660,64660,64660,64661,64661,64662,64662,64663,64663,64664,64664, +64664,64665,64665,64666,64666,64667,64667,64668,64668,64668,64669,64669,64670, +64670,64671,64671,64672,64672,64672,64673,64673,64674,64674,64675,64675,64676, +64676,64677,64677,64677,64678,64678,64679,64679,64680,64680,64681,64681,64681, +64682,64682,64683,64683,64684,64684,64685,64685,64685,64686,64686,64687,64687, +64688,64688,64689,64689,64689,64690,64690,64691,64691,64692,64692,64693,64693, +64694,64694,64694,64695,64695,64696,64696,64697,64697,64698,64698,64698,64699, +64699,64700,64700,64701,64701,64702,64702,64702,64703,64703,64704,64704,64705, +64705,64706,64706,64706,64707,64707,64708,64708,64709,64709,64710,64710,64711, +64711,64711,64712,64712,64713,64713,64714,64714,64715,64715,64715,64716,64716, +64717,64717,64718,64718,64719,64719,64719,64720,64720,64721,64721,64722,64722, +64723,64723,64723,64724,64724,64725,64725,64726,64726,64727,64727,64727,64728, +64728,64729,64729,64730,64730,64731,64731,64732,64732,64732,64733,64733,64734, +64734,64735,64735,64736,64736,64736,64737,64737,64738,64738,64739,64739,64740, +64740,64740,64741,64741,64742,64742,64743,64743,64744,64744,64744,64745,64745, +64746,64746,64747,64747,64748,64748,64748,64749,64749,64750,64750,64751,64751, +64752,64752,64753,64753,64753,64754,64754,64755,64755,64756,64756,64757,64757, +64757,64758,64758,64759,64759,64760,64760,64761,64761,64761,64762,64762,64763, +64763,64764,64764,64765,64765,64765,64766,64766,64767,64767,64768,64768,64769, +64769,64769,64770,64770,64771,64771,64772,64772,64773,64773,64773,64774,64774, +64775,64775,64776,64776,64777,64777,64778,64778,64778,64779,64779,64780,64780, +64781,64781,64782,64782,64782,64783,64783,64784,64784,64785,64785,64786,64786, +64786,64787,64787,64788,64788,64789,64789,64790,64790,64790,64791,64791,64792, +64792,64793,64793,64794,64794,64794,64795,64795,64796,64796,64797,64797,64798, +64798,64798,64799,64799,64800,64800,64801,64801,64802,64802,64803,64803,64803, +64804,64804,64805,64805,64806,64806,64807,64807,64807,64808,64808,64809,64809, +64810,64810,64811,64811,64811,64812,64812,64813,64813,64814,64814,64815,64815, +64815,64816,64816,64817,64817,64818,64818,64819,64819,64819,64820,64820,64821, +64821,64822,64822,64823,64823,64823,64824,64824,64825,64825,64826,64826,64827, +64827,64827,64828,64828,64829,64829,64830,64830,64831,64831,64832,64832,64832, +64833,64833,64834,64834,64835,64835,64836,64836,64836,64837,64837,64838,64838, +64839,64839,64840,64840,64840,64841,64841,64842,64842,64843,64843,64844,64844, +64844,64845,64845,64846,64846,64847,64847,64848,64848,64848,64849,64849,64850, +64850,64851,64851,64852,64852,64852,64853,64853,64854,64854,64855,64855,64856, +64856,64856,64857,64857,64858,64858,64859,64859,64860,64860,64860,64861,64861, +64862,64862,64863,64863,64864,64864,64864,64865,64865,64866,64866,64867,64867, +64868,64868,64869,64869,64869,64870,64870,64871,64871,64872,64872,64873,64873, +64873,64874,64874,64875,64875,64876,64876,64877,64877,64877,64878,64878,64879, +64879,64880,64880,64881,64881,64881,64882,64882,64883,64883,64884,64884,64885, +64885,64885,64886,64886,64887,64887,64888,64888,64889,64889,64889,64890,64890, +64891,64891,64892,64892,64893,64893,64893,64894,64894,64895,64895,64896,64896, +64897,64897,64897,64898,64898,64899,64899,64900,64900,64901,64901,64901,64902, +64902,64903,64903,64904,64904,64905,64905,64905,64906,64906,64907,64907,64908, +64908,64909,64909,64909,64910,64910,64911,64911,64912,64912,64913,64913,64913, +64914,64914,64915,64915,64916,64916,64917,64917,64917,64918,64918,64919,64919, +64920,64920,64921,64921,64921,64922,64922,64923,64923,64924,64924,64925,64925, +64926,64926,64926,64927,64927,64928,64928,64929,64929,64930,64930,64930,64931, +64931,64932,64932,64933,64933,64934,64934,64934,64935,64935,64936,64936,64937, +64937,64938,64938,64938,64939,64939,64940,64940,64941,64941,64942,64942,64942, +64943,64943,64944,64944,64945,64945,64946,64946,64946,64947,64947,64948,64948, +64949,64949,64950,64950,64950,64951,64951,64952,64952,64953,64953,64954,64954, +64954,64955,64955,64956,64956,64957,64957,64958,64958,64958,64959,64959,64960, +64960,64961,64961,64962,64962,64962,64963,64963,64964,64964,64965,64965,64966, +64966,64966,64967,64967,64968,64968,64969,64969,64970,64970,64970,64971,64971, +64972,64972,64973,64973,64974,64974,64974,64975,64975,64976,64976,64977,64977, +64978,64978,64978,64979,64979,64980,64980,64981,64981,64982,64982,64982,64983, +64983,64984,64984,64985,64985,64986,64986,64986,64987,64987,64988,64988,64989, +64989,64990,64990,64990,64991,64991,64992,64992,64993,64993,64994,64994,64994, +64995,64995,64996,64996,64997,64997,64998,64998,64998,64999,64999,65000,65000, +65001,65001,65002,65002,65002,65003,65003,65004,65004,65005,65005,65006,65006, +65006,65007,65007,65008,65008,65009,65009,65010,65010,65010,65011,65011,65012, +65012,65013,65013,65014,65014,65014,65015,65015,65016,65016,65017,65017,65018, +65018,65018,65019,65019,65020,65020,65021,65021,65022,65022,65022,65023,65023, +65024,65024,65025,65025,65026,65026,65026,65027,65027,65028,65028,65029,65029, +65030,65030,65030,65031,65031,65032,65032,65033,65033,65034,65034,65034,65035, +65035,65036,65036,65037,65037,65038,65038,65038,65039,65039,65040,65040,65041, +65041,65042,65042,65042,65043,65043,65044,65044,65045,65045,65046,65046,65046, +65047,65047,65048,65048,65049,65049,65050,65050,65050,65051,65051,65052,65052, +65053,65053,65054,65054,65054,65055,65055,65056,65056,65057,65057,65058,65058, +65058,65059,65059,65060,65060,65061,65061,65062,65062,65062,65063,65063,65064, +65064,65065,65065,65065,65066,65066,65067,65067,65068,65068,65069,65069,65069, +65070,65070,65071,65071,65072,65072,65073,65073,65073,65074,65074,65075,65075, +65076,65076,65077,65077,65077,65078,65078,65079,65079,65080,65080,65081,65081, +65081,65082,65082,65083,65083,65084,65084,65085,65085,65085,65086,65086,65087, +65087,65088,65088,65089,65089,65089,65090,65090,65091,65091,65092,65092,65093, +65093,65093,65094,65094,65095,65095,65096,65096,65097,65097,65097,65098,65098, +65099,65099,65100,65100,65101,65101,65101,65102,65102,65103,65103,65104,65104, +65105,65105,65105,65106,65106,65107,65107,65108,65108,65109,65109,65109,65110, +65110,65111,65111,65112,65112,65113,65113,65113,65114,65114,65115,65115,65116, +65116,65117,65117,65117,65118,65118,65119,65119,65120,65120,65120,65121,65121, +65122,65122,65123,65123,65124,65124,65124,65125,65125,65126,65126,65127,65127, +65128,65128,65128,65129,65129,65130,65130,65131,65131,65132,65132,65132,65133, +65133,65134,65134,65135,65135,65136,65136,65136,65137,65137,65138,65138,65139, +65139,65140,65140,65140,65141,65141,65142,65142,65143,65143,65144,65144,65144, +65145,65145,65146,65146,65147,65147,65148,65148,65148,65149,65149,65150,65150, +65151,65151,65152,65152,65152,65153,65153,65154,65154,65155,65155,65156,65156, +65156,65157,65157,65158,65158,65159,65159,65159,65160,65160,65161,65161,65162, +65162,65163,65163,65163,65164,65164,65165,65165,65166,65166,65167,65167,65167, +65168,65168,65169,65169,65170,65170,65171,65171,65171,65172,65172,65173,65173, +65174,65174,65175,65175,65175,65176,65176,65177,65177,65178,65178,65179,65179, +65179,65180,65180,65181,65181,65182,65182,65183,65183,65183,65184,65184,65185, +65185,65186,65186,65187,65187,65187,65188,65188,65189,65189,65190,65190,65190, +65191,65191,65192,65192,65193,65193,65194,65194,65194,65195,65195,65196,65196, +65197,65197,65198,65198,65198,65199,65199,65200,65200,65201,65201,65202,65202, +65202,65203,65203,65204,65204,65205,65205,65206,65206,65206,65207,65207,65208, +65208,65209,65209,65210,65210,65210,65211,65211,65212,65212,65213,65213,65213, +65214,65214,65215,65215,65216,65216,65217,65217,65217,65218,65218,65219,65219, +65220,65220,65221,65221,65221,65222,65222,65223,65223,65224,65224,65225,65225, +65225,65226,65226,65227,65227,65228,65228,65229,65229,65229,65230,65230,65231, +65231,65232,65232,65233,65233,65233,65234,65234,65235,65235,65236,65236,65237, +65237,65237,65238,65238,65239,65239,65240,65240,65240,65241,65241,65242,65242, +65243,65243,65244,65244,65244,65245,65245,65246,65246,65247,65247,65248,65248, +65248,65249,65249,65250,65250,65251,65251,65252,65252,65252,65253,65253,65254, +65254,65255,65255,65256,65256,65256,65257,65257,65258,65258,65259,65259,65259, +65260,65260,65261,65261,65262,65262,65263,65263,65263,65264,65264,65265,65265, +65266,65266,65267,65267,65267,65268,65268,65269,65269,65270,65270,65271,65271, +65271,65272,65272,65273,65273,65274,65274,65275,65275,65275,65276,65276,65277, +65277,65278,65278,65278,65279,65279,65280,65280,65281,65281,65282,65282,65282, +65283,65283,65284,65284,65285,65285,65286,65286,65286,65287,65287,65288,65288, +65289,65289,65290,65290,65290,65291,65291,65292,65292,65293,65293,65294,65294, +65294,65295,65295,65296,65296,65297,65297,65297,65298,65298,65299,65299,65300, +65300,65301,65301,65301,65302,65302,65303,65303,65304,65304,65305,65305,65305, +65306,65306,65307,65307,65308,65308,65309,65309,65309,65310,65310,65311,65311, +65312,65312,65313,65313,65313,65314,65314,65315,65315,65316,65316,65316,65317, +65317,65318,65318,65319,65319,65320,65320,65320,65321,65321,65322,65322,65323, +65323,65324,65324,65324,65325,65325,65326,65326,65327,65327,65328,65328,65328, +65329,65329,65330,65330,65331,65331,65331,65332,65332,65333,65333,65334,65334, +65335,65335,65335,65336,65336,65337,65337,65338,65338,65339,65339,65339,65340, +65340,65341,65341,65342,65342,65343,65343,65343,65344,65344,65345,65345,65346, +65346,65346,65347,65347,65348,65348,65349,65349,65350,65350,65350,65351,65351, +65352,65352,65353,65353,65354,65354,65354,65355,65355,65356,65356,65357,65357, +65358,65358,65358,65359,65359,65360,65360,65361,65361,65361,65362,65362,65363, +65363,65364,65364,65365,65365,65365,65366,65366,65367,65367,65368,65368,65369, +65369,65369,65370,65370,65371,65371,65372,65372,65373,65373,65373,65374,65374, +65375,65375,65376,65376,65376,65377,65377,65378,65378,65379,65379,65380,65380, +65380,65381,65381,65382,65382,65383,65383,65384,65384,65384,65385,65385,65386, +65386,65387,65387,65388,65388,65388,65389,65389,65390,65390,65391,65391,65391, +65392,65392,65393,65393,65394,65394,65395,65395,65395,65396,65396,65397,65397, +65398,65398,65399,65399,65399,65400,65400,65401,65401,65402,65402,65403,65403, +65403,65404,65404,65405,65405,65406,65406,65406,65407,65407,65408,65408,65409, +65409,65410,65410,65410,65411,65411,65412,65412,65413,65413,65414,65414,65414, +65415,65415,65416,65416,65417,65417,65417,65418,65418,65419,65419,65420,65420, +65421,65421,65421,65422,65422,65423,65423,65424,65424,65425,65425,65425,65426, +65426,65427,65427,65428,65428,65428,65429,65429,65430,65430,65431,65431,65432, +65432,65432,65433,65433,65434,65434,65435,65435,65436,65436,65436,65437,65437, +65438,65438,65439,65439,65440,65440,65440,65441,65441,65442,65442,65443,65443, +65443,65444,65444,65445,65445,65446,65446,65447,65447,65447,65448,65448,65449, +65449,65450,65450,65451,65451,65451,65452,65452,65453,65453,65454,65454,65454, +65455,65455,65456,65456,65457,65457,65458,65458,65458,65459,65459,65460,65460, +65461,65461,65462,65462,65462,65463,65463,65464,65464,65465,65465,65465,65466, +65466,65467,65467,65468,65468,65469,65469,65469,65470,65470,65471,65471,65472, +65472,65473,65473,65473,65474,65474,65475,65475,65476,65476,65476,65477,65477, +65478,65478,65479,65479,65480,65480,65480,65481,65481,65482,65482,65483,65483, +65484,65484,65484,65485,65485,65486,65486,65487,65487,65487,65488,65488,65489, +65489,65490,65490,65491,65491,65491,65492,65492,65493,65493,65494,65494,65495, +65495,65495,65496,65496,65497,65497,65498,65498,65498,65499,65499,65500,65500, +65501,65501,65502,65502,65502,65503,65503,65504,65504,65505,65505,65506,65506, +65506,65507,65507,65508,65508,65509,65509,65509,65510,65510,65511,65511,65512, +65512,65513,65513,65513,65514,65514,65515,65515,65516,65516,65517,65517,65517, +65518,65518,65519,65519,65520,65520,65520,65521,65521,65522,65522,65523,65523, +65524,65524,65524,65525,65525,65526,65526,65527,65527,65528,65528,65528,65529, +65529,65530,65530,65531,65531,65531,65532,65532,65533,65533,65534,65534,65535, +65535 +}; + diff --git a/extensions/cairo.c b/extensions/cairo.c new file mode 100644 index 0000000..64af7be --- /dev/null +++ b/extensions/cairo.c @@ -0,0 +1,222 @@ +/* babl - dynamically extendable universal pixel conversion library. + * Copyright (C) 2012 Øyvind Kolås. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, see + * . + */ + +#include +#include "babl.h" + +#include "base/util.h" +#include "extensions/cairo-tables.h" + +int init (void); + +static inline long +conv_rgba8_cairo24_le (unsigned char *src, unsigned char *dst, long samples) +{ + long n = samples; + while (n--) + { + dst[0] = src[2]; + dst[1] = src[1]; + dst[2] = src[0]; + dst[3] = src[0]; + src+=4; + dst+=4; + } + return samples; +} + +static inline long +conv_rgb8_cairo24_le (unsigned char *src, unsigned char *dst, long samples) +{ + long n = samples; + while (n--) + { + dst[0] = src[2]; + dst[1] = src[1]; + dst[2] = src[0]; + dst[3] = src[0]; + src+=3; + dst+=4; + } + return samples; +} + +static inline long +conv_rgbA8_premul_cairo32_le (unsigned char *src, unsigned char *dst, long samples) +{ + long n = samples; + while (n--) + { + dst[0] = src[2]; + dst[1] = src[1]; + dst[2] = src[0]; + dst[3] = src[3]; + src+=4; + dst+=4; + } + return samples; +} + +static inline long +conv_rgbA8_cairo32_le (unsigned char *src, unsigned char *dst, long samples) +{ + long n = samples; + while (n--) + { +#define div_255(a) ((((a)+127)+(((a)+127)>>8))>>8) + dst[0] = div_255 (src[2] * src[3]); + dst[1] = div_255 (src[1] * src[3]); + dst[2] = div_255 (src[0] * src[3]); +#undef div_255 + dst[3] = src[3]; + src+=4; + dst+=4; + } + return samples; +} + +static inline unsigned char +conv_rgbafloat_cairo32_map (float value, + float alpha) +{ + unsigned short index; + float result; + if (value < 0.0) + return 0; + else if (value > 1.0) + return 0xFF; + index = (unsigned short)(value * 0xFFFF); + result = linear_to_gamma16[index] / 257.0; /* 65535.0 / 255.0 */ + + return (result * alpha) + 0.5f; +} + +static long +conv_rgbafloat_cairo32_le (unsigned char *src_char, + unsigned char *dst, + long samples) +{ + long n = samples; + float *src = (float*)src_char; + + while (n--) + { + if (src[3] < BABL_ALPHA_THRESHOLD) + { + *(int *)dst = 0; + } + else + { + if (src[3] >= 1.0) + { + dst[0] = conv_rgbafloat_cairo32_map (src[2], 1.0f); + dst[1] = conv_rgbafloat_cairo32_map (src[1], 1.0f); + dst[2] = conv_rgbafloat_cairo32_map (src[0], 1.0f); + dst[3] = 0xFF; + } + else + { + dst[0] = conv_rgbafloat_cairo32_map (src[2], src[3]); + dst[1] = conv_rgbafloat_cairo32_map (src[1], src[3]); + dst[2] = conv_rgbafloat_cairo32_map (src[0], src[3]); + dst[3] = src[3] * 0xFF + 0.5f; + } + } + + src += 4; + dst += 4; + } + return samples; +} + +int +init (void) +{ + int testint = 23; + char *testchar = (char*) &testint; + int littleendian = (testchar[0] == 23); + + if (littleendian) + { + const Babl *f32 = babl_format_new ( + "name", "cairo-ARGB32", + babl_model ("R'aG'aB'aA"), + babl_type ("u8"), + babl_component ("B'a"), + babl_component ("G'a"), + babl_component ("R'a"), + babl_component ("A"), + NULL + ); + + const Babl *f24 = babl_format_new ( + "name", "cairo-RGB24", + babl_model ("R'G'B'"), + babl_type ("u8"), + babl_component ("B'"), + babl_component ("G'"), + babl_component ("R'"), + babl_component ("PAD"), + NULL + ); + + babl_conversion_new (babl_format ("R'aG'aB'aA u8"), f32, "linear", + conv_rgbA8_premul_cairo32_le, NULL); + babl_conversion_new (babl_format ("R'G'B'A u8"), f32, "linear", + conv_rgbA8_cairo32_le, NULL); + + babl_conversion_new (babl_format ("RGBA float"), f32, "linear", + conv_rgbafloat_cairo32_le, NULL); + + babl_conversion_new (babl_format ("R'G'B'A u8"), f24, "linear", + conv_rgba8_cairo24_le, NULL); + babl_conversion_new (babl_format ("R'G'B' u8"), f24, "linear", + conv_rgb8_cairo24_le, NULL); + } + else + { + babl_format_new ( + "name", "cairo-ARGB32", + babl_model ("R'aG'aB'aA"), + babl_type ("u8"), + babl_component ("A"), + babl_component ("R'a"), + babl_component ("G'a"), + babl_component ("B'a"), + NULL + ); + babl_format_new ( + "name", "cairo-RGB24", + babl_model ("R'G'B'"), + babl_type ("u8"), + babl_component ("PAD"), + babl_component ("R'"), + babl_component ("G'"), + babl_component ("B'"), + NULL + ); + } + babl_format_new ( + "name", "cairo-A8", + babl_model ("YA"), + babl_type ("u8"), + babl_component ("A"), + NULL + ); + return 0; +} diff --git a/extensions/fast-float.c b/extensions/fast-float.c new file mode 100644 index 0000000..fd7fb9f --- /dev/null +++ b/extensions/fast-float.c @@ -0,0 +1,471 @@ +/* babl - dynamically extendable universal pixel conversion library. + * Copyright (C) 2012, Øyvind Kolås + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, see + * . + */ + +#include "config.h" + +#include +#include + +#include "babl.h" +#include "babl-cpuaccel.h" +#include "extensions/util.h" +#include "base/util.h" + +#define INLINE inline + +#define LSHIFT 2 + +typedef float (* BablLookupFunction) (float value, + void *data); +#define babl_LOOKUP_MAX_ENTRIES (819200) + +typedef struct BablLookup +{ + BablLookupFunction function; + void *data; + int shift; + uint32_t positive_min, positive_max, negative_min, negative_max; + uint32_t bitmask[babl_LOOKUP_MAX_ENTRIES/32]; + float table[]; +} BablLookup; + + +static BablLookup *babl_lookup_new (BablLookupFunction function, + void * data, + float start, + float end, + float precision); +#if 0 +static void babl_lookup_free (BablLookup *lookup); +#endif + + +static inline float +babl_lookup (BablLookup *lookup, + float number) +{ + union + { + float f; + uint32_t i; + } u; + uint32_t i; + + u.f = number; + i = (u.i << LSHIFT )>> lookup->shift; + + if (i > lookup->positive_min && + i < lookup->positive_max) + i = i - lookup->positive_min; + else if (i > lookup->negative_min && + i < lookup->negative_max) + i = i - lookup->negative_min + (lookup->positive_max - lookup->positive_min); + else + return lookup->function (number, lookup->data); + + if (!(lookup->bitmask[i/32] & (1<<(i & 31)))) + { + /* XXX: should look up the value in the middle of the range + * that yields a given value, + * + * potentially even do linear interpolation between + * the two neighbour values to get away with a tiny + * lookup table.. + */ + lookup->table[i]= lookup->function (number, lookup->data); + lookup->bitmask[i/32] |= (1<<(i & 31)); + } + + return lookup->table[i]; +} + +static BablLookup * +babl_lookup_new (BablLookupFunction function, + void * data, + float start, + float end, + float precision) +{ + BablLookup *lookup; + union + { + float f; + uint32_t i; + } u; + int positive_min, positive_max, negative_min, negative_max; + int shift; + + /* normalize input parameters */ + if (start > end) + { /* swap */ + u.f = start; + start = end; + end = u.f; + } + + if (precision <= 0.000005) shift = 0; /* checked for later */ + else if (precision <= 0.000010) shift = 8; + else if (precision <= 0.000020) shift = 9; + else if (precision <= 0.000040) shift = 10; + else if (precision <= 0.000081) shift = 11; + else if (precision <= 0.000161) shift = 12; + else if (precision <= 0.000324) shift = 14; + else if (precision <= 0.000649) shift = 15; + else shift = 16; /* a bit better than 8bit sRGB quality */ + + /* Adjust slightly away from 0.0, saving many entries close to 0, this + * causes lookups very close to zero to be passed directly to the + * function instead. + */ + if (start == 0.0) + start = precision; + if (end == 0.0) + end = -precision; + + /* Compute start and */ + + if (start < 0.0 || end < 0.0) + { + if (end < 0.0) + { + u.f = start; + positive_max = (u.i << LSHIFT) >> shift; + u.f = end; + positive_min = (u.i << LSHIFT) >> shift; + negative_min = positive_max; + negative_max = positive_max; + } + else + { + u.f = 0 - precision; + positive_min = (u.i << LSHIFT) >> shift; + u.f = start; + positive_max = (u.i << LSHIFT) >> shift; + + u.f = 0 + precision; + negative_min = (u.i << LSHIFT) >> shift; + u.f = end; + negative_max = (u.i << LSHIFT) >> shift; + } + } + else + { + u.f = start; + positive_min = (u.i << LSHIFT) >> shift; + u.f = end; + positive_max = (u.i << LSHIFT) >> shift; + negative_min = positive_max; + negative_max = positive_max; + } + + if (shift == 0) /* short circuit, do not use ranges */ + { + positive_min = positive_max = negative_min = negative_max = 0; + } + + if ((positive_max-positive_min) + (negative_max-negative_min) > babl_LOOKUP_MAX_ENTRIES) + { + /* Reduce the size of the cache tables to fit within the bittable + * budget (the maximum allocation is around 2.18mb of memory + */ + + int diff = (positive_max-positive_min) + (negative_max-negative_min) - babl_LOOKUP_MAX_ENTRIES; + + if (negative_max - negative_min > 0) + { + if (negative_max - negative_min >= diff) + { + negative_max -= diff; + diff = 0; + } + else + { + diff -= negative_max - negative_min; + negative_max = negative_min; + } + } + if (diff) + positive_max-=diff; + } + + lookup = calloc (sizeof (BablLookup) + sizeof (float) * + ((positive_max-positive_min)+ + (negative_max-negative_min)), 1); + + lookup->positive_min = positive_min; + lookup->positive_max = positive_max; + lookup->negative_min = negative_min; + lookup->negative_max = negative_max; + lookup->shift = shift; + lookup->function = function; + lookup->data = data; + + return lookup; +} + +static BablLookup *fast_pow = NULL; + +static inline float core_lookup (float val, void *userdata) +{ + return linear_to_gamma_2_2 (val); +} + +static float +linear_to_gamma_2_2_lut (float val) +{ + return babl_lookup (fast_pow, val); +} + + +static BablLookup *fast_rpow = NULL; + +static inline float core_rlookup (float val, void *userdata) +{ + return gamma_2_2_to_linear (val); +} + +static float +gamma_2_2_to_linear_lut (float val) +{ + return babl_lookup (fast_rpow, val); +} + +#if 0 +static void +babl_lookup_free (BablLookup *lookup) +{ + free (lookup); +} +#endif + +static INLINE long +conv_rgbaF_linear_rgbAF_gamma (unsigned char *src, + unsigned char *dst, + long samples) +{ + float *fsrc = (float *) src; + float *fdst = (float *) dst; + int n = samples; + + while (n--) + { + float alpha = fsrc[3]; + *fdst++ = linear_to_gamma_2_2_lut (*fsrc++) * alpha; + *fdst++ = linear_to_gamma_2_2_lut (*fsrc++) * alpha; + *fdst++ = linear_to_gamma_2_2_lut (*fsrc++) * alpha; + *fdst++ = *fsrc++; + } + return samples; +} + +static INLINE long +conv_rgbAF_linear_rgbAF_gamma (unsigned char *src, + unsigned char *dst, + long samples) +{ + float *fsrc = (float *) src; + float *fdst = (float *) dst; + int n = samples; + + while (n--) + { + float alpha = fsrc[3]; + if (alpha < BABL_ALPHA_THRESHOLD) + { + *fdst++ = 0.0; + *fdst++ = 0.0; + *fdst++ = 0.0; + *fdst++ = 0.0; + fsrc+=4; + } + else if (alpha >= 1.0) + { + *fdst++ = linear_to_gamma_2_2_lut (*fsrc++); + *fdst++ = linear_to_gamma_2_2_lut (*fsrc++); + *fdst++ = linear_to_gamma_2_2_lut (*fsrc++); + *fdst++ = *fsrc++; + } + else + { + float alpha_recip = 1.0 / alpha; + *fdst++ = linear_to_gamma_2_2_lut (*fsrc++ * alpha_recip) * alpha; + *fdst++ = linear_to_gamma_2_2_lut (*fsrc++ * alpha_recip) * alpha; + *fdst++ = linear_to_gamma_2_2_lut (*fsrc++ * alpha_recip) * alpha; + *fdst++ = *fsrc++; + } + } + return samples; +} + +static INLINE long +conv_rgbaF_linear_rgbaF_gamma (unsigned char *src, + unsigned char *dst, + long samples) +{ + float *fsrc = (float *) src; + float *fdst = (float *) dst; + int n = samples; + + while (n--) + { + *fdst++ = linear_to_gamma_2_2_lut (*fsrc++); + *fdst++ = linear_to_gamma_2_2_lut (*fsrc++); + *fdst++ = linear_to_gamma_2_2_lut (*fsrc++); + *fdst++ = *fsrc++; + } + return samples; +} + +static INLINE long +conv_rgbF_linear_rgbF_gamma (unsigned char *src, + unsigned char *dst, + long samples) +{ + float *fsrc = (float *) src; + float *fdst = (float *) dst; + int n = samples; + + while (n--) + { + *fdst++ = linear_to_gamma_2_2_lut (*fsrc++); + *fdst++ = linear_to_gamma_2_2_lut (*fsrc++); + *fdst++ = linear_to_gamma_2_2_lut (*fsrc++); + } + return samples; +} + + +static INLINE long +conv_rgbaF_gamma_rgbaF_linear (unsigned char *src, + unsigned char *dst, + long samples) +{ + float *fsrc = (float *) src; + float *fdst = (float *) dst; + int n = samples; + + while (n--) + { + *fdst++ = gamma_2_2_to_linear_lut (*fsrc++); + *fdst++ = gamma_2_2_to_linear_lut (*fsrc++); + *fdst++ = gamma_2_2_to_linear_lut (*fsrc++); + *fdst++ = *fsrc++; + } + return samples; +} + +static INLINE long +conv_rgbF_gamma_rgbF_linear (unsigned char *src, + unsigned char *dst, + long samples) +{ + float *fsrc = (float *) src; + float *fdst = (float *) dst; + int n = samples; + + while (n--) + { + *fdst++ = gamma_2_2_to_linear_lut (*fsrc++); + *fdst++ = gamma_2_2_to_linear_lut (*fsrc++); + *fdst++ = gamma_2_2_to_linear_lut (*fsrc++); + } + return samples; +} + +#define o(src, dst) \ + babl_conversion_new (src, dst, "linear", conv_ ## src ## _ ## dst, NULL) + +int init (void); + +int +init (void) +{ + const Babl *rgbaF_linear = babl_format_new ( + babl_model ("RGBA"), + babl_type ("float"), + babl_component ("R"), + babl_component ("G"), + babl_component ("B"), + babl_component ("A"), + NULL); + const Babl *rgbAF_linear = babl_format_new ( + babl_model ("RaGaBaA"), + babl_type ("float"), + babl_component ("Ra"), + babl_component ("Ga"), + babl_component ("Ba"), + babl_component ("A"), + NULL); + const Babl *rgbaF_gamma = babl_format_new ( + babl_model ("R'G'B'A"), + babl_type ("float"), + babl_component ("R'"), + babl_component ("G'"), + babl_component ("B'"), + babl_component ("A"), + NULL); + const Babl *rgbAF_gamma = babl_format_new ( + babl_model ("R'aG'aB'aA"), + babl_type ("float"), + babl_component ("R'a"), + babl_component ("G'a"), + babl_component ("B'a"), + babl_component ("A"), + NULL); + const Babl *rgbF_linear = babl_format_new ( + babl_model ("RGB"), + babl_type ("float"), + babl_component ("R"), + babl_component ("G"), + babl_component ("B"), + NULL); + const Babl *rgbF_gamma = babl_format_new ( + babl_model ("R'G'B'"), + babl_type ("float"), + babl_component ("R'"), + babl_component ("G'"), + babl_component ("B'"), + NULL); + + { + float f; + float a; + + fast_pow = babl_lookup_new (core_lookup, NULL, 0.0, 1.0, 0.0001); + fast_rpow = babl_lookup_new (core_rlookup, NULL, 0.0, 1.0, 0.0001); + + for (f = 0.0; f < 1.0; f+= 0.00001) + { + a = linear_to_gamma_2_2_lut (f); + a = gamma_2_2_to_linear_lut (f); + } + if (a < -10) + f = 2; + + } + + o (rgbAF_linear, rgbAF_gamma); + o (rgbaF_linear, rgbAF_gamma); + o (rgbaF_linear, rgbaF_gamma); + o (rgbaF_gamma, rgbaF_linear); + o (rgbF_linear, rgbF_gamma); + o (rgbF_gamma, rgbF_linear); + + return 0; +} + diff --git a/extensions/float-half.c b/extensions/float-half.c new file mode 100644 index 0000000..ff37625 --- /dev/null +++ b/extensions/float-half.c @@ -0,0 +1,356 @@ +/* babl - dynamically extendable universal pixel conversion library. + * Copyright (C) 2015 Daniel Sabo + * 2016 Øyvind Kolås + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, see + * . + */ + +/* Copyright: (c) 2009 by James Tursa, All Rights Reserved + * + * This code uses the BSD License: + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the distribution + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + * halfprecision converts the input argument to/from a half precision floating + * point bit pattern corresponding to IEEE 754r. The bit pattern is stored in a + * uint16 class variable. Please note that halfprecision is *not* a class. That + * is, you cannot do any arithmetic with the half precision bit patterns. + * halfprecision is simply a function that converts the IEEE 754r half precision + * bit pattern to/from other numeric MATLAB variables. You can, however, take + * the half precision bit patterns, convert them to single or double, do the + * operation, and then convert the result back manually. + * + * 1 bit sign bit + * 5 bits exponent, biased by 15 + * 10 bits mantissa, hidden leading bit, normalized to 1.0 + * + * Special floating point bit patterns recognized and supported: + * + * All exponent bits zero: + * - If all mantissa bits are zero, then number is zero (possibly signed) + * - Otherwise, number is a denormalized bit pattern + * + * All exponent bits set to 1: + * - If all mantissa bits are zero, then number is +Infinity or -Infinity + * - Otherwise, number is NaN (Not a Number) + */ + +#include "config.h" + +#include +#include + +#include "babl.h" +#include "extensions/util.h" + +static void halfp2singles(void *target, const void *source, long numel) +{ + uint16_t *hp = (uint16_t *) source; // Type pun input as an unsigned 16-bit int + uint32_t *xp = (uint32_t *) target; // Type pun output as an unsigned 32-bit int + uint16_t h, hs, he, hm; + uint32_t xs, xe, xm; + int32_t xes; + int e; + + if( source == NULL || target == NULL ) // Nothing to convert (e.g., imag part of pure real) + return; + while( numel-- ) { + h = *hp++; + if( (h & 0x7FFFu) == 0 ) { // Signed zero + *xp++ = ((uint32_t) h) << 16; // Return the signed zero + } else { // Not zero + hs = h & 0x8000u; // Pick off sign bit + he = h & 0x7C00u; // Pick off exponent bits + hm = h & 0x03FFu; // Pick off mantissa bits + if( he == 0 ) { // Denormal will convert to normalized + e = -1; // The following loop figures out how much extra to adjust the exponent + do { + e++; + hm <<= 1; + } while( (hm & 0x0400u) == 0 ); // Shift until leading bit overflows into exponent bit + xs = ((uint32_t) hs) << 16; // Sign bit + xes = ((int32_t) (he >> 10)) - 15 + 127 - e; // Exponent unbias the halfp, then bias the single + xe = (uint32_t) (xes << 23); // Exponent + xm = ((uint32_t) (hm & 0x03FFu)) << 13; // Mantissa + *xp++ = (xs | xe | xm); // Combine sign bit, exponent bits, and mantissa bits + } else if( he == 0x7C00u ) { // Inf or NaN (all the exponent bits are set) + if( hm == 0 ) { // If mantissa is zero ... + *xp++ = (((uint32_t) hs) << 16) | ((uint32_t) 0x7F800000u); // Signed Inf + } else { + *xp++ = (uint32_t) 0xFFC00000u; // NaN, only 1st mantissa bit set + } + } else { // Normalized number + xs = ((uint32_t) hs) << 16; // Sign bit + xes = ((int32_t) (he >> 10)) - 15 + 127; // Exponent unbias the halfp, then bias the single + xe = (uint32_t) (xes << 23); // Exponent + xm = ((uint32_t) hm) << 13; // Mantissa + *xp++ = (xs | xe | xm); // Combine sign bit, exponent bits, and mantissa bits + } + } + } +} + +static void singles2halfp(void *target, const void *source, long numel) +{ + uint16_t *hp = (uint16_t *) target; // Type pun output as an unsigned 16-bit int + uint32_t *xp = (uint32_t *) source; // Type pun input as an unsigned 32-bit int + uint16_t hs, he, hm; + uint32_t x, xs, xe, xm; + int hes; + + if( source == NULL || target == NULL ) { // Nothing to convert (e.g., imag part of pure real) + return; + } + while( numel-- ) { + x = *xp++; + if( (x & 0x7FFFFFFFu) == 0 ) { // Signed zero + *hp++ = (uint16_t) (x >> 16); // Return the signed zero + } else { // Not zero + xs = x & 0x80000000u; // Pick off sign bit + xe = x & 0x7F800000u; // Pick off exponent bits + xm = x & 0x007FFFFFu; // Pick off mantissa bits + if( xe == 0 ) { // Denormal will underflow, return a signed zero + *hp++ = (uint16_t) (xs >> 16); + } else if( xe == 0x7F800000u ) { // Inf or NaN (all the exponent bits are set) + if( xm == 0 ) { // If mantissa is zero ... + *hp++ = (uint16_t) ((xs >> 16) | 0x7C00u); // Signed Inf + } else { + *hp++ = (uint16_t) 0xFE00u; // NaN, only 1st mantissa bit set + } + } else { // Normalized number + hs = (uint16_t) (xs >> 16); // Sign bit + hes = ((int)(xe >> 23)) - 127 + 15; // Exponent unbias the single, then bias the halfp + if( hes >= 0x1F ) { // Overflow + *hp++ = (uint16_t) ((xs >> 16) | 0x7C00u); // Signed Inf + } else if( hes <= 0 ) { // Underflow + if( (14 - hes) > 24 ) { // Mantissa shifted all the way off & no rounding possibility + hm = (uint16_t) 0u; // Set mantissa to zero + } else { + xm |= 0x00800000u; // Add the hidden leading bit + hm = (uint16_t) (xm >> (14 - hes)); // Mantissa + if( (xm >> (13 - hes)) & 0x00000001u ) // Check for rounding + hm += (uint16_t) 1u; // Round, might overflow into exp bit, but this is OK + } + *hp++ = (hs | hm); // Combine sign bit and mantissa bits, biased exponent is zero + } else { + he = (uint16_t) (hes << 10); // Exponent + hm = (uint16_t) (xm >> 13); // Mantissa + if( xm & 0x00001000u ) // Check for rounding + *hp++ = (hs | he | hm) + (uint16_t) 1u; // Round, might overflow to inf, this is OK + else + *hp++ = (hs | he | hm); // No rounding + } + } + } + } +} + +static inline long +conv_yHalf_yF (const uint16_t *src, float *dst, long samples) +{ + halfp2singles(dst, src, samples); + return samples; +} + +static long +conv_yaHalf_yaF (const uint16_t *src, float *dst, long samples) +{ + return conv_yHalf_yF (src, dst, samples * 2) / 2; +} + +static long +conv_rgbHalf_rgbF (const uint16_t *src, float *dst, long samples) +{ + return conv_yHalf_yF (src, dst, samples * 3) / 3; +} + +static long +conv_rgbaHalf_rgbaF (const uint16_t *src, float *dst, long samples) +{ + return conv_yHalf_yF (src, dst, samples * 4) / 4; +} + +static inline long +conv_yF_yHalf (const float *src, uint16_t *dst, long samples) +{ + singles2halfp (dst, src, samples); + return samples; +} + +static long +conv_yaF_yaHalf (const float *src, uint16_t *dst, long samples) +{ + return conv_yF_yHalf (src, dst, samples * 2) / 2; +} + +static long +conv_rgbF_rgbHalf (const float *src, uint16_t *dst, long samples) +{ + return conv_yF_yHalf (src, dst, samples * 3) / 3; +} + +static long +conv_rgbaF_rgbaHalf (const float *src, uint16_t *dst, long samples) +{ + return conv_yF_yHalf (src, dst, samples * 4) / 4; +} + +int init (void); + +int +init (void) +{ + const Babl *rgbaF_linear = babl_format_new ( + babl_model ("RGBA"), + babl_type ("float"), + babl_component ("R"), + babl_component ("G"), + babl_component ("B"), + babl_component ("A"), + NULL); + const Babl *rgbaHalf_linear = babl_format_new ( + babl_model ("RGBA"), + babl_type ("half"), + babl_component ("R"), + babl_component ("G"), + babl_component ("B"), + babl_component ("A"), + NULL); + const Babl *rgbaF_gamma = babl_format_new ( + babl_model ("R'G'B'A"), + babl_type ("float"), + babl_component ("R'"), + babl_component ("G'"), + babl_component ("B'"), + babl_component ("A"), + NULL); + const Babl *rgbaHalf_gamma = babl_format_new ( + babl_model ("R'G'B'A"), + babl_type ("half"), + babl_component ("R'"), + babl_component ("G'"), + babl_component ("B'"), + babl_component ("A"), + NULL); + const Babl *rgbF_linear = babl_format_new ( + babl_model ("RGB"), + babl_type ("float"), + babl_component ("R"), + babl_component ("G"), + babl_component ("B"), + NULL); + const Babl *rgbHalf_linear = babl_format_new ( + babl_model ("RGB"), + babl_type ("half"), + babl_component ("R"), + babl_component ("G"), + babl_component ("B"), + NULL); + const Babl *rgbF_gamma = babl_format_new ( + babl_model ("R'G'B'"), + babl_type ("float"), + babl_component ("R'"), + babl_component ("G'"), + babl_component ("B'"), + NULL); + const Babl *rgbHalf_gamma = babl_format_new ( + babl_model ("R'G'B'"), + babl_type ("half"), + babl_component ("R'"), + babl_component ("G'"), + babl_component ("B'"), + NULL); + const Babl *yaF_linear = babl_format_new ( + babl_model ("YA"), + babl_type ("float"), + babl_component ("Y"), + babl_component ("A"), + NULL); + const Babl *yaHalf_linear = babl_format_new ( + babl_model ("YA"), + babl_type ("half"), + babl_component ("Y"), + babl_component ("A"), + NULL); + const Babl *yaF_gamma = babl_format_new ( + babl_model ("Y'A"), + babl_type ("float"), + babl_component ("Y'"), + babl_component ("A"), + NULL); + const Babl *yaHalf_gamma = babl_format_new ( + babl_model ("Y'A"), + babl_type ("half"), + babl_component ("Y'"), + babl_component ("A"), + NULL); + const Babl *yF_linear = babl_format_new ( + babl_model ("Y"), + babl_type ("float"), + babl_component ("Y"), + NULL); + const Babl *yHalf_linear = babl_format_new ( + babl_model ("Y"), + babl_type ("half"), + babl_component ("Y"), + NULL); + const Babl *yF_gamma = babl_format_new ( + babl_model ("Y'"), + babl_type ("float"), + babl_component ("Y'"), + NULL); + const Babl *yHalf_gamma = babl_format_new ( + babl_model ("Y'"), + babl_type ("half"), + babl_component ("Y'"), + NULL); + +#define CONV(src, dst) \ +{ \ + babl_conversion_new (src ## _linear, dst ## _linear, "linear", conv_ ## src ## _ ## dst, NULL); \ + babl_conversion_new (src ## _gamma, dst ## _gamma, "linear", conv_ ## src ## _ ## dst, NULL); \ +} + + CONV(rgbaHalf, rgbaF); + CONV(rgbHalf, rgbF); + CONV(yaHalf, yaF); + CONV(yHalf, yF); + CONV(rgbaF, rgbaHalf); + CONV(rgbF, rgbHalf); + CONV(yaF, yaHalf); + CONV(yF, yHalf); + + return 0; +} diff --git a/extensions/float.c b/extensions/float.c new file mode 100644 index 0000000..5cbbeb6 --- /dev/null +++ b/extensions/float.c @@ -0,0 +1,230 @@ +/* babl - dynamically extendable universal pixel conversion library. + * Copyright (C) 2012, Øyvind Kolås + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, see + * . + */ + +#include "config.h" + +#include +#include + +#include "babl.h" +#include "babl-cpuaccel.h" +#include "extensions/util.h" +#include "base/util.h" + +#define INLINE inline + + +static INLINE long +conv_rgbaF_linear_rgbAF_gamma (unsigned char *src, + unsigned char *dst, + long samples) +{ + float *fsrc = (float *) src; + float *fdst = (float *) dst; + int n = samples; + + while (n--) + { + float alpha = fsrc[3]; + *fdst++ = babl_linear_to_gamma_2_2 (*fsrc++) * alpha; + *fdst++ = babl_linear_to_gamma_2_2 (*fsrc++) * alpha; + *fdst++ = babl_linear_to_gamma_2_2 (*fsrc++) * alpha; + *fdst++ = *fsrc++; + } + return samples; +} + +static INLINE long +conv_rgbAF_linear_rgbAF_gamma (unsigned char *src, + unsigned char *dst, + long samples) +{ + float *fsrc = (float *) src; + float *fdst = (float *) dst; + int n = samples; + + while (n--) + { + float alpha = fsrc[3]; + if (alpha < BABL_ALPHA_THRESHOLD) + { + *fdst++ = 0.0; + *fdst++ = 0.0; + *fdst++ = 0.0; + *fdst++ = 0.0; + fsrc+=4; + } + else if (alpha >= 1.0) + { + *fdst++ = babl_linear_to_gamma_2_2 (*fsrc++); + *fdst++ = babl_linear_to_gamma_2_2 (*fsrc++); + *fdst++ = babl_linear_to_gamma_2_2 (*fsrc++); + *fdst++ = *fsrc++; + } + else + { + float alpha_recip = 1.0 / alpha; + *fdst++ = babl_linear_to_gamma_2_2 (*fsrc++ * alpha_recip) * alpha; + *fdst++ = babl_linear_to_gamma_2_2 (*fsrc++ * alpha_recip) * alpha; + *fdst++ = babl_linear_to_gamma_2_2 (*fsrc++ * alpha_recip) * alpha; + *fdst++ = *fsrc++; + } + } + return samples; +} + +static INLINE long +conv_rgbaF_linear_rgbaF_gamma (unsigned char *src, + unsigned char *dst, + long samples) +{ + float *fsrc = (float *) src; + float *fdst = (float *) dst; + int n = samples; + + while (n--) + { + *fdst++ = babl_linear_to_gamma_2_2 (*fsrc++); + *fdst++ = babl_linear_to_gamma_2_2 (*fsrc++); + *fdst++ = babl_linear_to_gamma_2_2 (*fsrc++); + *fdst++ = *fsrc++; + } + return samples; +} + +static INLINE long +conv_rgbF_linear_rgbF_gamma (unsigned char *src, + unsigned char *dst, + long samples) +{ + float *fsrc = (float *) src; + float *fdst = (float *) dst; + int n = samples; + + while (n--) + { + *fdst++ = babl_linear_to_gamma_2_2 (*fsrc++); + *fdst++ = babl_linear_to_gamma_2_2 (*fsrc++); + *fdst++ = babl_linear_to_gamma_2_2 (*fsrc++); + } + return samples; +} + + +static INLINE long +conv_rgbaF_gamma_rgbaF_linear (unsigned char *src, + unsigned char *dst, + long samples) +{ + float *fsrc = (float *) src; + float *fdst = (float *) dst; + int n = samples; + + while (n--) + { + *fdst++ = babl_gamma_2_2_to_linear (*fsrc++); + *fdst++ = babl_gamma_2_2_to_linear (*fsrc++); + *fdst++ = babl_gamma_2_2_to_linear (*fsrc++); + *fdst++ = *fsrc++; + } + return samples; +} + +static INLINE long +conv_rgbF_gamma_rgbF_linear (unsigned char *src, + unsigned char *dst, + long samples) +{ + float *fsrc = (float *) src; + float *fdst = (float *) dst; + int n = samples; + + while (n--) + { + *fdst++ = babl_gamma_2_2_to_linear (*fsrc++); + *fdst++ = babl_gamma_2_2_to_linear (*fsrc++); + *fdst++ = babl_gamma_2_2_to_linear (*fsrc++); + } + return samples; +} + +#define o(src, dst) \ + babl_conversion_new (src, dst, "linear", conv_ ## src ## _ ## dst, NULL) + +int init (void); + +int +init (void) +{ + const Babl *rgbaF_linear = babl_format_new ( + babl_model ("RGBA"), + babl_type ("float"), + babl_component ("R"), + babl_component ("G"), + babl_component ("B"), + babl_component ("A"), + NULL); + const Babl *rgbAF_linear = babl_format_new ( + babl_model ("RaGaBaA"), + babl_type ("float"), + babl_component ("Ra"), + babl_component ("Ga"), + babl_component ("Ba"), + babl_component ("A"), + NULL); + const Babl *rgbaF_gamma = babl_format_new ( + babl_model ("R'G'B'A"), + babl_type ("float"), + babl_component ("R'"), + babl_component ("G'"), + babl_component ("B'"), + babl_component ("A"), + NULL); + const Babl *rgbAF_gamma = babl_format_new ( + babl_model ("R'aG'aB'aA"), + babl_type ("float"), + babl_component ("R'a"), + babl_component ("G'a"), + babl_component ("B'a"), + babl_component ("A"), + NULL); + const Babl *rgbF_linear = babl_format_new ( + babl_model ("RGB"), + babl_type ("float"), + babl_component ("R"), + babl_component ("G"), + babl_component ("B"), + NULL); + const Babl *rgbF_gamma = babl_format_new ( + babl_model ("R'G'B'"), + babl_type ("float"), + babl_component ("R'"), + babl_component ("G'"), + babl_component ("B'"), + NULL); + + o (rgbAF_linear, rgbAF_gamma); + o (rgbaF_linear, rgbAF_gamma); + o (rgbaF_linear, rgbaF_gamma); + o (rgbaF_gamma, rgbaF_linear); + o (rgbF_linear, rgbF_gamma); + o (rgbF_gamma, rgbF_linear); + + return 0; +} + diff --git a/extensions/gegl-fixups.c b/extensions/gegl-fixups.c new file mode 100644 index 0000000..c1f91ca --- /dev/null +++ b/extensions/gegl-fixups.c @@ -0,0 +1,565 @@ +/* + * This file was part of gggl, it implements a variety of pixel conversion + * functions that are usable with babl, the file needs more cleanup, but the + * conversion functions that are usable gets used by babl. + * + * GGGL is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GGGL 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 GGGL; if not, see . + * + * Rights are granted to use this shared object in libraries covered by + * LGPL. (exception added, during import into babl CVS.) + * + * Copyright 2003, 2004, 2005, 2007 Øyvind Kolås + */ + +/* + * Implemented according to information read from: + * + * http://www.cinenet.net/~spitzak/conversion/sketches_0265.pdf + * + * initially ignoring any diffusion, to keep the implementation + * smaller, and interchangeable with the non optimized version. + * + * due to ability to be able to relicence gggl under a different + * licence than GPL, I avoided the temptation to look at the + * source files in the same location, in case I was going to + * need this piece of code for projects where GPL compatibility + * was a must. + * + * TODO: error diffusion, + */ + +#include +#include + +#include "config.h" +#include "babl.h" + +#include "base/util.h" +#include "extensions/util.h" + + +#define INLINE inline + +/* lookup tables used in conversion */ + +static float table_8_F[1 << 8]; +static float table_8g_F[1 << 8]; +static unsigned char table_F_8[1 << 17]; +static unsigned char table_F_8g[1 << 17]; + +static int table_inited = 0; + +static void +table_init (void) +{ + if (table_inited) + return; + table_inited = 1; + + /* fill tables for conversion from integer to float */ + { + int i; + for (i = 0; i < 1 << 8; i++) + { + float direct = i / 255.0; + table_8_F[i] = direct; + table_8g_F[i] = gamma_2_2_to_linear (direct); + } + } + /* fill tables for conversion from float to integer */ + { + union + { + float f; + uint32_t s; + } u; + u.f = 0.0; + + //u.s[0] = 0; + + for (u.s = 0; u.s < 4294900000U; u.s += 32768) + { + int c; + int cg; + + if (u.f <= 0.0) + { + c = 0; + cg = 0; + } + else + { + c = (u.f * 255.1619) + 0.5; + cg = (linear_to_gamma_2_2 (u.f) * 255.1619) + 0.5; + if (cg > 255) cg = 255; + if (c > 255) c = 255; + } + + table_F_8[(u.s >> 15) & ((1 << 17)-1)] = c; + table_F_8g[(u.s >> 15) & ((1 << 17)-1)] = cg; + } + } +#if 0 + /* fix tables to ensure 1:1 conversions back and forth */ + if (0) + { + int i; + for (i = 0; i < 256; i++) + { + float f; + unsigned short *hi = ((unsigned short *) (void *) &f); + unsigned short *lo = ((unsigned short *) (void *) &f); + + f = table_8_F[i]; + *lo = 0; + table_F_8[*hi] = i; + f = table_8g_F[i]; + *lo = 0; + table_F_8g[*hi] = i; + } + } +#endif +} + +/* function to find the index in table for a float */ +static unsigned int +gggl_float_to_index16 (float f) +{ + union + { + float f; + uint32_t s; + } u; + u.f = f; + return (u.s >> 15) & ((1 << 17)-1); +} + +static INLINE long +conv_F_8 (unsigned char *src, unsigned char *dst, long samples) +{ + long n = samples; + + if (!table_inited) + table_init (); + while (n--) + { + register float f = (*(float *) src); + *(unsigned char *) dst = table_F_8[gggl_float_to_index16 (f)]; + dst += 1; + src += 4; + } + return samples; +} + + +static INLINE long +conv_F_8g (unsigned char *src, unsigned char *dst, long samples) +{ + long n = samples; + + if (!table_inited) + table_init (); + while (n--) + { + register float f = (*(float *) src); + *(unsigned char *) dst = table_F_8g[gggl_float_to_index16 (f)]; + dst += 1; + src += 4; + } + return samples; +} + + +static INLINE long +conv_8_F (unsigned char *src, unsigned char *dst, long samples) +{ + long n = samples; + + if (!table_inited) + table_init (); + while (n--) + { + (*(float *) dst) = table_8_F[*(unsigned char *) src]; + dst += 4; + src += 1; + } + return samples; +} + + +static INLINE long +conv_rgbaF_rgb8 (unsigned char *src, unsigned char *dst, long samples) +{ + long n = samples; + + while (n--) + { + register float f = (*(float *) src); + *(unsigned char *) dst = table_F_8g[gggl_float_to_index16 (f)]; + src += 4; + dst += 1; + + f = (*(float *) src); + *(unsigned char *) dst = table_F_8g[gggl_float_to_index16 (f)]; + src += 4; + dst += 1; + + f = (*(float *) src); + *(unsigned char *) dst = table_F_8g[gggl_float_to_index16 (f)]; + src += 4; + dst += 1; + + src += 4; + } + return samples; +} + + +static INLINE long +conv_rgbaF_rgba8 (unsigned char *src, unsigned char *dst, long samples) +{ + long n = samples; + + while (n--) + { + register float f = (*(float *) src); + *(unsigned char *) dst = table_F_8g[gggl_float_to_index16 (f)]; + src += 4; + dst += 1; + + f = (*(float *) src); + *(unsigned char *) dst = table_F_8g[gggl_float_to_index16 (f)]; + src += 4; + dst += 1; + + f = (*(float *) src); + *(unsigned char *) dst = table_F_8g[gggl_float_to_index16 (f)]; + src += 4; + dst += 1; + + f = (*(float *) src); + *(unsigned char *) dst = table_F_8[gggl_float_to_index16 (f)]; + src += 4; + dst += 1; + } + return samples; +} + +#define conv_rgbaF_rgbP8 conv_rgbaF_rgba8 + +static INLINE long +conv_rgbF_rgb8 (unsigned char *src, unsigned char *dst, long samples) +{ + conv_F_8g (src, dst, samples * 3); + return samples; +} + +static INLINE long +conv_gaF_ga8 (unsigned char *src, unsigned char *dst, long samples) +{ + conv_F_8 (src, dst, samples * 2); + return samples; +} + +#define conv_rgbAF_rgbA8 conv_rgbaF_rgba8 +#define conv_gF_g8 conv_F_8 +#define conv_gAF_gA8 conv_gaF_ga8 + + +static INLINE long +conv_rgba8_rgbaF (unsigned char *src, unsigned char *dst, long samples) +{ + long n = samples; + + while (n--) + { + (*(float *) dst) = table_8g_F[*(unsigned char *) src]; + dst += 4; + src += 1; + + (*(float *) dst) = table_8g_F[*(unsigned char *) src]; + dst += 4; + src += 1; + + (*(float *) dst) = table_8g_F[*(unsigned char *) src]; + dst += 4; + src += 1; + + (*(float *) dst) = table_8_F[*(unsigned char *) src]; + dst += 4; + src += 1; + } + return samples; +} + +static INLINE long +conv_rgb8_rgbaF (unsigned char *src, unsigned char *dst, long samples) +{ + long n = samples; + + while (n--) + { + (*(float *) dst) = table_8g_F[*(unsigned char *) src]; + dst += 4; + src += 1; + + (*(float *) dst) = table_8g_F[*(unsigned char *) src]; + dst += 4; + src += 1; + + (*(float *) dst) = table_8g_F[*(unsigned char *) src]; + dst += 4; + src += 1; + + (*(float *) dst) = 1.0; + dst += 4; + } + return samples; +} + +static long +conv_rgbAF_rgb8 (unsigned char *srcc, + unsigned char *dstc, + long samples) +{ + float *src = (void *) srcc; + unsigned char *dst = (void *) dstc; + long n = samples; + + while (n--) + { + float alpha = src[3]; + if (alpha < BABL_ALPHA_THRESHOLD) + { + dst[0] = 0; + dst[1] = 0; + dst[2] = 0; + } + else + { + float alpha_recip = 1.0 / alpha; + dst[0] = table_F_8g[gggl_float_to_index16 (src[0] * alpha_recip)]; + dst[1] = table_F_8g[gggl_float_to_index16 (src[1] * alpha_recip)]; + dst[2] = table_F_8g[gggl_float_to_index16 (src[2] * alpha_recip)]; + } + src += 4; + dst += 3; + } + return samples; +} + +static long +conv_bgrA8_rgba8 (unsigned char *srcc, + unsigned char *dstc, + long samples) +{ + unsigned char *src = (void *) srcc; + unsigned char *dst = (void *) dstc; + long n = samples; + + while (n--) + { + unsigned char alpha = src[3]; + dst[0] = alpha ? (src[2] * 255 / alpha) : 0; + dst[1] = alpha ? (src[1] * 255 / alpha) : 0; + dst[2] = alpha ? (src[0] * 255 / alpha) : 0; + dst[3] = alpha; + src += 4; + dst += 4; + } + return samples; +} + + +static long +conv_rgbaF_rgbAF (unsigned char *srcc, + unsigned char *dstc, + long samples) +{ + float *src = (void *) srcc; + float *dst = (void *) dstc; + long n = samples; + + while (n--) + { + float alpha = src[3]; + dst[0] = src[0] * alpha; + dst[1] = src[1] * alpha; + dst[2] = src[2] * alpha; + dst[3] = alpha; + src += 4; + dst += 4; + } + return samples; +} + + +static long +conv_rgbAF_rgbaF (unsigned char *srcc, + unsigned char *dstc, + long samples) +{ + float *src = (void *) srcc; + float *dst = (void *) dstc; + long n = samples; + + while (n--) + { + float alpha = src[3]; + float recip; + if (alpha < BABL_ALPHA_THRESHOLD) + recip = 0.0; + else + recip = 1.0/alpha; + dst[0] = src[0] * recip; + dst[1] = src[1] * recip; + dst[2] = src[2] * recip; + dst[3] = alpha; + src += 4; + dst += 4; + } + return samples; +} + + + +static long +conv_rgbAF_lrgba8 (unsigned char *srcc, + unsigned char *dstc, + long samples) +{ + float *src = (void *) srcc; + unsigned char *dst = (void *) dstc; + long n = samples; + + while (n--) + { + float alpha = src[3]; + float recip = (1.0/alpha); + if (alpha < BABL_ALPHA_THRESHOLD) + { + dst[0] = dst[1] = dst[2] = dst[3] = 0; + } + else + { + dst[0] = table_F_8[gggl_float_to_index16 (src[0] * recip)]; + dst[1] = table_F_8[gggl_float_to_index16 (src[1] * recip)]; + dst[2] = table_F_8[gggl_float_to_index16 (src[2] * recip)]; + dst[3] = table_F_8[gggl_float_to_index16 (alpha)]; + } + src += 4; + dst += 4; + } + return samples; +} + +#define conv_rgb8_rgbAF conv_rgb8_rgbaF +#define conv_gamma_rgbaF_gamma_rgbAF conv_rgbaF_rgbAF +#define conv_gamma_rgbAF_gamma_rgbaF conv_rgbAF_rgbaF + +int init (void); + +int +init (void) +{ + const Babl *rgbaF = babl_format_new ( + babl_model ("RGBA"), + babl_type ("float"), + babl_component ("R"), + babl_component ("G"), + babl_component ("B"), + babl_component ("A"), + NULL); + const Babl *rgbAF = babl_format_new ( + babl_model ("RaGaBaA"), + babl_type ("float"), + babl_component ("Ra"), + babl_component ("Ga"), + babl_component ("Ba"), + babl_component ("A"), + NULL); + + + const Babl *gamma_rgbaF = babl_format_new ( + babl_model ("R'G'B'A"), + babl_type ("float"), + babl_component ("R'"), + babl_component ("G'"), + babl_component ("B'"), + babl_component ("A"), + NULL); + const Babl *gamma_rgbAF = babl_format_new ( + babl_model ("R'aG'aB'aA"), + babl_type ("float"), + babl_component ("R'a"), + babl_component ("G'a"), + babl_component ("B'a"), + babl_component ("A"), + NULL); + + const Babl *lrgba8 = babl_format_new ( + babl_model ("RGBA"), + babl_type ("u8"), + babl_component ("R"), + babl_component ("G"), + babl_component ("B"), + babl_component ("A"), + NULL); + + const Babl *rgba8 = babl_format_new ( + babl_model ("R'G'B'A"), + babl_type ("u8"), + babl_component ("R'"), + babl_component ("G'"), + babl_component ("B'"), + babl_component ("A"), + NULL); + const Babl *bgrA8 = babl_format_new ( + "name", "B'aG'aR'aA u8", + babl_model ("R'aG'aB'aA"), + babl_type ("u8"), + babl_component ("B'a"), + babl_component ("G'a"), + babl_component ("R'a"), + babl_component ("A"), + NULL); + const Babl *rgb8 = babl_format_new ( + babl_model ("R'G'B'"), + babl_type ("u8"), + babl_component ("R'"), + babl_component ("G'"), + babl_component ("B'"), + NULL); + + table_init (); + +#define o(src, dst) \ + babl_conversion_new (src, dst, "linear", conv_ ## src ## _ ## dst, NULL) + + o (rgbaF, rgbAF); + o (rgbAF, rgbaF); + + o (gamma_rgbaF, gamma_rgbAF); + o (gamma_rgbAF, gamma_rgbaF); + + o (rgbAF, lrgba8); + o (rgb8, rgbaF); + o (rgb8, rgbAF); + o (rgba8, rgbaF); + o (rgbaF, rgb8); + o (rgbAF, rgb8); + o (bgrA8, rgba8); + + return 0; +} diff --git a/extensions/gggl-lies.c b/extensions/gggl-lies.c new file mode 100644 index 0000000..22d0fee --- /dev/null +++ b/extensions/gggl-lies.c @@ -0,0 +1,880 @@ +/* + * This file was part of gggl, it implements a variety of pixel conversion + * functions that are usable with babl, the file needs more cleanup, and + * doesn't return the number of samples processed as a long, like it's + * supposed to. + * + * GGGL is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GGGL 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 GGGL; if not, see . + * + * Rights are granted to use this shared object in libraries covered by + * LGPL. (exception added, during import into babl CVS.) + * + * Copyright 2003, 2004, 2005 Øyvind Kolås + */ + +#define _POSIX_C_SOURCE 200112L + +#include "config.h" +#include +#include + +#include "babl.h" +#include "extensions/util.h" + +/* + * Implemented according to information read from: + * + * http://www.cinenet.net/~spitzak/conversion/sketches_0265.pdf + * + * initially ignoring any diffusion, to keep the implementation + * smaller, and interchangeable with the non optimized version. + * + * due to ability to be able to relicence gggl under a different + * licence than GPL, I avoided the temptation to look at the + * source files in the same location, in case I was going to + * need this piece of code for projects where GPL compatibility + * was a must. + * + * TODO: error diffusion, + * gamma correction (not really,. gamma correction belongs in seperate ops,. + */ + +static long +conv_F_8 (unsigned char *src, unsigned char *dst, long samples) +{ + long n = samples; + + while (n--) + { + float f = ((*(float *) src)); + if (f < 0.0) + { + *(unsigned char *) dst = 0; + } + else if (f > 1.0) + { + *(unsigned char *) dst = 255; + } + else + { + *(unsigned char *) dst = lrint (f * 255.0); + } + dst += 1; + src += 4; + } + return samples; +} + +static long +conv_F_16 (unsigned char *src, unsigned char *dst, long samples) +{ + long n = samples; + + while (n--) + { + float f = ((*(float *) src)); + if (f < 0.0) + { + *(unsigned short *) dst = 0; + } + else if (f > 1.0) + { + *(unsigned short *) dst = 65535; + } + else + { + *(unsigned short *) dst = lrint (f * 65535.0); + } + dst += 2; + src += 4; + } + return samples; +} + + + +static long +conv_8_F (unsigned char *src, unsigned char *dst, long samples) +{ + long n = samples; + + while (n--) + { + (*(float *) dst) = (*(unsigned char *) src / 255.0); + dst += 4; + src += 1; + } + return samples; +} + +static long +conv_16_F (unsigned char *src, unsigned char *dst, long samples) +{ + long n = samples; + + while (n--) + { + (*(float *) dst) = *(unsigned short *) src / 65535.0; + dst += 4; + src += 2; + } + return samples; +} + +static long +conv_F_D (unsigned char *src, unsigned char *dst, long samples) +{ + long n = samples; + + while (n--) + { + *(double *) dst = ((*(float *) src)); + dst += 8; + src += 4; + } + return samples; +} + +static long +conv_D_F (unsigned char *src, unsigned char *dst, long samples) +{ + long n = samples; + + while (n--) + { + *(float *) dst = ((*(double *) src)); + dst += 4; + src += 8; + } + return samples; +} +static long +conv_16_8 (unsigned char *src, unsigned char *dst, long samples) +{ + long n = samples; + + while (n--) + { +#define div_257(a) ((((a)+128)-(((a)+128)>>8))>>8) + (*(unsigned char *) dst) = div_257 (*(unsigned short *) src); + dst += 1; + src += 2; + } + return samples; +} + +static long +conv_8_16 (unsigned char *src, unsigned char *dst, long samples) +{ + long n = samples; + + while (n--) + { + (*(unsigned short *) dst) = ((*(unsigned char *) src) << 8) | *src; + dst += 2; + src += 1; + } + return samples; +} + +/*********/ +static long +conv_rgbaF_rgba8 (unsigned char *src, unsigned char *dst, long samples) +{ + conv_F_8 (src, dst, samples * 4); + return samples; +} + +#define conv_rgbaF_rgbP8 conv_rgbaF_rgba8 + +static long +conv_rgbF_rgb8 (unsigned char *src, unsigned char *dst, long samples) +{ + conv_F_8 (src, dst, samples * 3); + return samples; +} + +static long +conv_gaF_ga8 (unsigned char *src, unsigned char *dst, long samples) +{ + conv_F_8 (src, dst, samples * 2); + return samples; +} + +#define conv_rgbAF_rgbA8 conv_rgbaF_rgba8 +#define conv_gF_g8 conv_F_8 +#define conv_gAF_gA8 conv_gaF_ga8 + +static long +conv_rgbaF_rgba16 (unsigned char *src, unsigned char *dst, long samples) +{ + conv_F_16 (src, dst, samples * 4); + return samples; +} + +static long +conv_rgbaF_rgbaD (unsigned char *src, unsigned char *dst, long samples) +{ + conv_F_D (src, dst, samples * 4); + return samples; +} + +static long +conv_rgbaD_rgbaF (unsigned char *src, unsigned char *dst, long samples) +{ + conv_D_F (src, dst, samples * 4); + return samples; +} + +static long +conv_rgbF_rgb16 (unsigned char *src, unsigned char *dst, long samples) +{ + conv_F_16 (src, dst, samples * 3); + return samples; +} + +static long +conv_gaF_ga16 (unsigned char *src, unsigned char *dst, long samples) +{ + conv_F_16 (src, dst, samples * 2); + return samples; +} + +#define conv_rgbAF_rgbAD conv_rgbaF_rgbaD +#define conv_rgbAD_rgbAD conv_rgbaD_rgbaF +#define conv_rgbAF_rgbA16 conv_rgbaF_rgba16 +#define conv_gF_g16 conv_F_16 +#define conv_gAF_gA16 conv_gaF_ga16 + +static long +conv_rgba8_rgbaF (unsigned char *src, unsigned char *dst, long samples) +{ + conv_8_F (src, dst, samples * 4); + return samples; +} + +static long +conv_rgb8_rgbF (unsigned char *src, unsigned char *dst, long samples) +{ + conv_8_F (src, dst, samples * 3); + return samples; +} + +static long +conv_ga8_gaF (unsigned char *src, unsigned char *dst, long samples) +{ + conv_8_F (src, dst, samples * 2); + return samples; +} + +#define conv_rgbA8_rgbAF conv_rgba8_rgbaF +#define conv_gA8_gAF conv_ga8_gaF +#define conv_g8_gF conv_8_F + +static long +conv_rgba16_rgbaF (unsigned char *src, unsigned char *dst, long samples) +{ + conv_16_F (src, dst, samples * 4); + return samples; +} + +static long +conv_rgb16_rgbF (unsigned char *src, unsigned char *dst, long samples) +{ + conv_16_F (src, dst, samples * 3); + return samples; +} + +static long +conv_ga16_gaF (unsigned char *src, unsigned char *dst, long samples) +{ + conv_16_F (src, dst, samples * 2); + return samples; +} + +#define conv_rgbA16_rgbAF conv_rgba16_rgbaF +#define conv_gA16_gAF conv_ga16_gaF +#define conv_g16_gF conv_16_F + +static long +conv_rgba16_rgba8 (unsigned char *src, unsigned char *dst, long samples) +{ + conv_16_8 (src, dst, samples * 4); + return samples; +} + +static long +conv_rgb16_rgb8 (unsigned char *src, unsigned char *dst, long samples) +{ + conv_16_8 (src, dst, samples * 3); + return samples; +} + +static long +conv_ga16_ga8 (unsigned char *src, unsigned char *dst, long samples) +{ + conv_16_8 (src, dst, samples * 2); + return samples; +} + +#define conv_rgbA16_rgbA8 conv_rgba16_rgba8 +#define conv_gA16_gA8 conv_ga16_ga8 +#define conv_g16_g8 conv_16_8 + +static long +conv_rgba8_rgba16 (unsigned char *src, unsigned char *dst, long samples) +{ + conv_8_16 (src, dst, samples * 4); + return samples; +} + +static long +conv_rgb8_rgb16 (unsigned char *src, unsigned char *dst, long samples) +{ + conv_8_16 (src, dst, samples * 3); + return samples; +} + +static long +conv_ga8_ga16 (unsigned char *src, unsigned char *dst, long samples) +{ + conv_8_16 (src, dst, samples * 2); + return samples; +} + +#define conv_rgbA8_rgbA16 conv_rgba8_rgba16 +#define conv_gA8_gA16 conv_ga8_ga16 +#define conv_g8_g16 conv_8_16 + +/* alpha conversions */ + +static long +conv_gaF_gAF (unsigned char *src, unsigned char *dst, long samples) +{ + long n = samples; + + while (n--) + { + float alpha = (*(float *) (src + 4)); + + *(float *) dst = ((*(float *) src) * alpha); + dst += 4; + src += 4; + *(float *) dst = alpha; + dst += 4; + src += 4; + } + return samples; +} + +static long +conv_gAF_gaF (unsigned char *src, unsigned char *dst, long samples) +{ + long n = samples; + + while (n--) + { + float alpha = (*(float *) (src + 4)); + + *(float *) dst = ((*(float *) src) / alpha); + dst += 4; + src += 4; + *(float *) dst = alpha; + dst += 4; + src += 4; + } + return samples; +} + +/* alpha stripping and adding */ + +static long +conv_rgbaF_rgbF (unsigned char *src, unsigned char *dst, long samples) +{ + long n = samples; + + while (n--) + { + *(int *) dst = (*(int *) src); + dst += 4; + src += 4; + *(int *) dst = (*(int *) src); + dst += 4; + src += 4; + *(int *) dst = (*(int *) src); + dst += 4; + src += 4; + src += 4; + } + return samples; +} + +static long +conv_rgbF_rgbaF (unsigned char *src, unsigned char *dst, long samples) +{ + long n = samples; + + while (n--) + { + *(int *) dst = (*(int *) src); + dst += 4; + src += 4; + *(int *) dst = (*(int *) src); + dst += 4; + src += 4; + *(int *) dst = (*(int *) src); + dst += 4; + src += 4; + *(float *) dst = 1.0; + dst += 4; + } + return samples; +} + +static long +conv_gaF_gF (unsigned char *src, unsigned char *dst, long samples) +{ + long n = samples; + + while (n--) + { + *(int *) dst = (*(int *) src); + dst += 4; + src += 4; + src += 4; + } + return samples; +} + +static long +conv_gF_gaF (unsigned char *src, unsigned char *dst, long samples) +{ + long n = samples; + + while (n--) + { + *(int *) dst = (*(int *) src); + dst += 4; + src += 4; + *(float *) dst = 1.0; + dst += 4; + } + return samples; +} + +#define conv_gF_gAF conv_gF_gaF + +#define conv_rgbF_rgbAF conv_rgbF_rgbaF + +/* colorchannel dropping and adding */ + +static long +conv_gF_rgbF (unsigned char *src, unsigned char *dst, long samples) +{ + long n = samples; + + while (n--) + { + int c; + + for (c = 0; c < 3; c++) + { + (*(int *) dst) = (*(int *) src); + dst += 4; + } + src += 4; + } + return samples; +} + +static long +conv_gaF_rgbaF (unsigned char *src, unsigned char *dst, long samples) +{ + long n = samples; + + while (n--) + { + int c; + + for (c = 0; c < 3; c++) + { + (*(int *) dst) = (*(int *) src); + dst += 4; + } + src += 4; + (*(int *) dst) = (*(int *) src); + dst += 4; + src += 4; + } + return samples; +} + +#define conv_gAF_rgbAF conv_gaF_rgbaF + +/* other conversions coded for some optimisation reason or sumthin */ + +static long +conv_rgbaF_rgbA8 (unsigned char *src, unsigned char *dst, long samples) +{ + long n = samples; + + while (n--) + { + float alpha = (*(float *) (src + (4 * 3))); + int c; + + for (c = 0; c < 3; c++) + { + *(unsigned char *) dst = lrint (((*(float *) src) * alpha) * 255.0); + dst += 1; + src += 4; + } + *(unsigned char *) dst = lrint (alpha * 255.0); + dst++; + src += 4; + } + return samples; +} + +static long +conv_rgbaF_rgb8 (unsigned char *src, unsigned char *dst, long samples) +{ + long n = samples; + + while (n--) + { + int c; + + for (c = 0; c < 3; c++) + { + *(unsigned char *) dst = lrint ((*(float *) src) * 255.0); + dst += 1; + src += 4; + } + src += 4; + } + return samples; +} + +static long +conv_rgbaF_rgb16 (unsigned char *src, unsigned char *dst, long samples) +{ + long n = samples; + + while (n--) + { + int c; + + for (c = 0; c < 3; c++) + { + *(unsigned short *) dst = lrint ((*(float *) src) * 65535.0); + dst += 2; + src += 4; + } + src += 4; + } + return samples; +} + +static long +conv_rgba8_rgbA8 (unsigned char *src, unsigned char *dst, long samples) +{ + long n = samples; + + while (n--) + { + if (src[3] == 255) + { + *(unsigned int *) dst = *(unsigned int *) src; + } + else if (src[3] == 0) + { + *(unsigned int *) dst = 0; + } + else + { +#define div_255(a) ((((a)+127)+(((a)+127)>>8))>>8) + dst[0] = div_255 (src[0] * src[3]); + dst[1] = div_255 (src[1] * src[3]); + dst[2] = div_255 (src[2] * src[3]); + dst[3] = src[3]; + } + dst += 4; + src += 4; + } + return samples; +} + +static long +conv_rgbA8_rgba8 (unsigned char *src, unsigned char *dst, long samples) +{ + long n = samples; + + while (n--) + { + if (src[3] == 255) + { + *(unsigned int *) dst = *(unsigned int *) src; + dst += 4; + } + else if (src[3] == 0) + { + *(unsigned int *) dst = 0; + dst += 4; + } + else + { + unsigned int aa = ((255 << 16) + (src[3] >> 1)) / src[3]; + *dst++ = (src[0] * aa + 0x8000) >> 16; + *dst++ = (src[1] * aa + 0x8000) >> 16; + *dst++ = (src[2] * aa + 0x8000) >> 16; + *dst++ = src[3]; + } + src += 4; + } + return samples; +} + +static long +conv_rgb8_rgba8 (unsigned char *src, unsigned char *dst, long samples) +{ + long n = samples; + + while (n--) + { + dst[0] = src[0]; + dst[1] = src[1]; + dst[2] = src[2]; + dst[3] = 255; + src += 3; + dst += 4; + } + + return samples; +} + +#define conv_rgb8_rgbA8 conv_rgb8_rgba8 + +static long +conv_rgba8_rgb8 (unsigned char *src, unsigned char *dst, long samples) +{ + long n = samples; + + while (n--) + { + dst[0] = src[0]; + dst[1] = src[1]; + dst[2] = src[2]; + src += 4; + dst += 3; + } + return samples; +} + +int init (void); + +int +init (void) +{ + const Babl *rgbaF = babl_format_new ( + babl_model ("RGBA"), + babl_type ("float"), + babl_component ("R"), + babl_component ("G"), + babl_component ("B"), + babl_component ("A"), + NULL); + const Babl *rgba16 = babl_format_new ( + babl_model ("RGBA"), + babl_type ("u16"), + babl_component ("R"), + babl_component ("G"), + babl_component ("B"), + babl_component ("A"), + NULL); + const Babl *rgbaD = babl_format_new ( + babl_model ("RGBA"), + babl_type ("double"), + babl_component ("R"), + babl_component ("G"), + babl_component ("B"), + babl_component ("A"), + NULL); + const Babl *rgba8 = babl_format_new ( + babl_model ("RGBA"), + babl_type ("u8"), + babl_component ("R"), + babl_component ("G"), + babl_component ("B"), + babl_component ("A"), + NULL); + const Babl *rgbAF = babl_format_new ( + babl_model ("RaGaBaA"), + babl_type ("float"), + babl_component ("Ra"), + babl_component ("Ga"), + babl_component ("Ba"), + babl_component ("A"), + NULL); + const Babl *rgbA16 = babl_format_new ( + babl_model ("RaGaBaA"), + babl_type ("u16"), + babl_component ("Ra"), + babl_component ("Ga"), + babl_component ("Ba"), + babl_component ("A"), + NULL); + const Babl *rgbA8 = babl_format_new ( + babl_model ("RaGaBaA"), + babl_type ("u8"), + babl_component ("Ra"), + babl_component ("Ga"), + babl_component ("Ba"), + babl_component ("A"), + NULL); + const Babl *rgbF = babl_format_new ( + babl_model ("RGB"), + babl_type ("float"), + babl_component ("R"), + babl_component ("G"), + babl_component ("B"), + NULL); + const Babl *rgb16 = babl_format_new ( + babl_model ("RGB"), + babl_type ("u16"), + babl_component ("R"), + babl_component ("G"), + babl_component ("B"), + NULL); + const Babl *rgb8 = babl_format_new ( + babl_model ("RGB"), + babl_type ("u8"), + babl_component ("R"), + babl_component ("G"), + babl_component ("B"), + NULL); + const Babl *gaF = babl_format_new ( + babl_model ("YA"), + babl_type ("float"), + babl_component ("Y"), + babl_component ("A"), + NULL); + const Babl *gAF = babl_format_new ( + babl_model ("YaA"), + babl_type ("float"), + babl_component ("Ya"), + babl_component ("A"), + NULL); + const Babl *gF = babl_format_new ( + babl_model ("Y"), + babl_type ("float"), + babl_component ("Y"), + NULL); + const Babl *ga16 = babl_format_new ( + babl_model ("YA"), + babl_type ("u16"), + babl_component ("Y"), + babl_component ("A"), + NULL); + const Babl *gA16 = babl_format_new ( + babl_model ("YaA"), + babl_type ("u16"), + babl_component ("Ya"), + babl_component ("A"), + NULL); + const Babl *g16 = babl_format_new ( + babl_model ("Y"), + babl_type ("u16"), + babl_component ("Y"), + NULL); + const Babl *ga8 = babl_format_new ( + babl_model ("YA"), + babl_type ("u8"), + babl_component ("Y"), + babl_component ("A"), + NULL); + const Babl *gA8 = babl_format_new ( + babl_model ("YaA"), + babl_type ("u8"), + babl_component ("Ya"), + babl_component ("A"), + NULL); + const Babl *g8 = babl_format_new ( + babl_model ("Y"), + babl_type ("u8"), + babl_component ("Y"), + NULL); + +#define o(src, dst) \ + babl_conversion_new (src, dst, "linear", conv_ ## src ## _ ## dst, NULL) + + o (rgbaF, rgbaD); + o (rgbaD, rgbaF); + o (rgbaF, rgba8); + o (rgba8, rgbaF); + o (rgbaF, rgba16); + o (rgba16, rgbaF); + o (rgbAF, rgbA8); + o (rgbA8, rgbAF); + o (rgbAF, rgbA16); + o (rgbA16, rgbAF); + o (rgbF, rgb8); + o (rgb8, rgbF); + o (rgbF, rgb16); + o (rgb16, rgbF); + o (rgba8, rgba16); + o (rgba16, rgba8); + o (rgbA8, rgbA16); + o (rgbA16, rgbA8); + o (rgb8, rgb16); + o (rgb16, rgb8); + o (gaF, ga8); + o (gAF, gA8); + o (gF, g8); + o (ga8, gaF); + o (gA8, gAF); + o (g8, gF); + o (gaF, ga16); + o (gAF, gA16); + o (gF, g16); + o (ga16, gaF); + o (gA16, gAF); + o (g16, gF); + o (ga16, ga8); + o (g16, g8); + o (ga8, ga16); + o (gA8, gA16); + o (g8, g16); + o (gaF, gAF); + o (gAF, gaF); + o (rgbaF, rgbF); + o (gaF, gF); + o (rgbF, rgbaF); + o (rgbF, rgbAF); + o (gF, gaF); + o (gF, gAF); + o (gF, rgbF); + o (gaF, rgbaF); + o (gAF, rgbAF); + o (rgbaF, rgb8); + o (rgbA8, rgba8); + o (rgba8, rgbA8); + o (rgbaF, rgb16); + o (rgb8, rgba8); + o (rgb8, rgbA8); + o (rgba8, rgb8); + o (rgbaF, rgbA8); + + return 0; +} diff --git a/extensions/gggl-table-lies.c b/extensions/gggl-table-lies.c new file mode 100644 index 0000000..3e79a6f --- /dev/null +++ b/extensions/gggl-table-lies.c @@ -0,0 +1,479 @@ +/* + * This file was part of gggl, it implements a variety of pixel conversion + * functions that are usable with babl, the file needs more cleanup, and + * doesn't return the number of samples processed as a long, like it's + * supposed to. + * + * GGGL is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GGGL 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 GGGL; if not, see . + * + * Rights are granted to use this shared object in libraries covered by + * LGPL. (exception added, during import into babl CVS.) + * + * Copyright 2003, 2004, 2005 Øyvind Kolås + */ + +#define _POSIX_C_SOURCE 200112L + +#include "config.h" +#include +#include + +#include "babl.h" +#include "extensions/util.h" + +/* + * Implemented according to information read from: + * + * http://www.cinenet.net/~spitzak/conversion/sketches_0265.pdf + * + * initially ignoring any diffusion, to keep the implementation + * smaller, and interchangeable with the non optimized version. + * + * due to ability to be able to relicence gggl under a different + * licence than GPL, I avoided the temptation to look at the + * source files in the same location, in case I was going to + * need this piece of code for projects where GPL compatibility + * was a must. + * + * TODO: error diffusion, + * gamma correction (not really,. gamma correction belongs in seperate ops,. + */ + +/* lookup tables used in conversion */ + +static float table_8_F[1 << 8]; +static float table_16_F[1 << 16]; +static unsigned char table_F_8[1 << 16]; +static unsigned short table_F_16[1 << 16]; + + +static int table_inited = 0; + +static void +table_init (void) +{ + int i; + + if (table_inited) + return; + table_inited = 1; + + /* fill tables for conversion from integer to float */ + for (i = 0; i < 1 << 8; i++) + { + table_8_F[i] = (i * 1.0) / 255.0; + } + for (i = 0; i < 1 << 16; i++) + { + table_16_F[i] = (i * 1.0) / 65535.0; + } + /* fill tables for conversion from float to integer */ + { + union + { + float f; + unsigned short s[2]; + } u; + u.f = 0.0; + + u.s[0] = 0x8000; + + for (i = 0; i < 1 << 16; i++) + { + unsigned char c; + unsigned short s; + + u.s[1] = i; + + if (u.f <= 0.0) + { + c = 0; + s = 0; + } + else if (u.f >= 1.0) + { + c = 255; + s = 65535; + } + else + { + c = lrint (u.f * 255.0); + s = lrint (u.f * 65535.0); + } + + /*fprintf (stderr, "%2.3f=%03i %05i ", f, c, (*hi)); + / if (! ((*hi)%9)) + / fprintf (stderr, "\n"); */ + + table_F_8[u.s[1]] = c; + table_F_16[u.s[1]] = s; + } + } + /* fix tables to ensure 1:1 conversions back and forth */ + if (0) + { /*FIXME: probably not the right way to do it,.. must sit down and scribble on paper */ + int i; + for (i = 0; i < 256; i++) + { + float f = table_8_F[i]; + unsigned short *hi = ((unsigned short *) (void *) &f); + unsigned short *lo = ((unsigned short *) (void *) &f); + *lo = 0; + table_F_8[(*hi)] = i; + } + } +} + +/* function to find the index in table for a float */ +static unsigned int +gggl_float_to_index16 (float f) +{ + union + { + float f; + unsigned short s[2]; + } u; + u.f = f; + return u.s[1]; +} + + +static long +conv_F_8 (unsigned char *src, unsigned char *dst, long samples) +{ + long n = samples; + + if (!table_inited) + table_init (); + while (n--) + { + register float f = (*(float *) src); + *(unsigned char *) dst = table_F_8[gggl_float_to_index16 (f)]; + dst += 1; + src += 4; + } + return samples; +} + +static long +conv_F_16 (unsigned char *src, unsigned char *dst, long samples) +{ + long n = samples; + + if (!table_inited) + table_init (); + while (n--) + { + register float f = (*(float *) src); + *(unsigned short *) dst = table_F_16[gggl_float_to_index16 (f)]; + dst += 2; + src += 4; + } + return samples; +} + +static long +conv_8_F (unsigned char *src, unsigned char *dst, long samples) +{ + long n = samples; + + if (!table_inited) + table_init (); + while (n--) + { + (*(float *) dst) = table_8_F[*(unsigned char *) src]; + dst += 4; + src += 1; + } + return samples; +} + +static long +conv_16_F (unsigned char *src, unsigned char *dst, long samples) +{ + long n = samples; + + if (!table_inited) + table_init (); + while (n--) + { + (*(float *) dst) = table_16_F[*(unsigned short *) src]; + dst += 4; + src += 2; + } + return samples; +} + +/*********/ +static long +conv_rgbaF_rgba8 (unsigned char *src, unsigned char *dst, long samples) +{ + conv_F_8 (src, dst, samples * 4); + return samples; +} + +#define conv_rgbaF_rgbP8 conv_rgbaF_rgba8 + +static long +conv_rgbF_rgb8 (unsigned char *src, unsigned char *dst, long samples) +{ + conv_F_8 (src, dst, samples * 3); + return samples; +} + +static long +conv_gaF_ga8 (unsigned char *src, unsigned char *dst, long samples) +{ + conv_F_8 (src, dst, samples * 2); + return samples; +} + +#define conv_rgbAF_rgbA8 conv_rgbaF_rgba8 +#define conv_gF_g8 conv_F_8 +#define conv_gAF_gA8 conv_gaF_ga8 + +static long +conv_rgbaF_rgba16 (unsigned char *src, unsigned char *dst, long samples) +{ + conv_F_16 (src, dst, samples * 4); + return samples; +} + +static long +conv_rgbF_rgb16 (unsigned char *src, unsigned char *dst, long samples) +{ + conv_F_16 (src, dst, samples * 3); + return samples; +} + +static long +conv_gaF_ga16 (unsigned char *src, unsigned char *dst, long samples) +{ + conv_F_16 (src, dst, samples * 2); + return samples; +} + +#define conv_rgbAF_rgbA16 conv_rgbaF_rgba16 +#define conv_gF_g16 conv_F_16 +#define conv_gAF_gA16 conv_gaF_ga16 + +static long +conv_rgba8_rgbaF (unsigned char *src, unsigned char *dst, long samples) +{ + conv_8_F (src, dst, samples * 4); + return samples; +} + +static long +conv_rgb8_rgbF (unsigned char *src, unsigned char *dst, long samples) +{ + conv_8_F (src, dst, samples * 3); + return samples; +} + +static long +conv_ga8_gaF (unsigned char *src, unsigned char *dst, long samples) +{ + conv_8_F (src, dst, samples * 2); + return samples; +} + +#define conv_rgbA8_rgbAF conv_rgba8_rgbaF +#define conv_gA8_gAF conv_ga8_gaF +#define conv_g8_gF conv_8_F + +static long +conv_rgba16_rgbaF (unsigned char *src, unsigned char *dst, long samples) +{ + conv_16_F (src, dst, samples * 4); + return samples; +} + +static long +conv_rgb16_rgbF (unsigned char *src, unsigned char *dst, long samples) +{ + conv_16_F (src, dst, samples * 3); + return samples; +} + +static long +conv_ga16_gaF (unsigned char *src, unsigned char *dst, long samples) +{ + conv_16_F (src, dst, samples * 2); + return samples; +} + +#define conv_rgbA16_rgbAF conv_rgba16_rgbaF +#define conv_gA16_gAF conv_ga16_gaF +#define conv_g16_gF conv_16_F + +int init (void); + +int +init (void) +{ + const Babl *rgbaF = babl_format_new ( + babl_model ("RGBA"), + babl_type ("float"), + babl_component ("R"), + babl_component ("G"), + babl_component ("B"), + babl_component ("A"), + NULL); + const Babl *rgba16 = babl_format_new ( + babl_model ("RGBA"), + babl_type ("u16"), + babl_component ("R"), + babl_component ("G"), + babl_component ("B"), + babl_component ("A"), + NULL); + const Babl *rgba8 = babl_format_new ( + babl_model ("RGBA"), + babl_type ("u8"), + babl_component ("R"), + babl_component ("G"), + babl_component ("B"), + babl_component ("A"), + NULL); + const Babl *rgbAF = babl_format_new ( + babl_model ("RaGaBaA"), + babl_type ("float"), + babl_component ("Ra"), + babl_component ("Ga"), + babl_component ("Ba"), + babl_component ("A"), + NULL); + const Babl *rgbA16 = babl_format_new ( + babl_model ("RaGaBaA"), + babl_type ("u16"), + babl_component ("Ra"), + babl_component ("Ga"), + babl_component ("Ba"), + babl_component ("A"), + NULL); + const Babl *rgbA8 = babl_format_new ( + babl_model ("RaGaBaA"), + babl_type ("u8"), + babl_component ("Ra"), + babl_component ("Ga"), + babl_component ("Ba"), + babl_component ("A"), + NULL); + const Babl *rgbF = babl_format_new ( + babl_model ("RGB"), + babl_type ("float"), + babl_component ("R"), + babl_component ("G"), + babl_component ("B"), + NULL); + const Babl *rgb16 = babl_format_new ( + babl_model ("RGB"), + babl_type ("u16"), + babl_component ("R"), + babl_component ("G"), + babl_component ("B"), + NULL); + const Babl *rgb8 = babl_format_new ( + babl_model ("RGB"), + babl_type ("u8"), + babl_component ("R"), + babl_component ("G"), + babl_component ("B"), + NULL); + const Babl *gaF = babl_format_new ( + babl_model ("YA"), + babl_type ("float"), + babl_component ("Y"), + babl_component ("A"), + NULL); + const Babl *gAF = babl_format_new ( + babl_model ("YaA"), + babl_type ("float"), + babl_component ("Ya"), + babl_component ("A"), + NULL); + const Babl *gF = babl_format_new ( + babl_model ("Y"), + babl_type ("float"), + babl_component ("Y"), + NULL); + const Babl *ga16 = babl_format_new ( + babl_model ("YA"), + babl_type ("u16"), + babl_component ("Y"), + babl_component ("A"), + NULL); + const Babl *gA16 = babl_format_new ( + babl_model ("YaA"), + babl_type ("u16"), + babl_component ("Ya"), + babl_component ("A"), + NULL); + const Babl *g16 = babl_format_new ( + babl_model ("Y"), + babl_type ("u16"), + babl_component ("Y"), + NULL); + const Babl *ga8 = babl_format_new ( + babl_model ("YA"), + babl_type ("u8"), + babl_component ("Y"), + babl_component ("A"), + NULL); + const Babl *gA8 = babl_format_new ( + babl_model ("YaA"), + babl_type ("u8"), + babl_component ("Ya"), + babl_component ("A"), + NULL); + const Babl *g8 = babl_format_new ( + babl_model ("Y"), + babl_type ("u8"), + babl_component ("Y"), + NULL); + +#define o(src, dst) \ + babl_conversion_new (src, dst, "linear", conv_ ## src ## _ ## dst, NULL) + + o (rgbaF, rgba8); + o (rgba8, rgbaF); + o (rgbaF, rgba16); + o (rgba16, rgbaF); + o (rgbAF, rgbA8); + o (rgbA8, rgbAF); + o (rgbAF, rgbA16); + o (rgbA16, rgbAF); + o (rgbF, rgb8); + o (rgb8, rgbF); + o (rgbF, rgb16); + o (rgb16, rgbF); + o (gaF, ga8); + o (gAF, gA8); + o (gF, g8); + o (ga8, gaF); + o (gA8, gAF); + o (g8, gF); + o (gaF, ga16); + o (gAF, gA16); + o (gF, g16); + o (ga16, gaF); + o (gA16, gAF); + o (g16, gF); + + if (!table_inited) + table_init (); + + return 0; +} diff --git a/extensions/gggl-table.c b/extensions/gggl-table.c new file mode 100644 index 0000000..071167d --- /dev/null +++ b/extensions/gggl-table.c @@ -0,0 +1,528 @@ +/* + * This file was part of gggl, it implements a variety of pixel conversion + * functions that are usable with babl, the file needs more cleanup. + * + * GGGL is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GGGL 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 GGGL; if not, see . + * + * Rights are granted to use this shared object in libraries covered by + * LGPL. (exception added, during import into babl CVS.) + * + * Copyright 2003, 2004, 2005 Øyvind Kolås + */ + +#define _POSIX_C_SOURCE 200112L + +#include "config.h" +#include +#include +#include + +#include "babl.h" +#include "extensions/util.h" + +/* + * Implemented according to information read from: + * + * http://www.cinenet.net/~spitzak/conversion/sketches_0265.pdf + * + * initially ignoring any diffusion, to keep the implementation + * smaller, and interchangeable with the non optimized version. + * + * due to ability to be able to relicence gggl under a different + * licence than GPL, I avoided the temptation to look at the + * source files in the same location, in case I was going to + * need this piece of code for projects where GPL compatibility + * was a must. + * + * TODO: error diffusion, + * gamma correction (not really,. gamma correction belongs in seperate ops,. + */ + +/* lookup tables used in conversion */ + +static float table_8_F[1 << 8]; +static float table_16_F[1 << 16]; +static unsigned char table_F_8[1 << 16]; +static unsigned short table_F_16[1 << 16]; + +static uint32_t *table_8_F_int = NULL; + +static int table_inited = 0; + +static void +table_init (void) +{ + if (table_inited) + return; + + table_8_F_int = (void*)(table_8_F); + + table_inited = 1; + + /* fill tables for conversion from integer to float */ + { + int i; + for (i = 0; i < 1 << 8; i++) + { + table_8_F[i] = (i * 1.0) / 255.0; + } + for (i = 0; i < 1 << 16; i++) + table_16_F[i] = (i * 1.0) / 65535.0; + } + /* fill tables for conversion from float to integer */ + { + union + { + float f; + unsigned short s[2]; + } u; + u.f = 0.0; + + u.s[0] = 0x8000; + + for (u.s[1] = 0; u.s[1] < 65535; u.s[1] += 1) + { + unsigned char c; + unsigned short s; + + if (u.f <= 0.0) + { + c = 0; + s = 0; + } + else if (u.f >= 1.0) + { + c = 255; + s = 65535; + } + else + { + c = lrint (u.f * 255.0); + s = lrint (u.f * 65535.0); + } + + /*fprintf (stderr, "%2.3f=%03i %05i ", f, c, (*hi)); + / if (! ((*hi)%9)) + / fprintf (stderr, "\n"); */ + + table_F_8[u.s[1]] = c; + table_F_16[u.s[1]] = s; + } + } + /* fix tables to ensure 1:1 conversions back and forth */ + if (0) + { /*FIXME: probably not the right way to do it,.. must sit down and scribble on paper */ + int i; + for (i = 0; i < 256; i++) + { + float f = table_8_F[i]; + unsigned short *hi = ((unsigned short *) (void *) &f); + unsigned short *lo = ((unsigned short *) (void *) &f); + *lo = 0; + table_F_8[(*hi)] = i; + } + } +} + +/* function to find the index in table for a float */ +static unsigned int +gggl_float_to_index16 (float f) +{ + union + { + float f; + unsigned short s[2]; + } u; + u.f = f; + return u.s[1]; +} + +static long +conv_F_8 (unsigned char *src, unsigned char *dst, long samples) +{ + long n = samples; + + if (!table_inited) + table_init (); + while (n--) + { + register float f = (*(float *) src); + *(unsigned char *) dst = table_F_8[gggl_float_to_index16 (f)]; + dst += 1; + src += 4; + } + return samples; +} + +static long +conv_F_16 (unsigned char *src, unsigned char *dst, long samples) +{ + long n = samples; + + if (!table_inited) + table_init (); + while (n--) + { + register float f = (*(float *) src); + *(unsigned short *) dst = table_F_16[gggl_float_to_index16 (f)]; + dst += 2; + src += 4; + } + return samples; +} + +static long +conv_8_F (unsigned char *src, unsigned char *dst, long samples) +{ + long n = samples; + + if (!table_inited) + table_init (); + while (n--) + { + (*(uint32_t *) dst) = table_8_F_int[*(unsigned char *) src]; + dst += 4; + src += 1; + } + return samples; +} + +static long +conv_rgb8_rgbaF (unsigned char *src, unsigned char *dst, long samples) +{ + long n = samples; + + if (!table_inited) + table_init (); + while (n--) + { + (*(uint32_t *) dst) = table_8_F_int[*(unsigned char *) src]; + dst += 4; + src += 1; + (*(uint32_t *) dst) = table_8_F_int[*(unsigned char *) src]; + dst += 4; + src += 1; + (*(uint32_t *) dst) = table_8_F_int[*(unsigned char *) src]; + dst += 4; + src += 1; + (*(float *) dst) = 1.0; + dst += 4; + } + return samples; +} + +static long +conv_16_F (unsigned char *src, unsigned char *dst, long samples) +{ + long n = samples; + + if (!table_inited) + table_init (); + while (n--) + { + (*(float *) dst) = table_16_F[*(unsigned short *) src]; + dst += 4; + src += 2; + } + return samples; +} + +static long +conv_rgbaF_rgb8 (unsigned char *src, unsigned char *dst, long samples) +{ + long n = samples; + + while (n--) + { + register float f = (*(float *) src); + *(unsigned char *) dst = table_F_8[gggl_float_to_index16 (f)]; + src += 4; + dst += 1; + + f = (*(float *) src); + *(unsigned char *) dst = table_F_8[gggl_float_to_index16 (f)]; + src += 4; + dst += 1; + + f = (*(float *) src); + *(unsigned char *) dst = table_F_8[gggl_float_to_index16 (f)]; + src += 4; + dst += 1; + + src += 4; + } + return samples; +} + + +/*********/ +static long +conv_rgbaF_rgba8 (unsigned char *src, unsigned char *dst, long samples) +{ + conv_F_8 (src, dst, samples * 4); + return samples; +} + +static long +conv_rgbF_rgb8 (unsigned char *src, unsigned char *dst, long samples) +{ + conv_F_8 (src, dst, samples * 3); + return samples; +} + +static long +conv_gaF_ga8 (unsigned char *src, unsigned char *dst, long samples) +{ + conv_F_8 (src, dst, samples * 2); + return samples; +} + +#define conv_rgbAF_rgbA8 conv_rgbaF_rgba8 +#define conv_gF_g8 conv_F_8 +#define conv_gAF_gA8 conv_gaF_ga8 + +static long +conv_rgbaF_rgba16 (unsigned char *src, unsigned char *dst, long samples) +{ + conv_F_16 (src, dst, samples * 4); + return samples; +} + +static long +conv_rgbF_rgb16 (unsigned char *src, unsigned char *dst, long samples) +{ + conv_F_16 (src, dst, samples * 3); + return samples; +} + +static long +conv_gaF_ga16 (unsigned char *src, unsigned char *dst, long samples) +{ + conv_F_16 (src, dst, samples * 2); + return samples; +} + +#define conv_rgbAF_rgbA16 conv_rgbaF_rgba16 +#define conv_gF_g16 conv_F_16 +#define conv_gAF_gA16 conv_gaF_ga16 + +static long +conv_rgba8_rgbaF (unsigned char *src, unsigned char *dst, long samples) +{ + return conv_8_F (src, dst, samples * 4) / 4; +} + + +static long +conv_rgb8_rgbF (unsigned char *src, unsigned char *dst, long samples) +{ + return conv_8_F (src, dst, samples * 3) / 3; +} + +static long +conv_ga8_gaF (unsigned char *src, unsigned char *dst, long samples) +{ + return conv_8_F (src, dst, samples * 2) / 2; +} + +#define conv_rgbA8_rgbAF conv_rgba8_rgbaF +#define conv_gA8_gAF conv_ga8_gaF +#define conv_g8_gF conv_8_F + +static long +conv_rgba16_rgbaF (unsigned char *src, unsigned char *dst, long samples) +{ + conv_16_F (src, dst, samples * 4); + return samples; +} + +static long +conv_rgb16_rgbF (unsigned char *src, unsigned char *dst, long samples) +{ + conv_16_F (src, dst, samples * 3); + return samples; +} + +static long +conv_ga16_gaF (unsigned char *src, unsigned char *dst, long samples) +{ + conv_16_F (src, dst, samples * 2); + return samples; +} + +#define conv_rgbA16_rgbAF conv_rgba16_rgbaF +#define conv_gA16_gAF conv_ga16_gaF +#define conv_g16_gF conv_16_F + +int init (void); + +int +init (void) +{ + const Babl *rgbaF = babl_format_new ( + babl_model ("R'G'B'A"), + babl_type ("float"), + babl_component ("R'"), + babl_component ("G'"), + babl_component ("B'"), + babl_component ("A"), + NULL); + const Babl *rgba16 = babl_format_new ( + babl_model ("R'G'B'A"), + babl_type ("u16"), + babl_component ("R'"), + babl_component ("G'"), + babl_component ("B'"), + babl_component ("A"), + NULL); + const Babl *rgba8 = babl_format_new ( + babl_model ("R'G'B'A"), + babl_type ("u8"), + babl_component ("R'"), + babl_component ("G'"), + babl_component ("B'"), + babl_component ("A"), + NULL); + const Babl *rgbAF = babl_format_new ( + babl_model ("R'aG'aB'aA"), + babl_type ("float"), + babl_component ("R'a"), + babl_component ("G'a"), + babl_component ("B'a"), + babl_component ("A"), + NULL); + const Babl *rgbA16 = babl_format_new ( + babl_model ("R'aG'aB'aA"), + babl_type ("u16"), + babl_component ("R'a"), + babl_component ("G'a"), + babl_component ("B'a"), + babl_component ("A"), + NULL); + const Babl *rgbA8 = babl_format_new ( + babl_model ("R'aG'aB'aA"), + babl_type ("u8"), + babl_component ("R'a"), + babl_component ("G'a"), + babl_component ("B'a"), + babl_component ("A"), + NULL); + const Babl *rgbF = babl_format_new ( + babl_model ("R'G'B'"), + babl_type ("float"), + babl_component ("R'"), + babl_component ("G'"), + babl_component ("B'"), + NULL); + const Babl *rgb16 = babl_format_new ( + babl_model ("R'G'B'"), + babl_type ("u16"), + babl_component ("R'"), + babl_component ("G'"), + babl_component ("B'"), + NULL); + const Babl *rgb8 = babl_format_new ( + babl_model ("R'G'B'"), + babl_type ("u8"), + babl_component ("R'"), + babl_component ("G'"), + babl_component ("B'"), + NULL); + const Babl *gaF = babl_format_new ( + babl_model ("Y'A"), + babl_type ("float"), + babl_component ("Y'"), + babl_component ("A"), + NULL); + const Babl *gAF = babl_format_new ( + babl_model ("Y'aA"), + babl_type ("float"), + babl_component ("Y'a"), + babl_component ("A"), + NULL); + const Babl *gF = babl_format_new ( + babl_model ("Y'"), + babl_type ("float"), + babl_component ("Y'"), + NULL); + const Babl *ga16 = babl_format_new ( + babl_model ("Y'A"), + babl_type ("u16"), + babl_component ("Y'"), + babl_component ("A"), + NULL); + const Babl *gA16 = babl_format_new ( + babl_model ("Y'aA"), + babl_type ("u16"), + babl_component ("Y'a"), + babl_component ("A"), + NULL); + const Babl *g16 = babl_format_new ( + babl_model ("Y'"), + babl_type ("u16"), + babl_component ("Y'"), + NULL); + const Babl *ga8 = babl_format_new ( + babl_model ("Y'A"), + babl_type ("u8"), + babl_component ("Y'"), + babl_component ("A"), + NULL); + const Babl *gA8 = babl_format_new ( + babl_model ("Y'aA"), + babl_type ("u8"), + babl_component ("Y'a"), + babl_component ("A"), + NULL); + const Babl *g8 = babl_format_new ( + babl_model ("Y'"), + babl_type ("u8"), + babl_component ("Y'"), + NULL); + +#define o(src, dst) \ + babl_conversion_new (src, dst, "linear", conv_ ## src ## _ ## dst, NULL) + + o (rgbaF, rgba8); + o (rgba8, rgbaF); + o (rgbaF, rgba16); + o (rgba16, rgbaF); + o (rgbAF, rgbA8); + o (rgbA8, rgbAF); + o (rgbAF, rgbA16); + o (rgbA16, rgbAF); + o (rgbF, rgb8); + o (rgb8, rgbF); + o (rgbF, rgb16); + o (rgb16, rgbF); + o (gaF, ga8); + o (gAF, gA8); + o (gF, g8); + o (ga8, gaF); + o (gA8, gAF); + o (g8, gF); + o (gaF, ga16); + o (gAF, gA16); + o (gF, g16); + o (ga16, gaF); + o (gA16, gAF); + o (g16, gF); + o (rgbaF, rgb8); + o (rgb8, rgbaF); + + if (!table_inited) + table_init (); + + return 0; +} diff --git a/extensions/gggl.c b/extensions/gggl.c new file mode 100644 index 0000000..7ab4400 --- /dev/null +++ b/extensions/gggl.c @@ -0,0 +1,1121 @@ +/* + * This file was part of gggl, it implements a variety of pixel conversion + * functions that are usable with babl, the file needs more cleanup. + * + * GGGL is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GGGL 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 GGGL; if not, see . + * + * Rights are granted to use this shared object in libraries covered by + * LGPL. (exception added, during import into babl CVS.) + * + * Copyright 2003, 2004, 2005 Øyvind Kolås + */ + +#define _POSIX_C_SOURCE 200112L + +#include "config.h" +#include +#include +#include + +#include "babl.h" +#include "extensions/util.h" + +/* + * Implemented according to information read from: + * + * http://www.cinenet.net/~spitzak/conversion/sketches_0265.pdf + * + * initially ignoring any diffusion, to keep the implementation + * smaller, and interchangeable with the non optimized version. + * + * due to ability to be able to relicence gggl under a different + * licence than GPL, I avoided the temptation to look at the + * source files in the same location, in case I was going to + * need this piece of code for projects where GPL compatibility + * was a must. + * + * TODO: error diffusion, + * gamma correction (not really,. gamma correction belongs in seperate ops,. + */ + +static long +conv_F_8 (unsigned char *src, unsigned char *dst, long samples) +{ + long n = samples; + + while (n--) + { + float f = ((*(float *) src)); + int uval = lrint (f * 255.0); + + if (uval < 0) uval = 0; + if (uval > 255) uval = 255; + *(unsigned char *) dst = uval; + + dst += 1; + src += 4; + } + return samples; +} + +static long +conv_F_16 (unsigned char *src, unsigned char *dst, long samples) +{ + long n = samples; + + while (n--) + { + float f = ((*(float *) src)); + if (f < 0.0) + { + *(unsigned short *) dst = 0; + } + else if (f > 1.0) + { + *(unsigned short *) dst = 65535; + } + else + { + *(unsigned short *) dst = lrint (f * 65535.0); + } + dst += 2; + src += 4; + } + return samples; +} + +static long +conv_8_F (unsigned char *src, unsigned char *dst, long samples) +{ + long n = samples; + + while (n--) + { + (*(float *) dst) = ((*(unsigned char *) src) / 255.0); + dst += 4; + src += 1; + } + return samples; +} + +static long +conv_16_F (unsigned char *src, unsigned char *dst, long samples) +{ + long n = samples; + + while (n--) + { + (*(float *) dst) = *(unsigned short *) src / 65535.0; + dst += 4; + src += 2; + } + return samples; +} + +static long +conv_rgbaF_rgb8 (unsigned char *src, unsigned char *dst, long samples) +{ + long n = samples; + + while (n--) + { + int c; + + for (c = 0; c < 3; c++) + { + int val = rint ((*(float *) src) * 255.0); + if (val < 0) + *(unsigned char *) dst = 0; + else if (val > 255) + *(unsigned char *) dst = 255; + else + *(unsigned char *) dst = val; + dst += 1; + src += 4; + } + src += 4; + } + return samples; +} + +static long +conv_F_D (unsigned char *src, unsigned char *dst, long samples) +{ + long n = samples; + + while (n--) + { + *(double *) dst = ((*(float *) src)); + dst += 8; + src += 4; + } + return samples; +} + +static long +conv_D_F (unsigned char *src, unsigned char *dst, long samples) +{ + long n = samples; + + while (n--) + { + *(float *) dst = ((*(double *) src)); + dst += 4; + src += 8; + } + return samples; +} + +static long +conv_16_8 (unsigned char *src, unsigned char *dst, long samples) +{ + long n = samples; + + while (n--) + { +#define div_257(a) ((((a)+128)-(((a)+128)>>8))>>8) + (*(unsigned char *) dst) = div_257 (*(unsigned short *) src); + dst += 1; + src += 2; + } + return samples; +} + +static long +conv_8_16 (unsigned char *src, unsigned char *dst, long samples) +{ + long n = samples; + + while (n--) + { + (*(unsigned short *) dst) = ((*(unsigned char *) src) << 8) | *src; + dst += 2; + src += 1; + } + return samples; +} + + +/*********/ +static long +conv_rgbaF_rgba8 (unsigned char *src, unsigned char *dst, long samples) +{ + conv_F_8 (src, dst, samples * 4); + return samples; +} + +static long +conv_rgbF_rgb8 (unsigned char *src, unsigned char *dst, long samples) +{ + conv_F_8 (src, dst, samples * 3); + return samples; +} + +static long +conv_gaF_ga8 (unsigned char *src, unsigned char *dst, long samples) +{ + conv_F_8 (src, dst, samples * 2); + return samples; +} + +#define conv_rgbAF_rgbA8 conv_rgbaF_rgba8 +#define conv_gF_g8 conv_F_8 +#define conv_gAF_gA8 conv_gaF_ga8 + +static long +conv_rgbaF_rgba16 (unsigned char *src, unsigned char *dst, long samples) +{ + conv_F_16 (src, dst, samples * 4); + return samples; +} + +static long +conv_rgbF_rgb16 (unsigned char *src, unsigned char *dst, long samples) +{ + conv_F_16 (src, dst, samples * 3); + return samples; +} + +static long +conv_gaF_ga16 (unsigned char *src, unsigned char *dst, long samples) +{ + conv_F_16 (src, dst, samples * 2); + return samples; +} + +#define conv_rgbAF_rgbA16 conv_rgbaF_rgba16 +#define conv_gF_g16 conv_F_16 +#define conv_gAF_gA16 conv_gaF_ga16 + +static long +conv_rgba8_rgbaF (unsigned char *src, unsigned char *dst, long samples) +{ + return conv_8_F (src, dst, samples * 4) / 4; +} + + +static long +conv_rgb8_rgbF (unsigned char *src, unsigned char *dst, long samples) +{ + return conv_8_F (src, dst, samples * 3) / 3; +} + +static long +conv_ga8_gaF (unsigned char *src, unsigned char *dst, long samples) +{ + return conv_8_F (src, dst, samples * 2) / 2; +} + +#define conv_rgbA8_rgbAF conv_rgba8_rgbaF +#define conv_gA8_gAF conv_ga8_gaF +#define conv_g8_gF conv_8_F + +static long +conv_rgbaF_rgbaD (unsigned char *src, unsigned char *dst, long samples) +{ + conv_F_D (src, dst, samples * 4); + return samples; +} + +static long +conv_rgbaD_rgbaF (unsigned char *src, unsigned char *dst, long samples) +{ + conv_D_F (src, dst, samples * 4); + return samples; +} + +static long +conv_rgba16_rgbaF (unsigned char *src, unsigned char *dst, long samples) +{ + conv_16_F (src, dst, samples * 4); + return samples; +} + +static long +conv_rgb16_rgbF (unsigned char *src, unsigned char *dst, long samples) +{ + conv_16_F (src, dst, samples * 3); + return samples; +} + +static long +conv_ga16_gaF (unsigned char *src, unsigned char *dst, long samples) +{ + conv_16_F (src, dst, samples * 2); + return samples; +} + +#define conv_rgbA16_rgbAF conv_rgba16_rgbaF +#define conv_gA16_gAF conv_ga16_gaF +#define conv_g16_gF conv_16_F + +static long +conv_rgba16_rgba8 (unsigned char *src, unsigned char *dst, long samples) +{ + conv_16_8 (src, dst, samples * 4); + return samples; +} + +static long +conv_rgb16_rgb8 (unsigned char *src, unsigned char *dst, long samples) +{ + conv_16_8 (src, dst, samples * 3); + return samples; +} + +static long +conv_ga16_ga8 (unsigned char *src, unsigned char *dst, long samples) +{ + conv_16_8 (src, dst, samples * 2); + return samples; +} + +#define conv_rgbA16_rgbA8 conv_rgba16_rgba8 +#define conv_gA16_gA8 conv_ga16_ga8 +#define conv_g16_g8 conv_16_8 + +static long +conv_rgba8_rgba16 (unsigned char *src, unsigned char *dst, long samples) +{ + conv_8_16 (src, dst, samples * 4); + return samples; +} + +static long +conv_rgb8_rgb16 (unsigned char *src, unsigned char *dst, long samples) +{ + conv_8_16 (src, dst, samples * 3); + return samples; +} + +static long +conv_ga8_ga16 (unsigned char *src, unsigned char *dst, long samples) +{ + conv_8_16 (src, dst, samples * 2); + return samples; +} + +#define conv_rgbA8_rgbA16 conv_rgba8_rgba16 +#define conv_gA8_gA16 conv_ga8_ga16 +#define conv_g8_g16 conv_8_16 + +/* alpha conversions */ + +static long +conv_gaF_gAF (unsigned char *src, unsigned char *dst, long samples) +{ + long n = samples; + + while (n--) + { + float alpha = (*(float *) (src + 4)); + + *(float *) dst = ((*(float *) src) * alpha); + dst += 4; + src += 4; + *(float *) dst = alpha; + dst += 4; + src += 4; + } + return samples; +} + +static long +conv_gAF_gaF (unsigned char *src, unsigned char *dst, long samples) +{ + long n = samples; + + while (n--) + { + float alpha = (*(float *) (src + 4)); + + *(float *) dst = ((*(float *) src) / alpha); + dst += 4; + src += 4; + *(float *) dst = alpha; + dst += 4; + src += 4; + } + return samples; +} + +/* alpha stripping and adding */ + +static long +conv_rgbaF_rgbF (unsigned char *src, unsigned char *dst, long samples) +{ + long n = samples; + + while (n--) + { + *(uint32_t *) dst = (*(uint32_t *) src); + dst += 4; + src += 4; + *(uint32_t *) dst = (*(uint32_t *) src); + dst += 4; + src += 4; + *(uint32_t *) dst = (*(uint32_t *) src); + dst += 4; + src += 4; + src += 4; + } + return samples; +} + +static long +conv_rgbF_rgbaF (unsigned char *src, unsigned char *dst, long samples) +{ + long n = samples; + + while (n--) + { + *(uint32_t *) dst = (*(uint32_t *) src); + src += 4; + dst += 4; + *(uint32_t *) dst = (*(uint32_t *) src); + src += 4; + dst += 4; + *(uint32_t *) dst = (*(uint32_t *) src); + src += 4; + dst += 4; + *(float *) dst = 1.0; + dst += 4; + } + return samples; +} + +#define conv_rgbF_rgbAF conv_rgbF_rgbaF + + +static long +conv_gaF_gF (unsigned char *src, unsigned char *dst, long samples) +{ + long n = samples; + + while (n--) + { + *(int *) dst = (*(int *) src); + dst += 4; + src += 4; + src += 4; + } + return samples; +} + +static long +conv_gF_gaF (unsigned char *src, unsigned char *dst, long samples) +{ + long n = samples; + + while (n--) + { + *(float *) dst = (*(float *) src); + dst += 4; + src += 4; + *(float *) dst = 1.0; + dst += 4; + } + return samples; +} + +#define conv_gF_gAF conv_gF_gaF + +#define conv_rgbF_rgbAF conv_rgbF_rgbaF + +/* colorchannel dropping and adding */ + +static long +conv_gF_rgbF (unsigned char *src, unsigned char *dst, long samples) +{ + long n = samples; + + while (n--) + { + int c; + + for (c = 0; c < 3; c++) + { + (*(float *) dst) = (*(float *) src); + dst += 4; + } + src += 4; + } + return samples; +} + +static long +conv_gaF_rgbaF (unsigned char *src, unsigned char *dst, long samples) +{ + long n = samples; + + while (n--) + { + int c; + + for (c = 0; c < 3; c++) + { + (*(int *) dst) = (*(int *) src); + dst += 4; + } + src += 4; + (*(int *) dst) = (*(int *) src); + dst += 4; + src += 4; + } + return samples; +} + +#define conv_gAF_rgbAF conv_gaF_rgbaF + +/* other conversions coded for some optimisation reason or sumthin */ + + +static long +conv_rgbaF_rgbA8 (unsigned char *src, unsigned char *dst, long samples) +{ + long n = samples; + + while (n--) + { + float alpha = (*(float *) (src + (4 * 3))); + int c; + + for (c = 0; c < 3; c++) + { + *(unsigned char *) dst = lrint (((*(float *) src) * alpha) * 255.0); + dst += 1; + src += 4; + } + *(unsigned char *) dst = lrint (alpha * 255.0); + dst++; + src += 4; + } + return samples; +} + +static long +conv_rgbaF_rgb16 (unsigned char *src, unsigned char *dst, long samples) +{ + long n = samples; + + while (n--) + { + int c; + + for (c = 0; c < 3; c++) + { + *(unsigned short *) dst = lrint ((*(float *) src) * 65535.0); + dst += 2; + src += 4; + } + src += 4; + } + return samples; +} + +static long +conv_rgbA16_rgbaF (unsigned char *src, unsigned char *dst, long samples) +{ + long n = samples; + + while (n--) + { + float alpha = (((unsigned short *) src)[3]) / 65535.0; + int c; + + for (c = 0; c < 3; c++) + { + (*(float *) dst) = (*(unsigned short *) src / 65535.0) / alpha; + dst += 4; + src += 2; + } + *(float *) dst = alpha; + dst += 4; + src += 2; + } + return samples; +} + +/* + static long + conv_rgb8_rgbaF (unsigned char *src, + unsigned char *dst, + int samples) + { + long n=samples; + while (n--) { + int c; + + for (c = 0; c < 3; c++) { + (*(float *) dst) = *(unsigned char *) src / 255.0; + dst += 4; + src += 1; + } + (*(float *) dst) = 1.0; + dst += 4; + } + return samples; + } + + static long + conv_g8_rgbaF (unsigned char *src, + unsigned char *dst, + int samples) + { + long n=samples; + while (n--) { + int c; + + for (c = 0; c < 3; c++) { + (*(float *) dst) = *(unsigned char *) src / 255.0; + dst += 4; + } + src += 1; + (*(float *) dst) = 1.0; + dst += 4; + } + return samples; + } + + static long + conv_rgb16_rgbaF (unsigned char *src, + unsigned char *dst, + int samples) + { + long n=samples; + while (n--) { + int c; + + for (c = 0; c < 3; c++) { + *(float *) dst = (*(unsigned short *) src) / 65535.0; + src += 2; + dst += 4; + } + *(float *) dst = 1.0; + src += 2; + dst += 4; + } + return samples; + } + + static long + conv_gF_rgbaF (unsigned char *src, + unsigned char *dst, + int samples) + { + long n=samples; + while (n--) { + (*(float *) dst) = (*(float *) src); + dst += 4; + (*(float *) dst) = (*(float *) src); + dst += 4; + (*(float *) dst) = (*(float *) src); + dst += 4; + (*(float *) dst) = 1.0; + dst += 4; + src += 4; + + } + return samples; + } + */ +static long +conv_rgba8_rgbA8 (unsigned char *src, unsigned char *dst, long samples) +{ + long n = samples; + + while (n--) + { + if (src[3] == 255) + { + *(unsigned int *) dst = *(unsigned int *) src; + } + else if (src[3] == 0) + { + *(unsigned int *) dst = 0; + } + else + { +#define div_255(a) ((((a)+127)+(((a)+127)>>8))>>8) + dst[0] = div_255 (src[0] * src[3]); + dst[1] = div_255 (src[1] * src[3]); + dst[2] = div_255 (src[2] * src[3]); + dst[3] = src[3]; + } + dst += 4; + src += 4; + } + return samples; +} + +static long +conv_rgbA8_rgba8 (unsigned char *src, unsigned char *dst, long samples) +{ + long n = samples; + + while (n--) + { + if (src[3] == 255) + { + *(unsigned int *) dst = *(unsigned int *) src; + dst += 4; + } + else if (src[3] == 0) + { + *(unsigned int *) dst = 0; + dst += 4; + } + else + { + unsigned int aa = ((255 << 16) + (src[3] >> 1)) / src[3]; + *dst++ = (src[0] * aa + 0x8000) >> 16; + *dst++ = (src[1] * aa + 0x8000) >> 16; + *dst++ = (src[2] * aa + 0x8000) >> 16; + *dst++ = src[3]; + } + src += 4; + } + return samples; +} + +static long +conv_rgb8_rgba8 (unsigned char *src, unsigned char *dst, long samples) +{ + long n = samples-1; + while (n--) + { + *(unsigned int *) dst = (*(unsigned int *) src) | (255 << 24); + src += 3; + dst += 4; + } + dst[0] = src[0]; + dst[1] = src[1]; + dst[2] = src[2]; + dst[3] = 255; + return samples; +} + +#define conv_rgb8_rgbA8 conv_rgb8_rgba8 + +static long +conv_rgba8_rgb8 (unsigned char *src, unsigned char *dst, long samples) +{ + long n = samples; + + while (n--) + { + dst[0] = src[0]; + dst[1] = src[1]; + dst[2] = src[2]; + src += 4; + dst += 3; + } + return samples; +} + +static long +conv_rgbA8_rgb8 (unsigned char *src, unsigned char *dst, long samples) +{ + long n = samples; + + while (n--) + { + int alpha = src[3]; + if (alpha == 255) + { + *dst++ = src[0]; + *dst++ = src[1]; + *dst++ = src[2]; + } + else if (alpha == 0) + { + *dst++ = 0; + *dst++ = 0; + *dst++ = 0; + } + else + { + unsigned int aa = ((255 << 16) + (alpha >> 1)) / alpha; + *dst++ = (src[0] * aa + 0x8000) >> 16; + *dst++ = (src[1] * aa + 0x8000) >> 16; + *dst++ = (src[2] * aa + 0x8000) >> 16; + } + src += 4; + } + return samples; +} + +#ifndef byteclamp +#define byteclamp(j) do { if (j < 0) j = 0;else if (j > 255) j = 255; } while (0) +#endif + +#define YUV82RGB8(Y, U, V, R, G, B) do { \ + R = ((Y << 15) + 37355 * (V - 128)) >> 15; \ + G = ((Y << 15) - 12911 * (U - 128) - 19038 * (V - 128)) >> 15; \ + B = ((Y << 15) + 66454 * (U - 128)) >> 15; \ + byteclamp (R); \ + byteclamp (G); \ + byteclamp (B); \ + } while (0) + +#define RGB82YUV8(R, G, B, Y, U, V) do { \ + Y = ((9798 * R + 19234 * G + 3736 * B) >> 15) + 000; \ + U = ((-4817 * R - 9470 * G + 14320 * B) >> 15) + 128; \ + V = ((20152 * R - 16875 * G - 3277 * B) >> 15) + 128; \ + byteclamp (Y); \ + byteclamp (U); \ + byteclamp (V); \ + } while (0) + + + + static long +conv_yuvaF_rgbaF (unsigned char *src, unsigned char *dst, long samples) +{ + float *src_f = (float *) src; + float *dst_f = (float *) dst; + long n = samples; + + while (n--) + { + float Y, U, V; + float R, G, B; + + Y = src_f[0]; + U = src_f[1]; + V = src_f[2]; + + R = Y + 1.40200 * (V /*-0.5*/); + G = Y - 0.34414 * (U /*-0.5*/) -0.71414 * (V /*-0.5*/); + B = Y + 1.77200 * (U /*-0.5*/); + + dst_f[0] = R; + dst_f[1] = G; + dst_f[2] = B; + dst_f[3] = src_f[3]; + + dst_f += 4; + src_f += 4; + } + return samples; +} + + +static long +conv_yuvF_rgbF (unsigned char *src, unsigned char *dst, long samples) +{ + float *src_f = (float *) src; + float *dst_f = (float *) dst; + long n = samples; + + while (n--) + { + float Y, U, V; + float R, G, B; + + Y = src_f[0]; + U = src_f[1]; + V = src_f[2]; + + R = Y + 1.40200 * (V /*-0.5*/); + G = Y - 0.34414 * (U /*-0.5*/) -0.71414 * (V /*-0.5*/); + B = Y + 1.77200 * (U /*-0.5*/); + + dst_f[0] = R; + dst_f[1] = G; + dst_f[2] = B; + + dst_f += 3; + src_f += 3; + } + return samples; +} + +int init (void); + +int +init (void) +{ + const Babl *rgbaD = babl_format_new ( + babl_model ("R'G'B'A"), + babl_type ("double"), + babl_component ("R'"), + babl_component ("G'"), + babl_component ("B'"), + babl_component ("A"), + NULL); + const Babl *rgbaF = babl_format_new ( + babl_model ("R'G'B'A"), + babl_type ("float"), + babl_component ("R'"), + babl_component ("G'"), + babl_component ("B'"), + babl_component ("A"), + NULL); + const Babl *rgba16 = babl_format_new ( + babl_model ("R'G'B'A"), + babl_type ("u16"), + babl_component ("R'"), + babl_component ("G'"), + babl_component ("B'"), + babl_component ("A"), + NULL); + const Babl *rgba8 = babl_format_new ( + babl_model ("R'G'B'A"), + babl_type ("u8"), + babl_component ("R'"), + babl_component ("G'"), + babl_component ("B'"), + babl_component ("A"), + NULL); + const Babl *rgbAF = babl_format_new ( + babl_model ("R'aG'aB'aA"), + babl_type ("float"), + babl_component ("R'a"), + babl_component ("G'a"), + babl_component ("B'a"), + babl_component ("A"), + NULL); + const Babl *rgbA16 = babl_format_new ( + babl_model ("R'aG'aB'aA"), + babl_type ("u16"), + babl_component ("R'a"), + babl_component ("G'a"), + babl_component ("B'a"), + babl_component ("A"), + NULL); + const Babl *rgbA8 = babl_format_new ( + babl_model ("R'aG'aB'aA"), + babl_type ("u8"), + babl_component ("R'a"), + babl_component ("G'a"), + babl_component ("B'a"), + babl_component ("A"), + NULL); + const Babl *rgbF = babl_format_new ( + babl_model ("R'G'B'"), + babl_type ("float"), + babl_component ("R'"), + babl_component ("G'"), + babl_component ("B'"), + NULL); + const Babl *rgb16 = babl_format_new ( + babl_model ("R'G'B'"), + babl_type ("u16"), + babl_component ("R'"), + babl_component ("G'"), + babl_component ("B'"), + NULL); + const Babl *rgb8 = babl_format_new ( + babl_model ("R'G'B'"), + babl_type ("u8"), + babl_component ("R'"), + babl_component ("G'"), + babl_component ("B'"), + NULL); + const Babl *gaF = babl_format_new ( + babl_model ("Y'A"), + babl_type ("float"), + babl_component ("Y'"), + babl_component ("A"), + NULL); + const Babl *gAF = babl_format_new ( + babl_model ("Y'aA"), + babl_type ("float"), + babl_component ("Y'a"), + babl_component ("A"), + NULL); + const Babl *gF = babl_format_new ( + babl_model ("Y'"), + babl_type ("float"), + babl_component ("Y'"), + NULL); + const Babl *ga16 = babl_format_new ( + babl_model ("Y'A"), + babl_type ("u16"), + babl_component ("Y'"), + babl_component ("A"), + NULL); + const Babl *gA16 = babl_format_new ( + babl_model ("Y'aA"), + babl_type ("u16"), + babl_component ("Y'a"), + babl_component ("A"), + NULL); + const Babl *g16 = babl_format_new ( + babl_model ("Y'"), + babl_type ("u16"), + babl_component ("Y'"), + NULL); + const Babl *ga8 = babl_format_new ( + babl_model ("Y'A"), + babl_type ("u8"), + babl_component ("Y'"), + babl_component ("A"), + NULL); + const Babl *gA8 = babl_format_new ( + babl_model ("Y'aA"), + babl_type ("u8"), + babl_component ("Y'a"), + babl_component ("A"), + NULL); + const Babl *g8 = babl_format_new ( + babl_model ("Y'"), + babl_type ("u8"), + babl_component ("Y'"), + NULL); + const Babl *yuvF = babl_format_new ( + babl_model ("Y'CbCr"), + babl_type ("float"), + babl_component ("Y'"), + babl_type ("float"), + babl_component ("Cb"), + babl_component ("Cr"), + NULL); + const Babl *yuvaF = babl_format_new ( + babl_model ("Y'CbCrA"), + babl_type ("float"), + babl_component ("Y'"), + babl_type ("float"), + babl_component ("Cb"), + babl_component ("Cr"), + babl_component ("A"), + NULL); + +#define o(src, dst) \ + babl_conversion_new (src, dst, "linear", conv_ ## src ## _ ## dst, NULL) + + o (rgbaF, rgba8); + o (rgba8, rgbaF); + o (rgbaF, rgba16); + o (rgba16, rgbaF); + o (rgbAF, rgbA8); + o (rgbA8, rgbAF); + o (rgbAF, rgbA16); + o (rgbA16, rgbAF); + o (rgbF, rgb8); + o (rgb8, rgbF); + o (rgbF, rgb16); + o (rgb16, rgbF); + o (rgba8, rgba16); + o (rgba16, rgba8); + o (rgbA8, rgbA16); + o (rgbA16, rgbA8); + o (rgb8, rgb16); + o (rgb16, rgb8); + o (gaF, ga8); + o (gAF, gA8); + o (gF, g8); + o (ga8, gaF); + o (gA8, gAF); + o (g8, gF); + o (gaF, ga16); + o (gAF, gA16); + o (gF, g16); + o (ga16, gaF); + o (gA16, gAF); + o (g16, gF); + o (ga16, ga8); + o (g16, g8); + o (yuvF, rgbF); + o (yuvaF, rgbaF); + o (ga8, ga16); + o (gA8, gA16); + o (g8, g16); + o (gaF, gAF); + o (gAF, gaF); + o (rgbaF, rgbF); + o (gaF, gF); + o (rgbF, rgbaF); + o (rgbF, rgbAF); + o (gF, gaF); + o (gF, gAF); + o (gF, rgbF); + o (gaF, rgbaF); + o (gAF, rgbAF); + o (rgbaF, rgb8); + o (rgbA8, rgba8); + o (rgba8, rgbA8); + o (rgbaF, rgb16); + o (rgb8, rgba8); + o (rgb8, rgbA8); + o (rgbA8, rgb8); + o (rgba8, rgb8); + o (rgbaF, rgbA8); + o (rgbA16, rgbaF); + o (rgbaF, rgbaD); + o (rgbaD, rgbaF); + + return 0; +} diff --git a/extensions/gimp-8bit.c b/extensions/gimp-8bit.c new file mode 100644 index 0000000..d3e9522 --- /dev/null +++ b/extensions/gimp-8bit.c @@ -0,0 +1,508 @@ +/* babl - dynamically extendable universal pixel conversion library. + * Copyright (C) 2005, Øyvind Kolås. + * + * Optimized 8bit conversion routines as used by legacy GIMP code. + * Copyright (C) 2008 Sven Neumann + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, see + * . + */ + +#include "config.h" +#include + +#include "babl.h" + +#include "base/util.h" +#include "extensions/util.h" + +#define INLINE inline + + +/* lookup tables used in conversion */ + +static float lut_linear[1 << 8]; +static float lut_gamma_2_2[1 << 8]; + + +static void +tables_init (void) +{ + int i; + + /* fill tables for conversion from 8 bit integer to float */ + for (i = 0; i < 1 << 8; i++) + { + double value = i / 255.0; + + lut_linear[i] = value; + lut_gamma_2_2[i] = gamma_2_2_to_linear (value); + } +} + +static INLINE long +u8_linear_to_float_linear (unsigned char *src, + unsigned char *dst, + long samples) +{ + float *d = (float *) dst; + long n = samples; + + while (n--) + *d++ = lut_linear[*src++]; + + return samples; +} + + +static INLINE long +u8_linear_to_float_linear_premul (unsigned char *src, + unsigned char *dst, + long samples) +{ + float *d = (float *) dst; + long n = samples; + + while (n--) + { + float alpha = lut_linear[src[3]]; + d[0] = lut_linear[src[0]] * alpha; + d[1] = lut_linear[src[1]] * alpha; + d[2] = lut_linear[src[2]] * alpha; + d[3] = alpha; + src += 4; + d += 4; + } + return samples; +} + +static INLINE long +u8_gamma_2_2_to_float_linear (unsigned char *src, + unsigned char *dst, + long samples) +{ + float *d = (float *) dst; + long n = samples; + + while (n--) + *d++ = lut_gamma_2_2[*src++]; + + return samples; +} + +static INLINE long +conv_rgba8_linear_rgbaF_linear (unsigned char *src, + unsigned char *dst, + long samples) +{ + u8_linear_to_float_linear (src, dst, samples * 4); + + return samples; +} + +static INLINE long +conv_rgba8_linear_ragabaaF_linear (unsigned char *src, + unsigned char *dst, + long samples) +{ + u8_linear_to_float_linear_premul (src, dst, samples); + + return samples; +} + + +static INLINE long +conv_rgba8_gamma_2_2_rgbaF_linear (unsigned char *src, + unsigned char *dst, + long samples) +{ + float *d = (float *) dst; + long n = samples; + + while (n--) + { + *d++ = lut_gamma_2_2[*src++]; + *d++ = lut_gamma_2_2[*src++]; + *d++ = lut_gamma_2_2[*src++]; + *d++ = lut_linear[*src++]; + } + + return samples; +} + +static INLINE long +conv_rgb8_linear_rgbF_linear (unsigned char *src, + unsigned char *dst, + long samples) +{ + u8_linear_to_float_linear (src, dst, samples * 3); + + return samples; +} + +static INLINE long +conv_rgb8_gamma_2_2_rgbF_linear (unsigned char *src, + unsigned char *dst, + long samples) +{ + u8_gamma_2_2_to_float_linear (src, dst, samples * 3); + + return samples; +} + +static INLINE long +conv_rgb8_linear_rgbaF_linear (unsigned char *src, + unsigned char *dst, + long samples) +{ + float *d = (float *) dst; + long n = samples; + + while (n--) + { + *d++ = lut_linear[*src++]; + *d++ = lut_linear[*src++]; + *d++ = lut_linear[*src++]; + *d++ = 1.0; + } + + return samples; +} + +#define conv_rgb8_linear_ragabaaF_linear conv_rgb8_linear_rgbaF_linear + +static INLINE long +conv_rgb8_gamma_2_2_rgbaF_linear (unsigned char *src, + unsigned char *dst, + long samples) +{ + float *d = (float *) dst; + long n = samples; + + while (n--) + { + *d++ = lut_gamma_2_2[*src++]; + *d++ = lut_gamma_2_2[*src++]; + *d++ = lut_gamma_2_2[*src++]; + *d++ = 1.0; + } + + return samples; +} + +static INLINE long +conv_ga8_linear_gaF_linear (unsigned char *src, + unsigned char *dst, + long samples) +{ + u8_linear_to_float_linear (src, dst, samples * 2); + + return samples; +} + +static INLINE long +conv_ga8_gamma_2_2_gaF_linear (unsigned char *src, + unsigned char *dst, + long samples) +{ + float *d = (float *) dst; + long n = samples; + + while (n--) + { + *d++ = lut_gamma_2_2[*src++]; + *d++ = lut_linear[*src++]; + } + + return samples; +} + +static INLINE long +conv_ga8_linear_rgbaF_linear (unsigned char *src, + unsigned char *dst, + long samples) +{ + float *d = (float *) dst; + long n = samples; + + while (n--) + { + float value = lut_linear[*src++]; + + *d++ = value; + *d++ = value; + *d++ = value; + *d++ = lut_linear[*src++]; + } + + return samples; +} + +static INLINE long +conv_ga8_gamma_2_2_rgbaF_linear (unsigned char *src, + unsigned char *dst, + long samples) +{ + float *d = (float *) dst; + long n = samples; + + while (n--) + { + float value = lut_gamma_2_2[*src++]; + + *d++ = value; + *d++ = value; + *d++ = value; + *d++ = lut_linear[*src++]; + } + + return samples; +} + +static INLINE long +conv_g8_linear_gF_linear (unsigned char *src, + unsigned char *dst, + long samples) +{ + u8_linear_to_float_linear (src, dst, samples); + + return samples; +} + +static INLINE long +conv_g8_gamma_2_2_gF_linear (unsigned char *src, + unsigned char *dst, + long samples) +{ + u8_gamma_2_2_to_float_linear (src, dst, samples); + + return samples; +} + +static INLINE long +conv_g8_linear_rgbaF_linear (unsigned char *src, + unsigned char *dst, + long samples) +{ + float *d = (float *) dst; + long n = samples; + + while (n--) + { + float value = lut_linear[*src++]; + + *d++ = value; + *d++ = value; + *d++ = value; + *d++ = 1.0; + } + + return samples; +} +static INLINE long +conv_g8_gamma_2_2_rgbaF_linear (unsigned char *src, + unsigned char *dst, + long samples) +{ + float *d = (float *) dst; + long n = samples; + + while (n--) + { + float value = lut_gamma_2_2[*src++]; + + *d++ = value; + *d++ = value; + *d++ = value; + *d++ = 1.0; + } + + return samples; +} + +static INLINE long +conv_rgbaF_linear_rgb8_linear (unsigned char *src, + unsigned char *dst, + long samples) +{ + float *fsrc = (float *) src; + long n = samples; + long int v; + + while (n--) + { + v = rint (*fsrc++ * 255.0); + *dst++ = (v < 0) ? 0 : ((v > 255) ? 255 : v); + + v = rint (*fsrc++ * 255.0); + *dst++ = (v < 0) ? 0 : ((v > 255) ? 255 : v); + + v = rint (*fsrc++ * 255.0); + *dst++ = (v < 0) ? 0 : ((v > 255) ? 255 : v); + + fsrc++; + } + + return samples; +} + +static INLINE long +conv_rgbaF_linear_rgba8_linear (unsigned char *src, + unsigned char *dst, + long samples) +{ + float *fsrc = (float *) src; + long n = samples; + long int v; + + while (n--) + { + v = rint (*fsrc++ * 255.0); + *dst++ = (v < 0) ? 0 : ((v > 255) ? 255 : v); + + v = rint (*fsrc++ * 255.0); + *dst++ = (v < 0) ? 0 : ((v > 255) ? 255 : v); + + v = rint (*fsrc++ * 255.0); + *dst++ = (v < 0) ? 0 : ((v > 255) ? 255 : v); + + v = rint (*fsrc++ * 255.0); + *dst++ = (v < 0) ? 0 : ((v > 255) ? 255 : v); + } + + return samples; +} + +int init (void); + +int +init (void) +{ + const Babl *ragabaaF_linear = babl_format_new ( + babl_model ("RaGaBaA"), + babl_type ("float"), + babl_component ("Ra"), + babl_component ("Ga"), + babl_component ("Ba"), + babl_component ("A"), + NULL); + const Babl *rgbaF_linear = babl_format_new ( + babl_model ("RGBA"), + babl_type ("float"), + babl_component ("R"), + babl_component ("G"), + babl_component ("B"), + babl_component ("A"), + NULL); + const Babl *rgba8_linear = babl_format_new ( + babl_model ("RGBA"), + babl_type ("u8"), + babl_component ("R"), + babl_component ("G"), + babl_component ("B"), + babl_component ("A"), + NULL); + const Babl *rgba8_gamma_2_2 = babl_format_new ( + babl_model ("R'G'B'A"), + babl_type ("u8"), + babl_component ("R'"), + babl_component ("G'"), + babl_component ("B'"), + babl_component ("A"), + NULL); + const Babl *rgbF_linear = babl_format_new ( + babl_model ("RGB"), + babl_type ("float"), + babl_component ("R"), + babl_component ("G"), + babl_component ("B"), + NULL); + const Babl *rgb8_linear = babl_format_new ( + babl_model ("RGB"), + babl_type ("u8"), + babl_component ("R"), + babl_component ("G"), + babl_component ("B"), + NULL); + const Babl *rgb8_gamma_2_2 = babl_format_new ( + babl_model ("R'G'B'"), + babl_type ("u8"), + babl_component ("R'"), + babl_component ("G'"), + babl_component ("B'"), + NULL); + const Babl *gaF_linear = babl_format_new ( + babl_model ("YA"), + babl_type ("float"), + babl_component ("Y"), + babl_component ("A"), + NULL); + const Babl *ga8_linear = babl_format_new ( + babl_model ("YA"), + babl_type ("u8"), + babl_component ("Y"), + babl_component ("A"), + NULL); + const Babl *ga8_gamma_2_2 = babl_format_new ( + babl_model ("Y'A"), + babl_type ("u8"), + babl_component ("Y'"), + babl_component ("A"), + NULL); + const Babl *gF_linear = babl_format_new ( + babl_model ("Y"), + babl_type ("float"), + babl_component ("Y"), + NULL); + const Babl *g8_linear = babl_format_new ( + babl_model ("Y"), + babl_type ("u8"), + babl_component ("Y"), + NULL); + const Babl *g8_gamma_2_2 = babl_format_new ( + babl_model ("Y'"), + babl_type ("u8"), + babl_component ("Y'"), + NULL); + + tables_init (); + +#define o(src, dst) \ + babl_conversion_new (src, dst, "linear", conv_ ## src ## _ ## dst, NULL) + + o (rgba8_linear, ragabaaF_linear); + o (rgba8_linear, rgbaF_linear); + o (rgba8_gamma_2_2, rgbaF_linear); + + o (rgb8_linear, rgbF_linear); + o (rgb8_gamma_2_2, rgbF_linear); + o (rgb8_linear, rgbaF_linear); + o (rgb8_linear, ragabaaF_linear); + o (rgb8_gamma_2_2, rgbaF_linear); + + o (ga8_linear, gaF_linear); + o (ga8_gamma_2_2, gaF_linear); + o (ga8_linear, rgbaF_linear); + o (ga8_gamma_2_2, rgbaF_linear); + + o (g8_linear, gF_linear); + o (g8_gamma_2_2, gF_linear); + o (g8_linear, rgbaF_linear); + o (g8_gamma_2_2, rgbaF_linear); + + o (rgbaF_linear, rgb8_linear); + o (rgbaF_linear, rgba8_linear); + + return 0; +} diff --git a/extensions/grey.c b/extensions/grey.c new file mode 100644 index 0000000..a6fef28 --- /dev/null +++ b/extensions/grey.c @@ -0,0 +1,137 @@ +/* babl - dynamically extendable universal pixel conversion library. + * Copyright (C) 2013, Daniel Sabo + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, see + * . + */ + +#include "config.h" +#include + +#include "babl.h" + +#include "base/util.h" +#include "base/rgb-constants.h" +#include "extensions/util.h" + +/* There was some debate on #gimp about whether these constants + * are accurate, for now I've elected to just follow whatever + * babl/base does. + * - Daniel + */ + +/* Float versions of the double constants in rgb-constants.h */ +static const float RGB_LUMINANCE_RED_FLOAT = RGB_LUMINANCE_RED; +static const float RGB_LUMINANCE_GREEN_FLOAT = RGB_LUMINANCE_GREEN; +static const float RGB_LUMINANCE_BLUE_FLOAT = RGB_LUMINANCE_BLUE; + +static long +conv_rgbaF_linear_y8_linear (unsigned char *src, + unsigned char *dst, + long samples) +{ + static const float RGB_LUMINANCE_RED_FLOAT = RGB_LUMINANCE_RED; + static const float RGB_LUMINANCE_GREEN_FLOAT = RGB_LUMINANCE_GREEN; + static const float RGB_LUMINANCE_BLUE_FLOAT = RGB_LUMINANCE_BLUE; + + float *s = (float *) src; + long n = samples; + + while (n--) + { + float value; + long int v; + value = *s++ * RGB_LUMINANCE_RED_FLOAT; + value += *s++ * RGB_LUMINANCE_GREEN_FLOAT; + value += *s++ * RGB_LUMINANCE_BLUE_FLOAT; + s++; + + v = rint (value * 255.0); + *dst++ = (v < 0) ? 0 : ((v > 255) ? 255 : v); + } + + return samples; +} + +static long +conv_rgbaF_linear_yF_linear (unsigned char *src, + unsigned char *dst, + long samples) +{ + + float *s = (float *) src; + float *d = (float *) dst; + long n = samples; + + while (n--) + { + float value; + value = *s++ * RGB_LUMINANCE_RED_FLOAT; + value += *s++ * RGB_LUMINANCE_GREEN_FLOAT; + value += *s++ * RGB_LUMINANCE_BLUE_FLOAT; + s++; + *d++ = value; + } + + return samples; +} + +static long +conv_rgbaF_linear_yaF_linear (unsigned char *src, + unsigned char *dst, + long samples) +{ + + float *s = (float *) src; + float *d = (float *) dst; + long n = samples; + + while (n--) + { + float value; + value = *s++ * RGB_LUMINANCE_RED_FLOAT; + value += *s++ * RGB_LUMINANCE_GREEN_FLOAT; + value += *s++ * RGB_LUMINANCE_BLUE_FLOAT; + *d++ = value; + *d++ = *s++; /* alpha */ + } + + return samples; +} + +int init (void); + +int +init (void) +{ + babl_conversion_new (babl_format ("RGBA float"), + babl_format ("Y u8"), + "linear", + conv_rgbaF_linear_y8_linear, + NULL); + + babl_conversion_new (babl_format ("RGBA float"), + babl_format ("Y float"), + "linear", + conv_rgbaF_linear_yF_linear, + NULL); + + babl_conversion_new (babl_format ("RGBA float"), + babl_format ("YA float"), + "linear", + conv_rgbaF_linear_yaF_linear, + NULL); + + return 0; +} diff --git a/extensions/naive-CMYK.c b/extensions/naive-CMYK.c new file mode 100644 index 0000000..f92b0d2 --- /dev/null +++ b/extensions/naive-CMYK.c @@ -0,0 +1,274 @@ +/* babl - dynamically extendable universal pixel conversion library. + * Copyright (C) 2005, Øyvind Kolås. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, see + * . + */ + +#include "config.h" +#include +#include + +#include "babl.h" +#include "base/util.h" + + +static long rgba_to_cmyk (char *src, + char *dst, + long n); + +static long cmyk_to_rgba (char *src, + char *dst, + long n); + +static long rgba_to_cmy (char *src, + char *dst, + long n); + +static long cmy_to_rgba (char *src, + char *dst, + long n); + +int init (void); + +int +init (void) +{ + babl_component_new ("cyan", NULL); + babl_component_new ("yellow", NULL); + babl_component_new ("magenta", NULL); + babl_component_new ("key", NULL); + + babl_model_new ( + "name", "CMYK", + babl_component ("cyan"), + babl_component ("magenta"), + babl_component ("yellow"), + babl_component ("key"), + NULL + ); + babl_model_new ( + "name", "CMY", + babl_component ("cyan"), + babl_component ("magenta"), + babl_component ("yellow"), + NULL + ); + + babl_conversion_new ( + babl_model ("RGBA"), + babl_model ("CMYK"), + "linear", rgba_to_cmyk, + NULL + ); + babl_conversion_new ( + babl_model ("CMYK"), + babl_model ("RGBA"), + "linear", cmyk_to_rgba, + NULL + ); + babl_conversion_new ( + babl_model ("RGBA"), + babl_model ("CMY"), + "linear", rgba_to_cmy, + NULL + ); + babl_conversion_new ( + babl_model ("CMY"), + babl_model ("RGBA"), + "linear", cmy_to_rgba, + NULL + ); + + babl_format_new ( + "name", "CMYK float", + babl_model ("CMYK"), + babl_type ("float"), + babl_component ("cyan"), + babl_component ("magenta"), + babl_component ("yellow"), + babl_component ("key"), + NULL + ); + babl_format_new ( + "name", "CMY float", + babl_model ("CMY"), + babl_type ("float"), + babl_component ("cyan"), + babl_component ("magenta"), + babl_component ("yellow"), + NULL + ); + + babl_format_new ( + "name", "CMYK u8", + babl_model ("CMYK"), + babl_type ("u8"), + babl_component ("cyan"), + babl_component ("magenta"), + babl_component ("yellow"), + babl_component ("key"), + NULL + ); + + return 0; +} + + +static long +rgba_to_cmyk (char *src, + char *dst, + long n) +{ + while (n--) + { + double red = linear_to_gamma_2_2 (((double *) src)[0]); + double green = linear_to_gamma_2_2 (((double *) src)[1]); + double blue = linear_to_gamma_2_2 (((double *) src)[2]); + + double cyan, magenta, yellow, key; + + double pullout = 1.0; + + cyan = 1.0 - red; + magenta = 1.0 - green; + yellow = 1.0 - blue; + + key = 1.0; + if (cyan < key) key = cyan; + if (magenta < key) key = magenta; + if (yellow < key) key = yellow; + + key *= pullout; + + if (key < 1.0) + { + cyan = (cyan - key) / (1.0 - key); + magenta = (magenta - key) / (1.0 - key); + yellow = (yellow - key) / (1.0 - key); + } + else + { + cyan = 0.0; + magenta = 0.0; + yellow = 0.0; + } + + ((double *) dst)[0] = cyan; + ((double *) dst)[1] = magenta; + ((double *) dst)[2] = yellow; + ((double *) dst)[3] = key; + + src += 4 * sizeof (double); + dst += 4 * sizeof (double); + } + return n; +} + +static long +cmyk_to_rgba (char *src, + char *dst, + long n) +{ + while (n--) + { + double cyan = ((double *) src)[0]; + double magenta = ((double *) src)[1]; + double yellow = ((double *) src)[2]; + double key = ((double *) src)[3]; + + double red, green, blue; + + if (key < 1.0) + { + cyan = cyan * (1.0 - key) + key; + magenta = magenta * (1.0 - key) + key; + yellow = yellow * (1.0 - key) + key; + } + else + { + cyan = magenta = yellow = 1.0; + } + + red = 1.0 - cyan; + green = 1.0 - magenta; + blue = 1.0 - yellow; + + ((double *) dst)[0] = gamma_2_2_to_linear (red); + ((double *) dst)[1] = gamma_2_2_to_linear (green); + ((double *) dst)[2] = gamma_2_2_to_linear (blue); + + ((double *) dst)[3] = 1.0; + + src += 4 * sizeof (double); + dst += 4 * sizeof (double); + } + return n; +} + +static long +rgba_to_cmy (char *src, + char *dst, + long n) +{ + while (n--) + { + double red = linear_to_gamma_2_2 (((double *) src)[0]); + double green = linear_to_gamma_2_2 (((double *) src)[1]); + double blue = linear_to_gamma_2_2 (((double *) src)[2]); + + double cyan, magenta, yellow; + + cyan = 1.0 - red; + magenta = 1.0 - green; + yellow = 1.0 - blue; + + ((double *) dst)[0] = cyan; + ((double *) dst)[1] = magenta; + ((double *) dst)[2] = yellow; + + src += 4 * sizeof (double); + dst += 3 * sizeof (double); + } + return n; +} + +static long +cmy_to_rgba (char *src, + char *dst, + long n) +{ + while (n--) + { + double cyan = ((double *) src)[0]; + double magenta = ((double *) src)[1]; + double yellow = ((double *) src)[2]; + + double red, green, blue; + + red = 1.0 - cyan; + green = 1.0 - magenta; + blue = 1.0 - yellow; + + ((double *) dst)[0] = gamma_2_2_to_linear (red); + ((double *) dst)[1] = gamma_2_2_to_linear (green); + ((double *) dst)[2] = gamma_2_2_to_linear (blue); + + ((double *) dst)[3] = 1.0; + + src += 3 * sizeof (double); + dst += 4 * sizeof (double); + } + return n; +} diff --git a/extensions/simple.c b/extensions/simple.c new file mode 100644 index 0000000..bde7785 --- /dev/null +++ b/extensions/simple.c @@ -0,0 +1,164 @@ +#include +#include +#include "babl.h" + +int init (void); + +static inline long +float_to_u8 (unsigned char *src_char, unsigned char *dst, long samples) +{ + float *src = (float *)src_char; + long n = samples; + while (n--) + { + float r = src[0]; + float g = src[1]; + float b = src[2]; + float a = src[3]; + + dst[0] = (r >= 1.0f) ? 0xFF : ((r <= 0.0f) ? 0x0 : 0xFF * r + 0.5f); + dst[1] = (g >= 1.0f) ? 0xFF : ((g <= 0.0f) ? 0x0 : 0xFF * g + 0.5f); + dst[2] = (b >= 1.0f) ? 0xFF : ((b <= 0.0f) ? 0x0 : 0xFF * b + 0.5f); + dst[3] = (a >= 1.0f) ? 0xFF : ((a <= 0.0f) ? 0x0 : 0xFF * a + 0.5f); + + dst += 4; + src += 4; + } + return samples; +} + +static inline long +float_pre_to_u8_pre (unsigned char *src_char, unsigned char *dst, long samples) +{ + float *src = (float *)src_char; + long n = samples; + while (n--) + { + float r = src[0]; + float g = src[1]; + float b = src[2]; + float a = src[3]; + + if (a > 1.0f) { + r /= a; + g /= a; + b /= a; + a /= a; + } + + dst[0] = (r >= 1.0f) ? 0xFF : ((r <= 0.0f) ? 0x0 : 0xFF * r + 0.5f); + dst[1] = (g >= 1.0f) ? 0xFF : ((g <= 0.0f) ? 0x0 : 0xFF * g + 0.5f); + dst[2] = (b >= 1.0f) ? 0xFF : ((b <= 0.0f) ? 0x0 : 0xFF * b + 0.5f); + dst[3] = (a >= 1.0f) ? 0xFF : ((a <= 0.0f) ? 0x0 : 0xFF * a + 0.5f); + + dst += 4; + src += 4; + + } + return samples; +} + +static inline long +float_to_u16 (unsigned char *src_char, unsigned char *dst_char, long samples) +{ + float *src = (float *)src_char; + uint16_t *dst = (uint16_t *)dst_char; + long n = samples; + while (n--) + { + float r = src[0]; + float g = src[1]; + float b = src[2]; + float a = src[3]; + + dst[0] = (r >= 1.0f) ? 0xFFFF : ((r <= 0.0f) ? 0x0 : 0xFFFF * r + 0.5f); + dst[1] = (g >= 1.0f) ? 0xFFFF : ((g <= 0.0f) ? 0x0 : 0xFFFF * g + 0.5f); + dst[2] = (b >= 1.0f) ? 0xFFFF : ((b <= 0.0f) ? 0x0 : 0xFFFF * b + 0.5f); + dst[3] = (a >= 1.0f) ? 0xFFFF : ((a <= 0.0f) ? 0x0 : 0xFFFF * a + 0.5f); + + dst += 4; + src += 4; + } + return samples; +} + +static inline long +float_pre_to_u16_pre (unsigned char *src_char, unsigned char *dst_char, long samples) +{ + float *src = (float *)src_char; + uint16_t *dst = (uint16_t *)dst_char; + long n = samples; + while (n--) + { + float r = src[0]; + float g = src[1]; + float b = src[2]; + float a = src[3]; + + if (a > 1.0f) { + r /= a; + g /= a; + b /= a; + a /= a; + } + + dst[0] = (r >= 1.0f) ? 0xFFFF : ((r <= 0.0f) ? 0x0 : 0xFFFF * r + 0.5f); + dst[1] = (g >= 1.0f) ? 0xFFFF : ((g <= 0.0f) ? 0x0 : 0xFFFF * g + 0.5f); + dst[2] = (b >= 1.0f) ? 0xFFFF : ((b <= 0.0f) ? 0x0 : 0xFFFF * b + 0.5f); + dst[3] = (a >= 1.0f) ? 0xFFFF : ((a <= 0.0f) ? 0x0 : 0xFFFF * a + 0.5f); + + dst += 4; + src += 4; + } + return samples; +} + +int +init (void) +{ + /* float and u8 */ + babl_conversion_new (babl_format ("R'G'B'A float"), + babl_format ("R'G'B'A u8"), + "linear", + float_to_u8, + NULL); + babl_conversion_new (babl_format ("RGBA float"), + babl_format ("RGBA u8"), + "linear", + float_to_u8, + NULL); + babl_conversion_new (babl_format ("R'aG'aB'aA float"), + babl_format ("R'aG'aB'aA u8"), + "linear", + float_pre_to_u8_pre, + NULL); + babl_conversion_new (babl_format ("RaGaBaA float"), + babl_format ("RaGaBaA u8"), + "linear", + float_pre_to_u8_pre, + NULL); + + /* float and u16 */ + babl_conversion_new (babl_format ("R'G'B'A float"), + babl_format ("R'G'B'A u16"), + "linear", + float_to_u16, + NULL); + babl_conversion_new (babl_format ("RGBA float"), + babl_format ("RGBA u16"), + "linear", + float_to_u16, + NULL); + babl_conversion_new (babl_format ("R'aG'aB'aA float"), + babl_format ("R'aG'aB'aA u16"), + "linear", + float_pre_to_u16_pre, + NULL); + babl_conversion_new (babl_format ("RaGaBaA float"), + babl_format ("RaGaBaA u16"), + "linear", + float_pre_to_u16_pre, + NULL); + + return 0; +} diff --git a/extensions/sse-half.c b/extensions/sse-half.c new file mode 100644 index 0000000..e20c214 --- /dev/null +++ b/extensions/sse-half.c @@ -0,0 +1,270 @@ +/* babl - dynamically extendable universal pixel conversion library. + * Copyright (C) 2015 Daniel Sabo + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, see + * . + */ + +#include "config.h" + +#if defined(USE_SSE4_1) && defined(USE_F16C) && defined(ARCH_X86_64) + +#include + +#include +#include + +#include "babl.h" +#include "babl-cpuaccel.h" +#include "extensions/util.h" + +static inline long +conv_yHalf_yF (const uint16_t *src, float *dst, long samples) +{ + const uint64_t *s_vec; + __v4sf *d_vec; + + long n = samples; + + s_vec = (const uint64_t *)src; + d_vec = (__v4sf *)dst; + + while (n >= 4) + { + __m128i in_val = _mm_insert_epi64((__m128i)_mm_setzero_ps(), *s_vec++, 0); + __v4sf out_val = (__v4sf)_mm_cvtph_ps(in_val); + _mm_storeu_ps((float *)d_vec++, out_val); + n -= 4; + } + + src = (const uint16_t *)s_vec; + dst = (float *)d_vec; + + while (n) + { + __m128i in_val = _mm_insert_epi16((__m128i)_mm_setzero_ps(), *src++, 0); + __v4sf out_val = (__v4sf)_mm_cvtph_ps(in_val); + _mm_store_ss(dst++, out_val); + n -= 1; + } + + return samples; +} + +static long +conv_yaHalf_yaF (const uint16_t *src, float *dst, long samples) +{ + return conv_yHalf_yF (src, dst, samples * 2) / 2; +} + +static long +conv_rgbHalf_rgbF (const uint16_t *src, float *dst, long samples) +{ + return conv_yHalf_yF (src, dst, samples * 3) / 3; +} + +static long +conv_rgbaHalf_rgbaF (const uint16_t *src, float *dst, long samples) +{ + return conv_yHalf_yF (src, dst, samples * 4) / 4; +} + +static inline long +conv_yF_yHalf (const float *src, uint16_t *dst, long samples) +{ + const __v4sf *s_vec; + uint64_t *d_vec; + + long n = samples; + + s_vec = (const __v4sf *)src; + d_vec = (uint64_t *)dst; + + while (n >= 4) + { + __m128 in_val = _mm_loadu_ps((float *)s_vec++); + __m128i out_val = _mm_cvtps_ph(in_val, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC); + _mm_storel_epi64((__m128i *)d_vec++, out_val); + n -= 4; + } + + src = (const float *)s_vec; + dst = (uint16_t *)d_vec; + + while (n) + { + __m128 in_val = _mm_load_ss(src++); + __m128i out_val = _mm_cvtps_ph(in_val, _MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC); + *dst++ = _mm_extract_epi16(out_val, 0); + n -= 1; + } + + return samples; +} + +static long +conv_yaF_yaHalf (const float *src, uint16_t *dst, long samples) +{ + return conv_yF_yHalf (src, dst, samples * 2) / 2; +} + +static long +conv_rgbF_rgbHalf (const float *src, uint16_t *dst, long samples) +{ + return conv_yF_yHalf (src, dst, samples * 3) / 3; +} + +static long +conv_rgbaF_rgbaHalf (const float *src, uint16_t *dst, long samples) +{ + return conv_yF_yHalf (src, dst, samples * 4) / 4; +} + +#endif /* defined(USE_SSE4_1) && defined(USE_F16C) && defined(ARCH_X86_64) */ + +int init (void); + +int +init (void) +{ +#if defined(USE_SSE4_1) && defined(USE_F16C) && defined(ARCH_X86_64) + const Babl *rgbaF_linear = babl_format_new ( + babl_model ("RGBA"), + babl_type ("float"), + babl_component ("R"), + babl_component ("G"), + babl_component ("B"), + babl_component ("A"), + NULL); + const Babl *rgbaHalf_linear = babl_format_new ( + babl_model ("RGBA"), + babl_type ("half"), + babl_component ("R"), + babl_component ("G"), + babl_component ("B"), + babl_component ("A"), + NULL); + const Babl *rgbaF_gamma = babl_format_new ( + babl_model ("R'G'B'A"), + babl_type ("float"), + babl_component ("R'"), + babl_component ("G'"), + babl_component ("B'"), + babl_component ("A"), + NULL); + const Babl *rgbaHalf_gamma = babl_format_new ( + babl_model ("R'G'B'A"), + babl_type ("half"), + babl_component ("R'"), + babl_component ("G'"), + babl_component ("B'"), + babl_component ("A"), + NULL); + const Babl *rgbF_linear = babl_format_new ( + babl_model ("RGB"), + babl_type ("float"), + babl_component ("R"), + babl_component ("G"), + babl_component ("B"), + NULL); + const Babl *rgbHalf_linear = babl_format_new ( + babl_model ("RGB"), + babl_type ("half"), + babl_component ("R"), + babl_component ("G"), + babl_component ("B"), + NULL); + const Babl *rgbF_gamma = babl_format_new ( + babl_model ("R'G'B'"), + babl_type ("float"), + babl_component ("R'"), + babl_component ("G'"), + babl_component ("B'"), + NULL); + const Babl *rgbHalf_gamma = babl_format_new ( + babl_model ("R'G'B'"), + babl_type ("half"), + babl_component ("R'"), + babl_component ("G'"), + babl_component ("B'"), + NULL); + const Babl *yaF_linear = babl_format_new ( + babl_model ("YA"), + babl_type ("float"), + babl_component ("Y"), + babl_component ("A"), + NULL); + const Babl *yaHalf_linear = babl_format_new ( + babl_model ("YA"), + babl_type ("half"), + babl_component ("Y"), + babl_component ("A"), + NULL); + const Babl *yaF_gamma = babl_format_new ( + babl_model ("Y'A"), + babl_type ("float"), + babl_component ("Y'"), + babl_component ("A"), + NULL); + const Babl *yaHalf_gamma = babl_format_new ( + babl_model ("Y'A"), + babl_type ("half"), + babl_component ("Y'"), + babl_component ("A"), + NULL); + const Babl *yF_linear = babl_format_new ( + babl_model ("Y"), + babl_type ("float"), + babl_component ("Y"), + NULL); + const Babl *yHalf_linear = babl_format_new ( + babl_model ("Y"), + babl_type ("half"), + babl_component ("Y"), + NULL); + const Babl *yF_gamma = babl_format_new ( + babl_model ("Y'"), + babl_type ("float"), + babl_component ("Y'"), + NULL); + const Babl *yHalf_gamma = babl_format_new ( + babl_model ("Y'"), + babl_type ("half"), + babl_component ("Y'"), + NULL); + +#define CONV(src, dst) \ +{ \ + babl_conversion_new (src ## _linear, dst ## _linear, "linear", conv_ ## src ## _ ## dst, NULL); \ + babl_conversion_new (src ## _gamma, dst ## _gamma, "linear", conv_ ## src ## _ ## dst, NULL); \ +} + + if ((babl_cpu_accel_get_support () & BABL_CPU_ACCEL_X86_SSE4_1) && + (babl_cpu_accel_get_support () & BABL_CPU_ACCEL_X86_F16C)) + { + CONV(rgbaHalf, rgbaF); + CONV(rgbHalf, rgbF); + CONV(yaHalf, yaF); + CONV(yHalf, yF); + CONV(rgbaF, rgbaHalf); + CONV(rgbF, rgbHalf); + CONV(yaF, yaHalf); + CONV(yF, yHalf); + } + +#endif /* defined(USE_SSE4_1) && defined(USE_F16C) && defined(ARCH_X86_64) */ + + return 0; +} + diff --git a/extensions/sse2-float.c b/extensions/sse2-float.c new file mode 100644 index 0000000..8148bf2 --- /dev/null +++ b/extensions/sse2-float.c @@ -0,0 +1,678 @@ +/* babl - dynamically extendable universal pixel conversion library. + * Copyright (C) 2013 Massimo Valentini + * Copyright (C) 2013 Daniel Sabo + * Copyright (C) 2013 Loren Merritt + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, see + * . + */ + +#include "config.h" + +#if defined(USE_SSE2) + +/* SSE 2 */ +#include + +#include +#include + +#include "babl.h" +#include "babl-cpuaccel.h" +#include "base/util.h" +#include "extensions/util.h" + +#define Q(a) { a, a, a, a } + +static const float BABL_ALPHA_THRESHOLD_FLOAT = (float)BABL_ALPHA_THRESHOLD; + +static long +conv_rgbaF_linear_rgbAF_linear (const float *src, float *dst, long samples) +{ + long i = 0; + long remainder; + + if (((uintptr_t)src % 16) + ((uintptr_t)dst % 16) == 0) + { + const long n = (samples / 2) * 2; + const __v4sf *s = (const __v4sf*) src; + __v4sf *d = (__v4sf*)dst; + + for ( ; i < n; i += 2) + { + __v4sf rbaa0, rbaa1; + + __v4sf rgba0 = *s++; + __v4sf rgba1 = *s++; + + /* Expand alpha */ + __v4sf aaaa0 = (__v4sf)_mm_shuffle_epi32((__m128i)rgba0, _MM_SHUFFLE(3, 3, 3, 3)); + __v4sf aaaa1 = (__v4sf)_mm_shuffle_epi32((__m128i)rgba1, _MM_SHUFFLE(3, 3, 3, 3)); + + /* Premultiply */ + rgba0 = rgba0 * aaaa0; + rgba1 = rgba1 * aaaa1; + + /* Shuffle the original alpha value back in */ + rbaa0 = _mm_shuffle_ps(rgba0, aaaa0, _MM_SHUFFLE(0, 0, 2, 0)); + rbaa1 = _mm_shuffle_ps(rgba1, aaaa1, _MM_SHUFFLE(0, 0, 2, 0)); + + rgba0 = _mm_shuffle_ps(rgba0, rbaa0, _MM_SHUFFLE(2, 1, 1, 0)); + rgba1 = _mm_shuffle_ps(rgba1, rbaa1, _MM_SHUFFLE(2, 1, 1, 0)); + + *d++ = rgba0; + *d++ = rgba1; + } + _mm_empty (); + } + + dst += i * 4; + src += i * 4; + remainder = samples - i; + while (remainder--) + { + const float a = src[3]; + dst[0] = src[0] * a; + dst[1] = src[1] * a; + dst[2] = src[2] * a; + dst[3] = a; + + src += 4; + dst += 4; + } + + return samples; +} + +static long +conv_rgbAF_linear_rgbaF_linear_shuffle (const float *src, float *dst, long samples) +{ + long i = 0; + long remainder; + + if (((uintptr_t)src % 16) + ((uintptr_t)dst % 16) == 0) + { + const long n = samples; + const __v4sf *s = (const __v4sf*) src; + __v4sf *d = (__v4sf*)dst; + + for ( ; i < n; i += 1) + { + __v4sf pre_rgba0, rgba0, rbaa0, raaaa0; + + float alpha0 = ((float *)s)[3]; + pre_rgba0 = *s; + + if (alpha0 <= BABL_ALPHA_THRESHOLD_FLOAT) + { + /* Zero RGB */ + rgba0 = _mm_setzero_ps(); + } + else + { + float recip0 = 1.0f/alpha0; + + /* Expand reciprocal */ + raaaa0 = _mm_load1_ps(&recip0); + + /* Un-Premultiply */ + rgba0 = pre_rgba0 * raaaa0; + } + + /* Shuffle the original alpha value back in */ + rbaa0 = _mm_shuffle_ps(rgba0, pre_rgba0, _MM_SHUFFLE(3, 3, 2, 0)); + rgba0 = _mm_shuffle_ps(rgba0, rbaa0, _MM_SHUFFLE(2, 1, 1, 0)); + + s++; + *d++ = rgba0; + } + _mm_empty (); + } + + dst += i * 4; + src += i * 4; + remainder = samples - i; + while (remainder--) + { + float alpha = src[3]; + float recip; + if (alpha <= 0.0f) + recip = 0.0f; + else + recip = 1.0f/alpha; + dst[0] = src[0] * recip; + dst[1] = src[1] * recip; + dst[2] = src[2] * recip; + dst[3] = alpha; + + src += 4; + dst += 4; + } + + return samples; +} + +static long +conv_rgbAF_linear_rgbaF_linear_spin (const float *src, float *dst, long samples) +{ + long i = 0; + long remainder; + + if (((uintptr_t)src % 16) + ((uintptr_t)dst % 16) == 0) + { + const long n = samples; + const __v4sf *s = (const __v4sf*) src; + __v4sf *d = (__v4sf*)dst; + const __v4sf zero = _mm_set_ss (BABL_ALPHA_THRESHOLD_FLOAT); + const __v4sf one = _mm_set_ss(1.0f); + + for ( ; i < n; i += 1) + { + __v4sf pre_abgr0, abgr0, rgba0, raaaa0; + + + rgba0 = *s; + /* Rotate to ABGR */ + pre_abgr0 = (__v4sf)_mm_shuffle_epi32((__m128i)rgba0, _MM_SHUFFLE(0, 1, 2, 3)); + + if (_mm_ucomile_ss(pre_abgr0, zero)) + { + /* Zero RGB */ + abgr0 = zero; + } + else + { + /* Un-Premultiply */ + raaaa0 = _mm_div_ss(one, pre_abgr0); + + /* Expand reciprocal */ + raaaa0 = (__v4sf)_mm_shuffle_epi32((__m128i)raaaa0, _MM_SHUFFLE(0, 0, 0, 0)); + + /* Un-Premultiply */ + abgr0 = pre_abgr0 * raaaa0; + } + + /* Move the original alpha value back in */ + abgr0 = _mm_move_ss(abgr0, pre_abgr0); + + /* Rotate to ABGR */ + rgba0 = (__v4sf)_mm_shuffle_epi32((__m128i)abgr0, _MM_SHUFFLE(0, 1, 2, 3)); + + *d++ = rgba0; + s++; + } + _mm_empty (); + } + + dst += i * 4; + src += i * 4; + remainder = samples - i; + while (remainder--) + { + float alpha = src[3]; + float recip; + if (alpha <= 0.0f) + recip = 0.0f; + else + recip = 1.0f/alpha; + dst[0] = src[0] * recip; + dst[1] = src[1] * recip; + dst[2] = src[2] * recip; + dst[3] = alpha; + + src += 4; + dst += 4; + } + + return samples; +} + +#define splat4f(x) ((__v4sf){x,x,x,x}) +#define splat4i(x) ((__v4si){x,x,x,x}) +#define FLT_ONE 0x3f800000 // ((union {float f; int i;}){1.0f}).i +#define FLT_MANTISSA (1<<23) + +static inline __v4sf +init_newton (__v4sf x, double exponent, double c0, double c1, double c2) +{ + double norm = exponent*M_LN2/FLT_MANTISSA; + __v4sf y = _mm_cvtepi32_ps((__m128i)((__v4si)x - splat4i(FLT_ONE))); + return splat4f(c0) + splat4f(c1*norm)*y + splat4f(c2*norm*norm)*y*y; +} + +static inline __v4sf +pow_1_24 (__v4sf x) +{ + __v4sf y, z; + y = init_newton (x, -1./12, 0.9976800269, 0.9885126933, 0.5908575383); + x = _mm_sqrt_ps (x); + /* newton's method for x^(-1/6) */ + z = splat4f (1.f/6.f) * x; + y = splat4f (7.f/6.f) * y - z * ((y*y)*(y*y)*(y*y*y)); + y = splat4f (7.f/6.f) * y - z * ((y*y)*(y*y)*(y*y*y)); + return x*y; +} + +static inline __v4sf +pow_24 (__v4sf x) +{ + __v4sf y, z; + y = init_newton (x, -1./5, 0.9953189663, 0.9594345146, 0.6742970332); + /* newton's method for x^(-1/5) */ + z = splat4f (1.f/5.f) * x; + y = splat4f (6.f/5.f) * y - z * ((y*y*y)*(y*y*y)); + y = splat4f (6.f/5.f) * y - z * ((y*y*y)*(y*y*y)); + x *= y; + return x*x*x; +} + +static inline __v4sf +linear_to_gamma_2_2_sse2 (__v4sf x) +{ + __v4sf curve = pow_1_24 (x) * splat4f (1.055f) - splat4f (0.055f); + __v4sf line = x * splat4f (12.92f); + __v4sf mask = _mm_cmpgt_ps (x, splat4f (0.003130804954f)); + return _mm_or_ps (_mm_and_ps (mask, curve), _mm_andnot_ps (mask, line)); +} + +static inline __v4sf +gamma_2_2_to_linear_sse2 (__v4sf x) +{ + __v4sf curve = pow_24 ((x + splat4f (0.055f)) * splat4f (1/1.055f)); + __v4sf line = x * splat4f (1/12.92f); + __v4sf mask = _mm_cmpgt_ps (x, splat4f (0.04045f)); + return _mm_or_ps (_mm_and_ps (mask, curve), _mm_andnot_ps (mask, line)); +} + +#define GAMMA_RGBA(func, munge) \ +static long \ +func (const float *src, float *dst, long samples)\ +{\ + int i = samples;\ + if (((uintptr_t)src % 16) + ((uintptr_t)dst % 16) == 0)\ + {\ + for (; i > 3; i -= 4, src += 16, dst += 16)\ + {\ + /* Pack the rgb components from 4 pixels into 3 vectors, gammafy, unpack. */\ + __v4sf x0 = _mm_load_ps (src);\ + __v4sf x1 = _mm_load_ps (src+4);\ + __v4sf x2 = _mm_load_ps (src+8);\ + __v4sf x3 = _mm_load_ps (src+12);\ + __v4sf y0 = _mm_movelh_ps (x0, x1);\ + __v4sf y1 = _mm_movelh_ps (x2, x3);\ + __v4sf z0 = _mm_unpackhi_ps (x0, x1);\ + __v4sf z1 = _mm_unpackhi_ps (x2, x3);\ + __v4sf y2 = _mm_movelh_ps (z0, z1);\ + __v4sf y3 = _mm_movehl_ps (z1, z0);\ + y0 = munge (y0);\ + _mm_storel_pi ((__m64*)(dst), y0);\ + _mm_storeh_pi ((__m64*)(dst+4), y0);\ + y1 = munge (y1);\ + _mm_storel_pi ((__m64*)(dst+8), y1);\ + _mm_storeh_pi ((__m64*)(dst+12), y1);\ + y2 = munge (y2);\ + z0 = _mm_unpacklo_ps (y2, y3);\ + z1 = _mm_unpackhi_ps (y2, y3);\ + _mm_storel_pi ((__m64*)(dst+2), z0);\ + _mm_storeh_pi ((__m64*)(dst+6), z0);\ + _mm_storel_pi ((__m64*)(dst+10), z1);\ + _mm_storeh_pi ((__m64*)(dst+14), z1);\ + }\ + for (; i > 0; i--, src += 4, dst += 4)\ + {\ + __v4sf x = munge (_mm_load_ps (src));\ + float a = src[3];\ + _mm_store_ps (dst, x);\ + dst[3] = a;\ + }\ + }\ + else\ + {\ + for (; i > 0; i--, src += 4, dst += 4)\ + {\ + __v4sf x = munge (_mm_loadu_ps (src));\ + float a = src[3];\ + _mm_storeu_ps (dst, x);\ + dst[3] = a;\ + }\ + }\ + return samples;\ +} + +GAMMA_RGBA(conv_rgbaF_linear_rgbaF_gamma, linear_to_gamma_2_2_sse2) +GAMMA_RGBA(conv_rgbaF_gamma_rgbaF_linear, gamma_2_2_to_linear_sse2) + +#define YA_APPLY(load, store, convert) \ +{ \ + __v4sf yyaa0, yyaa1; \ + __v4sf yaya0 = load ((float *)s++); \ + __v4sf yaya1 = load ((float *)s++); \ + __v4sf yyyy01 = _mm_shuffle_ps (yaya0, yaya1, _MM_SHUFFLE(0, 2, 0, 2)); \ +\ + yyyy01 = convert (yyyy01); \ +\ + yyaa0 = _mm_shuffle_ps (yyyy01, yaya0, _MM_SHUFFLE(3, 1, 0, 1)); \ + yaya0 = (__v4sf)_mm_shuffle_epi32((__m128i)yyaa0, _MM_SHUFFLE(3, 1, 2, 0)); \ + yyaa1 = _mm_shuffle_ps (yyyy01, yaya1, _MM_SHUFFLE(3, 1, 2, 3)); \ + yaya1 = (__v4sf)_mm_shuffle_epi32((__m128i)yyaa1, _MM_SHUFFLE(3, 1, 2, 0)); \ +\ + store ((float *)d++, yaya0); \ + store ((float *)d++, yaya1); \ +}\ + +static long +conv_yaF_linear_yaF_gamma (const float *src, float *dst, long samples) +{ + long total = samples; + + const __v4sf *s = (const __v4sf*)src; + __v4sf *d = (__v4sf*)dst; + + if (((uintptr_t)src % 16) + ((uintptr_t)dst % 16) == 0) + { + while (samples > 4) + { + YA_APPLY (_mm_load_ps, _mm_store_ps, linear_to_gamma_2_2_sse2); + samples -= 4; + } + } + else + { + while (samples > 4) + { + YA_APPLY (_mm_loadu_ps, _mm_storeu_ps, linear_to_gamma_2_2_sse2); + samples -= 4; + } + } + + src = (const float *)s; + dst = (float *)d; + + while (samples--) + { + *dst++ = babl_linear_to_gamma_2_2 (*src++); + *dst++ = *src++; + } + + return total; +} + + +static long +conv_yaF_gamma_yaF_linear (const float *src, float *dst, long samples) +{ + long total = samples; + + const __v4sf *s = (const __v4sf*)src; + __v4sf *d = (__v4sf*)dst; + + if (((uintptr_t)src % 16) + ((uintptr_t)dst % 16) == 0) + { + while (samples > 4) + { + YA_APPLY (_mm_load_ps, _mm_store_ps, gamma_2_2_to_linear_sse2); + samples -= 4; + } + } + else + { + while (samples > 4) + { + YA_APPLY (_mm_loadu_ps, _mm_storeu_ps, gamma_2_2_to_linear_sse2); + samples -= 4; + } + } + + src = (const float *)s; + dst = (float *)d; + + while (samples--) + { + *dst++ = babl_gamma_2_2_to_linear (*src++); + *dst++ = *src++; + } + + return total; +} + +static inline long +conv_yF_linear_yF_gamma (const float *src, float *dst, long samples) +{ + long total = samples; + + const __v4sf *s = (const __v4sf*)src; + __v4sf *d = (__v4sf*)dst; + + if (((uintptr_t)src % 16) + ((uintptr_t)dst % 16) == 0) + { + while (samples > 4) + { + __v4sf rgba0 = _mm_load_ps ((float *)s++); + rgba0 = linear_to_gamma_2_2_sse2 (rgba0); + _mm_store_ps ((float *)d++, rgba0); + samples -= 4; + } + } + else + { + while (samples > 4) + { + __v4sf rgba0 = _mm_loadu_ps ((float *)s++); + rgba0 = linear_to_gamma_2_2_sse2 (rgba0); + _mm_storeu_ps ((float *)d++, rgba0); + samples -= 4; + } + } + + src = (const float *)s; + dst = (float *)d; + + while (samples--) + { + *dst++ = babl_linear_to_gamma_2_2 (*src++); + } + + return total; +} + +static inline long +conv_yF_gamma_yF_linear (const float *src, float *dst, long samples) +{ + long total = samples; + + const __v4sf *s = (const __v4sf*)src; + __v4sf *d = (__v4sf*)dst; + + if (((uintptr_t)src % 16) + ((uintptr_t)dst % 16) == 0) + { + while (samples > 4) + { + __v4sf rgba0 = _mm_load_ps ((float *)s++); + rgba0 = gamma_2_2_to_linear_sse2 (rgba0); + _mm_store_ps ((float *)d++, rgba0); + samples -= 4; + } + } + else + { + while (samples > 4) + { + __v4sf rgba0 = _mm_loadu_ps ((float *)s++); + rgba0 = gamma_2_2_to_linear_sse2 (rgba0); + _mm_storeu_ps ((float *)d++, rgba0); + samples -= 4; + } + } + + src = (const float *)s; + dst = (float *)d; + + while (samples--) + { + *dst++ = babl_gamma_2_2_to_linear (*src++); + } + + return total; +} + + +static long +conv_rgbF_linear_rgbF_gamma (const float *src, float *dst, long samples) +{ + return conv_yF_linear_yF_gamma (src, dst, samples * 3) / 3; +} + + +static long +conv_rgbF_gamma_rgbF_linear (const float *src, float *dst, long samples) +{ + return conv_yF_gamma_yF_linear (src, dst, samples * 3) / 3; +} + +#endif /* defined(USE_SSE2) */ + +#define o(src, dst) \ + babl_conversion_new (src, dst, "linear", conv_ ## src ## _ ## dst, NULL) + +int init (void); + +int +init (void) +{ +#if defined(USE_SSE2) + + const Babl *rgbaF_linear = babl_format_new ( + babl_model ("RGBA"), + babl_type ("float"), + babl_component ("R"), + babl_component ("G"), + babl_component ("B"), + babl_component ("A"), + NULL); + const Babl *rgbAF_linear = babl_format_new ( + babl_model ("RaGaBaA"), + babl_type ("float"), + babl_component ("Ra"), + babl_component ("Ga"), + babl_component ("Ba"), + babl_component ("A"), + NULL); + const Babl *rgbAF_gamma = babl_format_new ( + babl_model ("R'aG'aB'aA"), + babl_type ("float"), + babl_component ("R'a"), + babl_component ("G'a"), + babl_component ("B'a"), + babl_component ("A"), + NULL); + const Babl *rgbaF_gamma = babl_format_new ( + babl_model ("R'G'B'A"), + babl_type ("float"), + babl_component ("R'"), + babl_component ("G'"), + babl_component ("B'"), + babl_component ("A"), + NULL); + const Babl *rgbF_linear = babl_format_new ( + babl_model ("RGB"), + babl_type ("float"), + babl_component ("R"), + babl_component ("G"), + babl_component ("B"), + NULL); + const Babl *rgbF_gamma = babl_format_new ( + babl_model ("R'G'B'"), + babl_type ("float"), + babl_component ("R'"), + babl_component ("G'"), + babl_component ("B'"), + NULL); + const Babl *yaF_linear = babl_format_new ( + babl_model ("YA"), + babl_type ("float"), + babl_component ("Y"), + babl_component ("A"), + NULL); + const Babl *yaF_gamma = babl_format_new ( + babl_model ("Y'A"), + babl_type ("float"), + babl_component ("Y'"), + babl_component ("A"), + NULL); + const Babl *yF_linear = babl_format_new ( + babl_model ("Y"), + babl_type ("float"), + babl_component ("Y"), + NULL); + const Babl *yF_gamma = babl_format_new ( + babl_model ("Y'"), + babl_type ("float"), + babl_component ("Y'"), + NULL); + + if ((babl_cpu_accel_get_support () & BABL_CPU_ACCEL_X86_SSE) && + (babl_cpu_accel_get_support () & BABL_CPU_ACCEL_X86_SSE2)) + + { + babl_conversion_new(rgbaF_linear, + rgbAF_linear, + "linear", + conv_rgbaF_linear_rgbAF_linear, + NULL); + + babl_conversion_new(rgbaF_gamma, + rgbAF_gamma, + "linear", + conv_rgbaF_linear_rgbAF_linear, + NULL); + + /* Which of these is faster varies by CPU, and the difference + * is big enough that it's worthwhile to include both and + * let them fight it out in the babl benchmarks. + */ + babl_conversion_new(rgbAF_linear, + rgbaF_linear, + "linear", + conv_rgbAF_linear_rgbaF_linear_shuffle, + NULL); + babl_conversion_new(rgbAF_gamma, + rgbaF_gamma, + "linear", + conv_rgbAF_linear_rgbaF_linear_shuffle, + NULL); + + babl_conversion_new(rgbAF_linear, + rgbaF_linear, + "linear", + conv_rgbAF_linear_rgbaF_linear_spin, + NULL); + + o (yF_linear, yF_gamma); + o (yF_gamma, yF_linear); + + o (yaF_linear, yaF_gamma); + o (yaF_gamma, yaF_linear); + + o (rgbF_linear, rgbF_gamma); + o (rgbF_gamma, rgbF_linear); + + o (rgbaF_linear, rgbaF_gamma); + o (rgbaF_gamma, rgbaF_linear); + } + +#endif /* defined(USE_SSE2) */ + + return 0; +} + diff --git a/extensions/sse2-int16.c b/extensions/sse2-int16.c new file mode 100644 index 0000000..843e030 --- /dev/null +++ b/extensions/sse2-int16.c @@ -0,0 +1,214 @@ +/* babl - dynamically extendable universal pixel conversion library. + * Copyright (C) 2013 Massimo Valentini + * Copyright (C) 2013 Daniel Sabo + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, see + * . + */ + +#include "config.h" + +#if defined(USE_SSE2) + +/* SSE 2 */ +#include + +#include +#include + +#include "babl.h" +#include "babl-cpuaccel.h" +#include "extensions/util.h" + +#define Q(a) { a, a, a, a } +static const __v4sf u16_float = Q (1.f / 65535); + +static long +conv_rgba16_rgbaF (const uint16_t *src, float *dst, long samples) +{ + long i = 0; + + if (((uintptr_t)src % 16) + ((uintptr_t)dst % 16) == 0) + { + long n = (samples / 2) * 2; + const __m128i *s = (const __m128i*) src; + __v4sf *d = (__v4sf*) dst; + + for (; i < n / 2; i++) + { + /* Expand shorts to ints by loading zero in the high bits */ + const __m128i t0 = _mm_unpacklo_epi16 (s[i + 0], (__m128i)_mm_setzero_ps()); + const __m128i t1 = _mm_unpackhi_epi16 (s[i + 0], (__m128i)_mm_setzero_ps()); + + /* Convert to float */ + const __m128 u0 = _mm_cvtepi32_ps (t0); + const __m128 u1 = _mm_cvtepi32_ps (t1); + + const __v4sf rgba0 = u0 * u16_float; + const __v4sf rgba1 = u1 * u16_float; + + d[2 * i + 0] = rgba0; + d[2 * i + 1] = rgba1; + } + _mm_empty(); + } + + for (i *= 2 * 4; i != 4 * samples; i++) + dst[i] = src[i] * (1.f / 65535); + + return samples; +} + +static long +conv_rgba16_rgbAF (const uint16_t *src, float *dst, long samples) +{ + long i = 0; + long remainder; + + if (((uintptr_t)src % 16) + ((uintptr_t)dst % 16) == 0) + { + long n = (samples / 2) * 2; + const __m128i *s = (const __m128i*) src; + __v4sf *d = (__v4sf*) dst; + + const __v4sf max_mask = { 0.0f, 0.0f, 0.0f, 1.0f }; + + for (; i < n / 2; i++) + { + /* Expand shorts to ints by loading zero in the high bits */ + const __m128i t0 = _mm_unpacklo_epi16 (s[i + 0], (__m128i)_mm_setzero_ps()); + const __m128i t1 = _mm_unpackhi_epi16 (s[i + 0], (__m128i)_mm_setzero_ps()); + + /* Convert to float */ + const __m128 u0 = _mm_cvtepi32_ps (t0); + const __m128 u1 = _mm_cvtepi32_ps (t1); + + /* Multiply by 1 / 65535 */ + __v4sf rgba0 = u0 * u16_float; + __v4sf rgba1 = u1 * u16_float; + + /* Expand alpha */ + __v4sf aaaa0 = (__v4sf)_mm_shuffle_epi32((__m128i)rgba0, _MM_SHUFFLE(3, 3, 3, 3)); + __v4sf aaaa1 = (__v4sf)_mm_shuffle_epi32((__m128i)rgba1, _MM_SHUFFLE(3, 3, 3, 3)); + + /* Set the value in the alpha slot to 1.0, we know max is sufficent because alpha was a short */ + aaaa0 = _mm_max_ps(aaaa0, max_mask); + aaaa1 = _mm_max_ps(aaaa1, max_mask); + + /* Premultiply */ + rgba0 = rgba0 * aaaa0; + rgba1 = rgba1 * aaaa1; + + d[2 * i + 0] = rgba0; + d[2 * i + 1] = rgba1; + } + _mm_empty(); + } + + dst += i * 2 * 4; + src += i * 2 * 4; + remainder = samples - (i * 2); + while (remainder--) + { + const float a = src[3] / 65535.0f; + const float a_term = a / 65535.0f; + dst[0] = src[0] * a_term; + dst[1] = src[1] * a_term; + dst[2] = src[2] * a_term; + dst[3] = a; + + src += 4; + dst += 4; + } + + return samples; +} + +#endif /* defined(USE_SSE2) */ + +int init (void); + +int +init (void) +{ +#if defined(USE_SSE2) + + const Babl *rgbaF_linear = babl_format_new ( + babl_model ("RGBA"), + babl_type ("float"), + babl_component ("R"), + babl_component ("G"), + babl_component ("B"), + babl_component ("A"), + NULL); + const Babl *rgbAF_linear = babl_format_new ( + babl_model ("RaGaBaA"), + babl_type ("float"), + babl_component ("Ra"), + babl_component ("Ga"), + babl_component ("Ba"), + babl_component ("A"), + NULL); + const Babl *rgba16_linear = babl_format_new ( + babl_model ("RGBA"), + babl_type ("u16"), + babl_component ("R"), + babl_component ("G"), + babl_component ("B"), + babl_component ("A"), + NULL); + + const Babl *rgbaF_gamma = babl_format_new ( + babl_model ("R'G'B'A"), + babl_type ("float"), + babl_component ("R'"), + babl_component ("G'"), + babl_component ("B'"), + babl_component ("A"), + NULL); + const Babl *rgbAF_gamma = babl_format_new ( + babl_model ("R'aG'aB'aA"), + babl_type ("float"), + babl_component ("R'a"), + babl_component ("G'a"), + babl_component ("B'a"), + babl_component ("A"), + NULL); + const Babl *rgba16_gamma = babl_format_new ( + babl_model ("R'G'B'A"), + babl_type ("u16"), + babl_component ("R'"), + babl_component ("G'"), + babl_component ("B'"), + babl_component ("A"), + NULL); + +#define CONV(src, dst) \ +{ \ + babl_conversion_new (src ## _linear, dst ## _linear, "linear", conv_ ## src ## _ ## dst, NULL); \ + babl_conversion_new (src ## _gamma, dst ## _gamma, "linear", conv_ ## src ## _ ## dst, NULL); \ +} + + if ((babl_cpu_accel_get_support () & BABL_CPU_ACCEL_X86_SSE) && + (babl_cpu_accel_get_support () & BABL_CPU_ACCEL_X86_SSE2)) + { + CONV (rgba16, rgbaF); + CONV (rgba16, rgbAF); + } + +#endif /* defined(USE_SSE2) */ + + return 0; +} + diff --git a/extensions/sse2-int8.c b/extensions/sse2-int8.c new file mode 100644 index 0000000..67ff579 --- /dev/null +++ b/extensions/sse2-int8.c @@ -0,0 +1,280 @@ +/* babl - dynamically extendable universal pixel conversion library. + * Copyright (C) 2013 Daniel Sabo + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, see + * . + */ + +#include "config.h" + +#if defined(USE_SSE2) + +/* SSE 2 */ +#include + +#include +#include + +#include "babl.h" +#include "babl-cpuaccel.h" +#include "extensions/util.h" + +static inline long +conv_yF_y8 (const float *src, uint8_t *dst, long samples) +{ + const __v4sf *s_vec; + __m128i *d_vec; + uint32_t *d_int; + + long n = samples; + + const __v4sf byte_fill = _mm_set_ps1(255.0f); + const __v4sf half = _mm_set_ps1(0.5); + + while (((uintptr_t)src % 16) && n > 0) + { + /* Work through the unaligned floats */ + float y = *src++; + *dst++ = (y >= 1.0f) ? 0xFF : ((y <= 0.0f) ? 0x0 : 0xFF * y + 0.5f); + + n -= 1; + } + + s_vec = (__v4sf *)src; + d_vec = (__m128i *)dst; + + /* Aligned chunks */ + + while (n > 16) + { + __v4sf yyyy0, yyyy1, yyyy2, yyyy3; + __m128i i32_0, i32_1, i32_2, i32_3; + __m128i i16_01, i16_23; + __m128i mm_ints; + + /* Add 0.5 and truncate, to match C rounding behavior. + * + * The _mm_min_ps is needed because _mm_packs_epi32 uses + * signed saturation, the unsigned version wasn't added + * until SSE4. + */ + yyyy0 = *s_vec++ * byte_fill + half; + yyyy0 = _mm_min_ps(yyyy0, byte_fill); + i32_0 = _mm_cvttps_epi32 ((__m128)yyyy0); + + yyyy1 = *s_vec++ * byte_fill + half; + yyyy1 = _mm_min_ps(yyyy1, byte_fill); + i32_1 = _mm_cvttps_epi32 ((__m128)yyyy1); + + i16_01 = _mm_packs_epi32 (i32_0, i32_1); + + yyyy2 = *s_vec++ * byte_fill + half; + yyyy2 = _mm_min_ps(yyyy2, byte_fill); + i32_2 = _mm_cvttps_epi32 ((__m128)yyyy2); + + yyyy3 = *s_vec++ * byte_fill + half; + yyyy3 = _mm_min_ps(yyyy3, byte_fill); + i32_3 = _mm_cvttps_epi32 ((__m128)yyyy3); + + i16_23 = _mm_packs_epi32 (i32_2, i32_3); + + mm_ints = _mm_packus_epi16 (i16_01, i16_23); + + _mm_storeu_si128 (d_vec++, mm_ints); + + n -= 16; + } + + d_int = (uint32_t *)d_vec; + + while (n > 4) + { + __v4sf yyyy0; + __m128i mm_ints; + + yyyy0 = *s_vec++ * byte_fill + half; + yyyy0 = _mm_min_ps(yyyy0, byte_fill); + mm_ints = _mm_cvttps_epi32 ((__m128)yyyy0); + mm_ints = _mm_packs_epi32 (mm_ints, mm_ints); + mm_ints = _mm_packus_epi16 (mm_ints, mm_ints); + _mm_store_ss ((float *)d_int++, (__v4sf)mm_ints); + + n -= 4; + } + + src = (float *)s_vec; + dst = (uint8_t *)d_int; + + while (n > 0) + { + float y = *src++; + *dst++ = (y >= 1.0f) ? 0xFF : ((y <= 0.0f) ? 0x0 : 0xFF * y + 0.5f); + + n -= 1; + } + + return samples; +} + +static long +conv_yaF_ya8 (const float *src, uint8_t *dst, long samples) +{ + return conv_yF_y8 (src, dst, samples * 2) / 2; +} + + +static long +conv_rgbF_rgb8 (const float *src, uint8_t *dst, long samples) +{ + return conv_yF_y8 (src, dst, samples * 3) / 3; +} + +static long +conv_rgbaF_rgba8 (const float *src, uint8_t *dst, long samples) +{ + return conv_yF_y8 (src, dst, samples * 4) / 4; +} + +#endif + +int init (void); + +int +init (void) +{ +#if defined(USE_SSE2) + const Babl *rgbaF_linear = babl_format_new ( + babl_model ("RGBA"), + babl_type ("float"), + babl_component ("R"), + babl_component ("G"), + babl_component ("B"), + babl_component ("A"), + NULL); + const Babl *rgba8_linear = babl_format_new ( + babl_model ("RGBA"), + babl_type ("u8"), + babl_component ("R"), + babl_component ("G"), + babl_component ("B"), + babl_component ("A"), + NULL); + const Babl *rgbaF_gamma = babl_format_new ( + babl_model ("R'G'B'A"), + babl_type ("float"), + babl_component ("R'"), + babl_component ("G'"), + babl_component ("B'"), + babl_component ("A"), + NULL); + const Babl *rgba8_gamma = babl_format_new ( + babl_model ("R'G'B'A"), + babl_type ("u8"), + babl_component ("R'"), + babl_component ("G'"), + babl_component ("B'"), + babl_component ("A"), + NULL); + const Babl *rgbF_linear = babl_format_new ( + babl_model ("RGB"), + babl_type ("float"), + babl_component ("R"), + babl_component ("G"), + babl_component ("B"), + NULL); + const Babl *rgb8_linear = babl_format_new ( + babl_model ("RGB"), + babl_type ("u8"), + babl_component ("R"), + babl_component ("G"), + babl_component ("B"), + NULL); + const Babl *rgbF_gamma = babl_format_new ( + babl_model ("R'G'B'"), + babl_type ("float"), + babl_component ("R'"), + babl_component ("G'"), + babl_component ("B'"), + NULL); + const Babl *rgb8_gamma = babl_format_new ( + babl_model ("R'G'B'"), + babl_type ("u8"), + babl_component ("R'"), + babl_component ("G'"), + babl_component ("B'"), + NULL); + const Babl *yaF_linear = babl_format_new ( + babl_model ("YA"), + babl_type ("float"), + babl_component ("Y"), + babl_component ("A"), + NULL); + const Babl *ya8_linear = babl_format_new ( + babl_model ("YA"), + babl_type ("u8"), + babl_component ("Y"), + babl_component ("A"), + NULL); + const Babl *yaF_gamma = babl_format_new ( + babl_model ("Y'A"), + babl_type ("float"), + babl_component ("Y'"), + babl_component ("A"), + NULL); + const Babl *ya8_gamma = babl_format_new ( + babl_model ("Y'A"), + babl_type ("u8"), + babl_component ("Y'"), + babl_component ("A"), + NULL); + const Babl *yF_linear = babl_format_new ( + babl_model ("Y"), + babl_type ("float"), + babl_component ("Y"), + NULL); + const Babl *y8_linear = babl_format_new ( + babl_model ("Y"), + babl_type ("u8"), + babl_component ("Y"), + NULL); + const Babl *yF_gamma = babl_format_new ( + babl_model ("Y'"), + babl_type ("float"), + babl_component ("Y'"), + NULL); + const Babl *y8_gamma = babl_format_new ( + babl_model ("Y'"), + babl_type ("u8"), + babl_component ("Y'"), + NULL); + +#define CONV(src, dst) \ +{ \ + babl_conversion_new (src ## _linear, dst ## _linear, "linear", conv_ ## src ## _ ## dst, NULL); \ + babl_conversion_new (src ## _gamma, dst ## _gamma, "linear", conv_ ## src ## _ ## dst, NULL); \ +} + + if ((babl_cpu_accel_get_support () & BABL_CPU_ACCEL_X86_SSE2)) + { + CONV(rgbaF, rgba8); + CONV(rgbF, rgb8); + CONV(yaF, ya8); + CONV(yF, y8); + } + +#endif + + return 0; +} + diff --git a/extensions/sse4-int8.c b/extensions/sse4-int8.c new file mode 100644 index 0000000..73f63e3 --- /dev/null +++ b/extensions/sse4-int8.c @@ -0,0 +1,218 @@ +/* babl - dynamically extendable universal pixel conversion library. + * Copyright (C) 2013 Daniel Sabo + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, see + * . + */ + +#include "config.h" + +#if defined(USE_SSE4_1) + +/* SSE 4 */ +#include + +#include +#include + +#include "babl.h" +#include "babl-cpuaccel.h" +#include "extensions/util.h" + +static inline long +conv_y8_yF (const uint8_t *src, float *dst, long samples) +{ + const float factor = 1.0f / 255.0f; + const __v4sf factor_vec = {1.0f / 255.0f, 1.0f / 255.0f, 1.0f / 255.0f, 1.0f / 255.0f}; + const uint32_t *s_vec; + __v4sf *d_vec; + + long n = samples; + + s_vec = (const uint32_t *)src; + d_vec = (__v4sf *)dst; + + while (n >= 4) + { + __m128i in_val; + __v4sf out_val; + in_val = _mm_insert_epi32 (in_val, *s_vec++, 0); + in_val = _mm_cvtepu8_epi32 (in_val); + out_val = _mm_cvtepi32_ps (in_val) * factor_vec; + _mm_storeu_ps ((float *)d_vec++, out_val); + n -= 4; + } + + src = (const uint8_t *)s_vec; + dst = (float *)d_vec; + + while (n) + { + *dst++ = (float)(*src++) * factor; + n -= 1; + } + + return samples; +} + +static long +conv_ya8_yaF (const uint8_t *src, float *dst, long samples) +{ + return conv_y8_yF (src, dst, samples * 2) / 2; +} + +static long +conv_rgb8_rgbF (const uint8_t *src, float *dst, long samples) +{ + return conv_y8_yF (src, dst, samples * 3) / 3; +} + +static long +conv_rgba8_rgbaF (const uint8_t *src, float *dst, long samples) +{ + return conv_y8_yF (src, dst, samples * 4) / 4; +} + +#endif + +int init (void); + +int +init (void) +{ +#if defined(USE_SSE4_1) + const Babl *rgbaF_linear = babl_format_new ( + babl_model ("RGBA"), + babl_type ("float"), + babl_component ("R"), + babl_component ("G"), + babl_component ("B"), + babl_component ("A"), + NULL); + const Babl *rgba8_linear = babl_format_new ( + babl_model ("RGBA"), + babl_type ("u8"), + babl_component ("R"), + babl_component ("G"), + babl_component ("B"), + babl_component ("A"), + NULL); + const Babl *rgbaF_gamma = babl_format_new ( + babl_model ("R'G'B'A"), + babl_type ("float"), + babl_component ("R'"), + babl_component ("G'"), + babl_component ("B'"), + babl_component ("A"), + NULL); + const Babl *rgba8_gamma = babl_format_new ( + babl_model ("R'G'B'A"), + babl_type ("u8"), + babl_component ("R'"), + babl_component ("G'"), + babl_component ("B'"), + babl_component ("A"), + NULL); + const Babl *rgbF_linear = babl_format_new ( + babl_model ("RGB"), + babl_type ("float"), + babl_component ("R"), + babl_component ("G"), + babl_component ("B"), + NULL); + const Babl *rgb8_linear = babl_format_new ( + babl_model ("RGB"), + babl_type ("u8"), + babl_component ("R"), + babl_component ("G"), + babl_component ("B"), + NULL); + const Babl *rgbF_gamma = babl_format_new ( + babl_model ("R'G'B'"), + babl_type ("float"), + babl_component ("R'"), + babl_component ("G'"), + babl_component ("B'"), + NULL); + const Babl *rgb8_gamma = babl_format_new ( + babl_model ("R'G'B'"), + babl_type ("u8"), + babl_component ("R'"), + babl_component ("G'"), + babl_component ("B'"), + NULL); + const Babl *yaF_linear = babl_format_new ( + babl_model ("YA"), + babl_type ("float"), + babl_component ("Y"), + babl_component ("A"), + NULL); + const Babl *ya8_linear = babl_format_new ( + babl_model ("YA"), + babl_type ("u8"), + babl_component ("Y"), + babl_component ("A"), + NULL); + const Babl *yaF_gamma = babl_format_new ( + babl_model ("Y'A"), + babl_type ("float"), + babl_component ("Y'"), + babl_component ("A"), + NULL); + const Babl *ya8_gamma = babl_format_new ( + babl_model ("Y'A"), + babl_type ("u8"), + babl_component ("Y'"), + babl_component ("A"), + NULL); + const Babl *yF_linear = babl_format_new ( + babl_model ("Y"), + babl_type ("float"), + babl_component ("Y"), + NULL); + const Babl *y8_linear = babl_format_new ( + babl_model ("Y"), + babl_type ("u8"), + babl_component ("Y"), + NULL); + const Babl *yF_gamma = babl_format_new ( + babl_model ("Y'"), + babl_type ("float"), + babl_component ("Y'"), + NULL); + const Babl *y8_gamma = babl_format_new ( + babl_model ("Y'"), + babl_type ("u8"), + babl_component ("Y'"), + NULL); + +#define CONV(src, dst) \ +{ \ + babl_conversion_new (src ## _linear, dst ## _linear, "linear", conv_ ## src ## _ ## dst, NULL); \ + babl_conversion_new (src ## _gamma, dst ## _gamma, "linear", conv_ ## src ## _ ## dst, NULL); \ +} + + if ((babl_cpu_accel_get_support () & BABL_CPU_ACCEL_X86_SSE4_1)) + { + CONV(rgba8, rgbaF); + CONV(rgb8, rgbF); + CONV(ya8, yaF); + CONV(y8, yF); + } + +#endif + + return 0; +} + diff --git a/extensions/two-table-tables.h b/extensions/two-table-tables.h new file mode 100644 index 0000000..528d3f6 --- /dev/null +++ b/extensions/two-table-tables.h @@ -0,0 +1,3444 @@ +/* Gamma table generated from a babl conversion of Y to Y' */ +static const unsigned char linear_to_gamma[65536] = +{ +0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2, +2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4, +4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6, +6,6,6,6,6,6,6,6,6,6,6,6,6,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,8,8,8,8,8,8, +8,8,8,8,8,8,8,8,8,8,8,8,8,8,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,10,10,10,10, +10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,11,11,11,11,11,11,11,11,11,11, +11,11,11,11,11,11,11,11,11,11,11,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12, +12,12,12,12,12,12,12,12,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13, +13,13,13,13,13,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14, +14,14,14,14,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15, +15,15,15,15,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, +16,16,16,16,16,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17, +17,17,17,17,17,17,17,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18, +18,18,18,18,18,18,18,18,18,18,18,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19, +19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,20,20,20,20,20,20,20,20,20,20, +20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,21,21,21,21, +21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21, +21,21,21,21,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22, +22,22,22,22,22,22,22,22,22,22,22,22,22,23,23,23,23,23,23,23,23,23,23,23,23,23, +23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,24,24,24, +24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24, +24,24,24,24,24,24,24,24,24,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25, +25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,26,26,26,26, +26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26, +26,26,26,26,26,26,26,26,26,26,26,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27, +27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27, +27,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28, +28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,29,29,29,29,29,29,29,29, +29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29, +29,29,29,29,29,29,29,29,29,29,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30, +30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30, +30,30,30,30,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31, +31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31, +31,31,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, +32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,33, +33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33, +33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,34,34, +34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34, +34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,35,35, +35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35, +35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35, +36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36, +36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36,36, +36,36,36,36,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, +37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37,37, +37,37,37,37,37,37,37,37,37,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38, +38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38, +38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,39,39,39,39,39,39,39,39,39,39,39, +39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39, +39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,40,40,40, +40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40, +40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40, +40,40,40,40,40,40,40,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41, +41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41, +41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,42,42,42,42,42,42,42, +42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42, +42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42,42, +42,42,42,42,42,42,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43, +43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43, +43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,44,44,44,44,44,44, +44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44, +44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44, +44,44,44,44,44,44,44,44,44,44,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45, +45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45, +45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45, +45,45,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46, +46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46, +46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,47,47,47,47, +47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47, +47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47, +47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,48,48,48,48,48,48,48,48,48, +48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48, +48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48, +48,48,48,48,48,48,48,48,48,48,48,48,48,48,49,49,49,49,49,49,49,49,49,49,49,49, +49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49, +49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49, +49,49,49,49,49,49,49,49,49,49,49,49,49,50,50,50,50,50,50,50,50,50,50,50,50,50, +50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50, +50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50,50, +50,50,50,50,50,50,50,50,50,50,50,50,50,51,51,51,51,51,51,51,51,51,51,51,51,51, +51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51, +51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51, +51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,52,52,52,52,52,52,52,52,52,52,52, +52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52, +52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52, +52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,52,53,53,53,53,53,53,53, +53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53, +53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53, +53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,54, +54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54, +54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54, +54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54, +54,54,54,54,54,54,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55, +55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55, +55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55, +55,55,55,55,55,55,55,55,55,55,55,55,55,55,55,56,56,56,56,56,56,56,56,56,56,56, +56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56, +56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56, +56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56,56, +57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, +57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, +57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57,57, +57,57,57,57,57,57,57,57,57,57,57,57,58,58,58,58,58,58,58,58,58,58,58,58,58,58, +58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58, +58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58, +58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58, +58,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59, +59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59, +59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59, +59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,60,60,60,60,60,60,60,60,60, +60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60, +60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60, +60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60, +60,60,60,60,60,60,60,60,60,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, +61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, +61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, +61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, +61,61,61,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62, +62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62, +62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62, +62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,62,63,63, +63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63, +63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63, +63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63, +63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,64,64,64,64, +64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64, +64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64, +64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64, +64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,65,65,65,65,65, +65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65, +65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65, +65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65, +65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,66,66,66, +66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66, +66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66, +66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66, +66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66,66, +67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67, +67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67, +67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67, +67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67, +67,67,67,67,67,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68, +68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68, +68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68, +68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68,68, +68,68,68,68,68,68,68,68,68,68,68,69,69,69,69,69,69,69,69,69,69,69,69,69,69,69, +69,69,69,69,69,69,69,69,69,69,69,69,69,69,69,69,69,69,69,69,69,69,69,69,69,69, +69,69,69,69,69,69,69,69,69,69,69,69,69,69,69,69,69,69,69,69,69,69,69,69,69,69, +69,69,69,69,69,69,69,69,69,69,69,69,69,69,69,69,69,69,69,69,69,69,69,69,69,69, +69,69,69,69,69,69,69,69,69,69,69,69,69,69,69,69,69,69,69,69,70,70,70,70,70,70, +70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70, +70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70, +70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70, +70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70, +70,70,70,70,70,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71, +71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71, +71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71, +71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71, +71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,71,72,72,72,72,72,72,72,72,72, +72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72, +72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72, +72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72, +72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72,72, +72,72,72,72,72,72,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73, +73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73, +73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73, +73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73, +73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,74,74,74,74, +74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74, +74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74, +74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74, +74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74, +74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,75,75,75,75,75,75,75,75,75,75,75, +75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75, +75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75, +75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75, +75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75, +75,75,75,75,75,75,75,75,75,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76, +76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76, +76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76, +76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76, +76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76, +76,76,76,76,76,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77, +77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77, +77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77, +77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77, +77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77, +77,77,77,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78, +78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78, +78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78, +78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78, +78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78, +78,78,78,78,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79, +79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79, +79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79, +79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79, +79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79, +79,79,79,79,79,79,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80, +80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80, +80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80, +80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80, +80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80, +80,80,80,80,80,80,80,80,80,80,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81, +81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81, +81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81, +81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81, +81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81, +81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,82,82,82,82,82,82,82,82,82,82, +82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82, +82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82, +82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82, +82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82, +82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,83,83, +83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83, +83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83, +83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83, +83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83, +83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83, +83,83,83,83,83,83,83,83,83,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84, +84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84, +84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84, +84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84, +84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84, +84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,84,85,85,85,85,85, +85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85, +85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85, +85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85, +85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85, +85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85, +85,85,85,85,85,85,85,85,85,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86, +86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86, +86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86, +86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86, +86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86, +86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86,86, +87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87, +87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87, +87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87, +87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87, +87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87, +87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,88,88,88,88,88,88,88,88, +88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88, +88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88, +88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88, +88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88, +88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88,88, +88,88,88,88,88,88,88,88,88,88,88,88,89,89,89,89,89,89,89,89,89,89,89,89,89,89, +89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89, +89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89, +89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89, +89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89, +89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89, +89,89,89,89,89,89,89,89,89,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90, +90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90, +90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90, +90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90, +90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90, +90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90, +90,90,90,90,90,90,90,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91, +91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91, +91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91, +91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91, +91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91, +91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91, +91,91,91,91,91,91,91,91,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92, +92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92, +92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92, +92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92, +92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92, +92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92,92, +92,92,92,92,92,92,92,92,92,92,92,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93, +93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93, +93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93, +93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93, +93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93, +93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93, +93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,93,94,94,94,94,94,94,94,94,94,94, +94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94, +94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94, +94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94, +94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94, +94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94, +94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,94,95,95,95, +95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95, +95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95, +95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95, +95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95, +95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95, +95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95, +95,95,95,95,95,95,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96, +96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96, +96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96, +96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96, +96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96, +96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96, +96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,96,97,97,97,97,97,97,97,97,97, +97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97, +97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97, +97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97, +97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97, +97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97, +97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97,97, +97,97,97,97,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98, +98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98, +98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98, +98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98, +98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98, +98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98, +98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,98,99,99,99,99,99,99, +99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99, +99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99, +99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99, +99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99, +99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99, +99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99, +99,99,99,99,99,99,99,99,99,99,99,99,100,100,100,100,100,100,100,100,100,100,100, +100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100, +100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100, +100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100, +100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100, +100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100, +100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100, +100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100, +100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100, +100,100,100,100,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, +101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, +101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, +101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, +101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, +101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, +101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, +101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, +101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101, +101,101,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102, +102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102, +102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102, +102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102, +102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102, +102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102, +102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102, +102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102, +102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102, +102,102,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103, +103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103, +103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103, +103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103, +103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103, +103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103, +103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103, +103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103, +103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103, +103,103,103,103,103,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104, +104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104, +104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104, +104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104, +104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104, +104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104, +104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104, +104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104, +104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104, +104,104,104,104,104,104,104,104,104,105,105,105,105,105,105,105,105,105,105,105, +105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105, +105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105, +105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105, +105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105, +105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105, +105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105, +105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105, +105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105, +105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,105,106,106,106,106, +106,106,106,106,106,106,106,106,106,106,106,106,106,106,106,106,106,106,106,106, +106,106,106,106,106,106,106,106,106,106,106,106,106,106,106,106,106,106,106,106, +106,106,106,106,106,106,106,106,106,106,106,106,106,106,106,106,106,106,106,106, +106,106,106,106,106,106,106,106,106,106,106,106,106,106,106,106,106,106,106,106, +106,106,106,106,106,106,106,106,106,106,106,106,106,106,106,106,106,106,106,106, +106,106,106,106,106,106,106,106,106,106,106,106,106,106,106,106,106,106,106,106, +106,106,106,106,106,106,106,106,106,106,106,106,106,106,106,106,106,106,106,106, +106,106,106,106,106,106,106,106,106,106,106,106,106,106,106,106,106,106,106,106, +106,106,106,106,106,106,106,106,106,106,106,106,106,106,106,106,106,106,106,106, +106,106,106,106,106,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107, +107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107, +107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107, +107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107, +107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107, +107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107, +107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107, +107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107, +107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107, +107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,108,108,108,108, +108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108, +108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108, +108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108, +108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108, +108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108, +108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108, +108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108, +108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108, +108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108, +108,108,108,108,108,108,108,108,108,109,109,109,109,109,109,109,109,109,109,109, +109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109, +109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109, +109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109, +109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109, +109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109, +109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109, +109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109, +109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109, +109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109, +109,109,109,109,109,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110, +110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110, +110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110, +110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110, +110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110, +110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110, +110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110, +110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110, +110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110, +110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110, +110,110,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111, +111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111, +111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111, +111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111, +111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111, +111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111, +111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111, +111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111, +111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111, +111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111, +111,111,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112, +112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112, +112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112, +112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112, +112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112, +112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112, +112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112, +112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112, +112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112, +112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112, +112,112,112,112,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113, +113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113, +113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113, +113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113, +113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113, +113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113, +113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113, +113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113, +113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113, +113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113, +113,113,113,113,113,113,113,113,113,114,114,114,114,114,114,114,114,114,114,114, +114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114, +114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114, +114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114, +114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114, +114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114, +114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114, +114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114, +114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114, +114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114, +114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,115,115,115,115, +115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115, +115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115, +115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115, +115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115, +115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115, +115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115, +115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115, +115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115, +115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115, +115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115, +115,115,115,115,115,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116, +116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116, +116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116, +116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116, +116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116, +116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116, +116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116, +116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116, +116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116, +116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116, +116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,117,117,117,117, +117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117, +117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117, +117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117, +117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117, +117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117, +117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117, +117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117, +117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117, +117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117, +117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117, +117,117,117,117,117,117,117,117,117,118,118,118,118,118,118,118,118,118,118,118, +118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118, +118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118, +118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118, +118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118, +118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118, +118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118, +118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118, +118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118, +118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118, +118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118, +118,118,118,118,118,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119, +119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119, +119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119, +119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119, +119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119, +119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119, +119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119, +119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119, +119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119, +119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119, +119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119, +119,119,119,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120, +120,120,120,120,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121, +121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121, +121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121, +121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121, +121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121, +121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121, +121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121, +121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121, +121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121, +121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121, +121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121, +121,121,121,121,121,121,121,122,122,122,122,122,122,122,122,122,122,122,122,122, +122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122, +122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122, +122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122, +122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122, +122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122, +122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122, +122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122, +122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122, +122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122, +122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122, +122,122,122,122,122,122,122,122,122,122,122,122,123,123,123,123,123,123,123,123, +123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123, +123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123, +123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123, +123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123, +123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123, +123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123, +123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123, +123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123, +123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123, +123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123, +123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,124, +124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124, +124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124, +124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124, +124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124, +124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124, +124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124, +124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124, +124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124, +124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124, +124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124, +124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124, +124,124,124,124,124,124,124,124,124,125,125,125,125,125,125,125,125,125,125,125, +125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, +125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, +125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, +125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, +125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, +125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, +125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, +125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, +125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, +125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, +125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, +125,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, +126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, +126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, +126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, +126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, +126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, +126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, +126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, +126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, +126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, +126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, +126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,127,127,127,127,127, +127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127, +127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127, +127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127, +127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127, +127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127, +127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127, +127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127, +127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127, +127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127, +127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127, +127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127, +127,127,127,127,127,127,127,127,127,127,127,127,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,129,129,129,129,129,129,129,129,129, +129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129, +129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129, +129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129, +129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129, +129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129, +129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129, +129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129, +129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129, +129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129, +129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129, +129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129, +129,129,129,129,129,129,129,129,129,129,129,129,130,130,130,130,130,130,130,130, +130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130, +130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130, +130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130, +130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130, +130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130, +130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130, +130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130, +130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130, +130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130, +130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130, +130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130, +130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,131,131,131,131, +131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131, +131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131, +131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131, +131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131, +131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131, +131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131, +131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131, +131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131, +131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131, +131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131, +131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131, +131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131, +131,131,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132, +132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132, +132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132, +132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132, +132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132, +132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132, +132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132, +132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132, +132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132, +132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132, +132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132, +132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132, +132,132,132,132,132,132,132,132,132,132,132,133,133,133,133,133,133,133,133,133, +133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133, +133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133, +133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133, +133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133, +133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133, +133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133, +133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133, +133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133, +133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133, +133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133, +133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133, +133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133, +133,133,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134, +134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134, +134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134, +134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134, +134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134, +134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134, +134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134, +134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134, +134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134, +134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134, +134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134, +134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134, +134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,135,135,135,135,135, +135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135, +135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135, +135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135, +135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135, +135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135, +135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135, +135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135, +135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135, +135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135, +135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135, +135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135, +135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135, +135,135,135,135,135,135,135,135,135,135,135,136,136,136,136,136,136,136,136,136, +136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136, +136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136, +136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136, +136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136, +136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136, +136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136, +136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136, +136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136, +136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136, +136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136, +136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136, +136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136, +136,136,136,136,136,136,136,136,136,137,137,137,137,137,137,137,137,137,137,137, +137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137, +137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137, +137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137, +137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137, +137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137, +137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137, +137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137, +137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137, +137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137, +137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137, +137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137, +137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137, +137,137,137,137,137,137,137,137,137,138,138,138,138,138,138,138,138,138,138,138, +138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138, +138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138, +138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138, +138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138, +138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138, +138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138, +138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138, +138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138, +138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138, +138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138, +138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138, +138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138, +138,138,138,138,138,138,138,138,138,138,138,138,139,139,139,139,139,139,139,139, +139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, +139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, +139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, +139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, +139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, +139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, +139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, +139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, +139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, +139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, +139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, +139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139, +139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,140,140, +140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140, +140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140, +140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140, +140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140, +140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140, +140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140, +140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140, +140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140, +140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140, +140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140, +140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140, +140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140, +140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140, +140,140,140,140,140,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, +141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,142,142,142,142, +142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, +142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, +142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, +142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, +142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, +142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, +142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, +142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, +142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, +142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, +142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, +142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, +142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, +142,142,142,142,142,142,142,142,143,143,143,143,143,143,143,143,143,143,143,143, +143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143, +143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143, +143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143, +143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143, +143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143, +143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143, +143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143, +143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143, +143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143, +143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143, +143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143, +143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143, +143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143, +143,143,143,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144, +144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144, +144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144, +144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144, +144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144, +144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144, +144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144, +144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144, +144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144, +144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144, +144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144, +144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144, +144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144, +144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144, +144,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145, +145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145, +145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145, +145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145, +145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145, +145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145, +145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145, +145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145, +145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145, +145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145, +145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145, +145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145, +145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145, +145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145, +145,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, +146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146, +146,146,146,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147, +147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147, +147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147, +147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147, +147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147, +147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147, +147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147, +147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147, +147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147, +147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147, +147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147, +147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147, +147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147, +147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147, +147,147,147,147,147,147,147,147,148,148,148,148,148,148,148,148,148,148,148,148, +148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148, +148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148, +148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148, +148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148, +148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148, +148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148, +148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148, +148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148, +148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148, +148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148, +148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148, +148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148, +148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148, +148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,149,149,149,149, +149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149, +149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149, +149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149, +149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149, +149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149, +149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149, +149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149, +149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149, +149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149, +149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149, +149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149, +149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149, +149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149, +149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149, +149,149,149,149,149,149,150,150,150,150,150,150,150,150,150,150,150,150,150,150, +150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150, +150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150, +150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150, +150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150, +150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150, +150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150, +150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150, +150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150, +150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150, +150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150, +150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150, +150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150, +150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150, +150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,151,151, +151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151, +151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151, +151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151, +151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151, +151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151, +151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151, +151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151, +151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151, +151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151, +151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151, +151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151, +151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151, +151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151, +151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151, +151,151,151,151,151,151,151,151,151,151,151,151,151,152,152,152,152,152,152,152, +152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152, +152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152, +152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152, +152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152, +152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152, +152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152, +152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152, +152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152, +152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152, +152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152, +152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152, +152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152, +152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152, +152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152, +152,152,152,152,152,152,152,152,152,152,152,153,153,153,153,153,153,153,153,153, +153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153, +153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153, +153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153, +153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153, +153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153, +153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153, +153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153, +153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153, +153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153, +153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153, +153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153, +153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153, +153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153, +153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153, +153,153,153,153,153,153,153,153,153,153,153,154,154,154,154,154,154,154,154,154, +154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154, +154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154, +154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154, +154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154, +154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154, +154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154, +154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154, +154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154, +154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154, +154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154, +154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154, +154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154, +154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154, +154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154, +154,154,154,154,154,154,154,154,154,154,154,154,154,155,155,155,155,155,155,155, +155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155, +155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155, +155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155, +155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155, +155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155, +155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155, +155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155, +155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155, +155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155, +155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155, +155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155, +155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155, +155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155, +155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155, +155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,156,156, +156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156, +156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156, +156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156, +156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156, +156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156, +156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156, +156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156, +156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156, +156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156, +156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156, +156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156, +156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156, +156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156, +156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156, +156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156, +156,156,156,156,156,156,157,157,157,157,157,157,157,157,157,157,157,157,157,157, +157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157, +157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157, +157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157, +157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157, +157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157, +157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157, +157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157, +157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157, +157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157, +157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157, +157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157, +157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157, +157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157, +157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157, +157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,158,158,158,158, +158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158, +158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158, +158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158, +158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158, +158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158, +158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158, +158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158, +158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158, +158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158, +158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158, +158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158, +158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158, +158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158, +158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158, +158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158, +158,158,158,158,158,158,158,158,159,159,159,159,159,159,159,159,159,159,159,159, +159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159, +159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159, +159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159, +159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159, +159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159, +159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159, +159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159, +159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159, +159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159, +159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159, +159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159, +159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159, +159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159, +159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159, +159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159, +159,159,159,159,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160, +160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160, +160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160, +160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160, +160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160, +160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160, +160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160, +160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160, +160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160, +160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160, +160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160, +160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160, +160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160, +160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160, +160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160, +160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160, +160,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161, +161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161, +161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161, +161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161, +161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161, +161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161, +161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161, +161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161, +161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161, +161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161, +161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161, +161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161, +161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161, +161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161, +161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161, +161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161, +161,161,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162, +162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162, +162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162, +162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162, +162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162, +162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162, +162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162, +162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162, +162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162, +162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162, +162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162, +162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162, +162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162, +162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162, +162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162, +162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162, +162,162,162,162,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163, +163,163,163,163,163,163,163,163,163,163,164,164,164,164,164,164,164,164,164,164, +164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164, +164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164, +164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164, +164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164, +164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164, +164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164, +164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164, +164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164, +164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164, +164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164, +164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164, +164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164, +164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164, +164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164, +164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164, +164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,165,165, +165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165, +165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165, +165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165, +165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165, +165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165, +165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165, +165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165, +165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165, +165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165, +165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165, +165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165, +165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165, +165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165, +165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165, +165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165, +165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165, +165,165,165,165,165,165,165,165,166,166,166,166,166,166,166,166,166,166,166,166, +166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166, +166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166, +166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166, +166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166, +166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166, +166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166, +166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166, +166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166, +166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166, +166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166, +166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166, +166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166, +166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166, +166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166, +166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166, +166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166, +166,166,167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,167, +167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,167, +167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,167, +167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,167, +167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,167, +167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,167, +167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,167, +167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,167, +167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,167, +167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,167, +167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,167, +167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,167, +167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,167, +167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,167, +167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,167, +167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,167, +167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,168,168,168, +168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168, +168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168, +168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168, +168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168, +168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168, +168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168, +168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168, +168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168, +168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168, +168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168, +168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168, +168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168, +168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168, +168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168, +168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168, +168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168, +168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,169,169,169,169, +169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169, +169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169, +169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169, +169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169, +169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169, +169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169, +169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169, +169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169, +169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169, +169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169, +169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169, +169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169, +169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169, +169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169, +169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169, +169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169, +169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,170,170,170, +170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170, +170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170, +170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170, +170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170, +170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170, +170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170, +170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170, +170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170, +170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170, +170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170, +170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170, +170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170, +170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170, +170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170, +170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170, +170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170, +170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170, +171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171, +171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171, +171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171, +171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171, +171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171, +171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171, +171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171, +171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171, +171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171, +171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171, +171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171, +171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171, +171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171, +171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171, +171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171, +171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171, +171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171, +171,171,171,171,171,171,172,172,172,172,172,172,172,172,172,172,172,172,172,172, +172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172, +172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172, +172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172, +172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172, +172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172, +172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172, +172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172, +172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172, +172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172, +172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172, +172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172, +172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172, +172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172, +172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172, +172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172, +172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172, +172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,173,173,173,173,173, +173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173, +173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173, +173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173, +173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173, +173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173, +173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173, +173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173, +173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173, +173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173, +173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173, +173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173, +173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173, +173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173, +173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173, +173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173, +173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173, +173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173, +173,173,173,173,173,173,173,174,174,174,174,174,174,174,174,174,174,174,174,174, +174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174, +174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174, +174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174, +174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174, +174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174, +174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174, +174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174, +174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174, +174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174, +174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174, +174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174, +174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174, +174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174, +174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174, +174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174, +174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174, +174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174, +174,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175, +175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175, +175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175, +175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175, +175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175, +175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175, +175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175, +175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175, +175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175, +175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175, +175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175, +175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175, +175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175, +175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175, +175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175, +175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175, +175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175, +175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,176,176,176, +176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176, +176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176, +176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176, +176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176, +176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176, +176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176, +176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176, +176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176, +176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176, +176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176, +176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176, +176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176, +176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176, +176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176, +176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176, +176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176, +176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176, +176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,177,177,177, +177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177, +177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177, +177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177, +177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177, +177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177, +177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177, +177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177, +177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177, +177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177, +177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177, +177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177, +177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177, +177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177, +177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177, +177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177, +177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177, +177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177, +177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,178, +178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178, +178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178, +178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178, +178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178, +178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178, +178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178, +178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178, +178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178, +178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178, +178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178, +178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178, +178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178, +178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178, +178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178, +178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178, +178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178, +178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178, +178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178, +178,178,178,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179, +179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179, +179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179, +179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179, +179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179, +179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179, +179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179, +179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179, +179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179, +179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179, +179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179, +179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179, +179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179, +179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179, +179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179, +179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179, +179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179, +179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179, +179,179,179,179,179,179,179,179,179,179,179,180,180,180,180,180,180,180,180,180, +180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180, +180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180, +180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180, +180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180, +180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180, +180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180, +180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180, +180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180, +180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180, +180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180, +180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180, +180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180, +180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180, +180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180, +180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180, +180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180, +180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180, +180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180, +180,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181, +181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181, +181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181, +181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181, +181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181, +181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181, +181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181, +181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181, +181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181, +181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181, +181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181, +181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181, +181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181, +181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181, +181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181, +181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181, +181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181, +181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181, +181,181,181,181,181,181,181,181,181,181,181,181,181,182,182,182,182,182,182,182, +182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182, +182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182, +182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182, +182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182, +182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182, +182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182, +182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182, +182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182, +182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182, +182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182, +182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182, +182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182, +182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182, +182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182, +182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182, +182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182, +182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182, +182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182, +182,182,182,182,182,182,182,182,182,183,183,183,183,183,183,183,183,183,183,183, +183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183, +183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183, +183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183, +183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183, +183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183, +183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183, +183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183, +183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183, +183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183, +183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183, +183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183, +183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183, +183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183, +183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183, +183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183, +183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183, +183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183, +183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183, +183,183,183,183,183,183,183,184,184,184,184,184,184,184,184,184,184,184,184,184, +184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184, +184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184, +184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184, +184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184, +184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184, +184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184, +184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184, +184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184, +184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184, +184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184, +184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184, +184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184, +184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184, +184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184, +184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184, +184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184, +184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184, +184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184, +184,184,184,184,184,184,184,185,185,185,185,185,185,185,185,185,185,185,185,185, +185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185, +185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185, +185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185, +185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185, +185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185, +185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185, +185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185, +185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185, +185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185, +185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185, +185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185, +185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185, +185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185, +185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185, +185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185, +185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185, +185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185, +185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185, +185,185,185,185,185,185,185,185,185,185,185,186,186,186,186,186,186,186,186,186, +186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,186, +186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,186, +186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,186, +186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,186, +186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,186, +186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,186, +186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,186, +186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,186, +186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,186, +186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,186, +186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,186, +186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,186, +186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,186, +186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,186, +186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,186, +186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,186, +186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,186, +186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,186, +186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,187,187,187, +187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187, +187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187, +187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187, +187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187, +187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187, +187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187, +187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187, +187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187, +187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187, +187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187, +187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187, +187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187, +187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187, +187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187, +187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187, +187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187, +187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187, +187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187, +187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187, +187,187,187,187,187,187,188,188,188,188,188,188,188,188,188,188,188,188,188,188, +188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188, +188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188, +188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188, +188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188, +188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188, +188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188, +188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188, +188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188, +188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188, +188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188, +188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188, +188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188, +188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188, +188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188, +188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188, +188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188, +188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188, +188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188, +188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,189,189,189, +189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189, +189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189, +189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189, +189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189, +189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189, +189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189, +189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189, +189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189, +189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189, +189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189, +189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189, +189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189, +189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189, +189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189, +189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189, +189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189, +189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189, +189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189, +189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189, +189,189,189,189,189,189,189,189,189,189,189,189,190,190,190,190,190,190,190,190, +190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190, +190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190, +190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190, +190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190, +190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190, +190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190, +190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190, +190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190, +190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190, +190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190, +190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190, +190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190, +190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190, +190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190, +190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190, +190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190, +190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190, +190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190, +190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190, +190,190,190,190,190,190,190,190,191,191,191,191,191,191,191,191,191,191,191,191, +191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191, +191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191, +191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191, +191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191, +191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191, +191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191, +191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191, +191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191, +191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191, +191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191, +191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191, +191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191, +191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191, +191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191, +191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191, +191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191, +191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191, +191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191, +191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191, +191,191,191,191,191,191,191,191,192,192,192,192,192,192,192,192,192,192,192,192, +192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192, +192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192, +192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192, +192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192, +192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192, +192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192, +192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192, +192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192, +192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192, +192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192, +192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192, +192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192, +192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192, +192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192, +192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192, +192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192, +192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192, +192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192, +192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192, +192,192,192,192,192,192,192,192,192,192,192,193,193,193,193,193,193,193,193,193, +193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193, +193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193, +193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193, +193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193, +193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193, +193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193, +193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193, +193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193, +193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193, +193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193, +193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193, +193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193, +193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193, +193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193, +193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193, +193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193, +193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193, +193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193, +193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193, +193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,194,194,194,194, +194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194, +194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194, +194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194, +194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194, +194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194, +194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194, +194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194, +194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194, +194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194, +194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194, +194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194, +194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194, +194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194, +194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194, +194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194, +194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194, +194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194, +194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194, +194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194, +194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194, +194,194,194,194,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195, +195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195, +195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195, +195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195, +195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195, +195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195, +195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195, +195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195, +195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195, +195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195, +195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195, +195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195, +195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195, +195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195, +195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195, +195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195, +195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195, +195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195, +195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195, +195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195, +195,195,195,195,195,195,195,195,195,195,195,195,195,195,196,196,196,196,196,196, +196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, +196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, +196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, +196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, +196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, +196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, +196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, +196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, +196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, +196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, +196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, +196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, +196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, +196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, +196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, +196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, +196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, +196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, +196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, +196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196, +196,196,196,196,196,196,196,196,197,197,197,197,197,197,197,197,197,197,197,197, +197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197, +197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197, +197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197, +197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197, +197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197, +197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197, +197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197, +197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197, +197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197, +197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197, +197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197, +197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197, +197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197, +197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197, +197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197, +197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197, +197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197, +197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197, +197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197, +197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197, +197,197,197,197,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198, +198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198, +198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198, +198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198, +198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198, +198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198, +198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198, +198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198, +198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198, +198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198, +198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198, +198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198, +198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198, +198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198, +198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198, +198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198, +198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198, +198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198, +198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198, +198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198, +198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198, +198,198,198,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199, +199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199, +199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199, +199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199, +199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199, +199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199, +199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199, +199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199, +199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199, +199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199, +199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199, +199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199, +199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199, +199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199, +199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199, +199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199, +199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199, +199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199, +199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199, +199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199, +199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199, +199,199,199,199,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200, +200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200, +200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200, +200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200, +200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200, +200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200, +200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200, +200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200, +200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200, +200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200, +200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200, +200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200, +200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200, +200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200, +200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200, +200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200, +200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200, +200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200, +200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200, +200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200, +200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200, +200,200,200,200,200,200,200,200,200,201,201,201,201,201,201,201,201,201,201,201, +201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201, +201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201, +201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201, +201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201, +201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201, +201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201, +201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201, +201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201, +201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201, +201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201, +201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201, +201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201, +201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201, +201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201, +201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201, +201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201, +201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201, +201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201, +201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201, +201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201, +201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,202,202,202,202, +202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202, +202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202, +202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202, +202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202, +202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202, +202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202, +202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202, +202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202, +202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202, +202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202, +202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202, +202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202, +202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202, +202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202, +202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202, +202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202, +202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202, +202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202, +202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202, +202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202, +202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202, +202,202,202,202,202,202,203,203,203,203,203,203,203,203,203,203,203,203,203,203, +203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203, +203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203, +203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203, +203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203, +203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203, +203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203, +203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203, +203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203, +203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203, +203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203, +203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203, +203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203, +203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203, +203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203, +203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203, +203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203, +203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203, +203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203, +203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203, +203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203, +203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,204, +204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204, +204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204, +204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204, +204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204, +204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204, +204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204, +204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204, +204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204, +204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204, +204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204, +204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204, +204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204, +204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204, +204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204, +204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204, +204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204, +204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204, +204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204, +204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204, +204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204, +204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204, +204,204,204,204,204,204,204,204,204,204,204,204,204,204,205,205,205,205,205,205, +205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205, +205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205, +205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205, +205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205, +205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205, +205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205, +205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205, +205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205, +205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205, +205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205, +205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205, +205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205, +205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205, +205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205, +205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205, +205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205, +205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205, +205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205, +205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205, +205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205, +205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205, +205,205,205,205,205,205,205,205,205,205,205,205,205,206,206,206,206,206,206,206, +206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206, +206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206, +206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206, +206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206, +206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206, +206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206, +206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206, +206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206, +206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206, +206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206, +206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206, +206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206, +206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206, +206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206, +206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206, +206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206, +206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206, +206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206, +206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206, +206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206, +206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206, +206,206,206,206,206,206,206,206,206,206,206,206,206,206,207,207,207,207,207,207, +207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207, +207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207, +207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207, +207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207, +207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207, +207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207, +207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207, +207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207, +207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207, +207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207, +207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207, +207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207, +207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207, +207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207, +207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207, +207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207, +207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207, +207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207, +207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207, +207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207, +207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207, +207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,208,208, +208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208, +208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208, +208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208, +208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208, +208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208, +208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208, +208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208, +208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208, +208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208, +208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208, +208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208, +208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208, +208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208, +208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208, +208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208, +208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208, +208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208, +208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208, +208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208, +208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208, +208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208, +208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208, +208,208,208,208,208,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209, +209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209, +209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209, +209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209, +209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209, +209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209, +209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209, +209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209, +209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209, +209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209, +209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209, +209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209, +209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209, +209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209, +209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209, +209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209, +209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209, +209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209, +209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209, +209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209, +209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209, +209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209, +209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,210,210,210,210,210, +210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210, +210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210, +210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210, +210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210, +210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210, +210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210, +210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210, +210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210, +210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210, +210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210, +210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210, +210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210, +210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210, +210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210, +210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210, +210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210, +210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210, +210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210, +210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210, +210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210, +210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210, +210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210, +210,210,210,210,210,210,210,211,211,211,211,211,211,211,211,211,211,211,211,211, +211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211, +211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211, +211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211, +211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211, +211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211, +211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211, +211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211, +211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211, +211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211, +211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211, +211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211, +211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211, +211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211, +211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211, +211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211, +211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211, +211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211, +211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211, +211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211, +211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211, +211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211, +211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211, +211,211,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212, +212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212, +212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212, +212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212, +212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212, +212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212, +212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212, +212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212, +212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212, +212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212, +212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212, +212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212, +212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212, +212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212, +212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212, +212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212, +212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212, +212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212, +212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212, +212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212, +212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212, +212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212, +212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212, +212,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213, +213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213, +213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213, +213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213, +213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213, +213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213, +213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213, +213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213, +213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213, +213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213, +213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213, +213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213, +213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213, +213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213, +213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213, +213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213, +213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213, +213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213, +213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213, +213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213, +213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213, +213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213, +213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213, +213,213,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214, +214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214, +214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214, +214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214, +214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214, +214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214, +214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214, +214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214, +214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214, +214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214, +214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214, +214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214, +214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214, +214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214, +214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214, +214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214, +214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214, +214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214, +214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214, +214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214, +214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214, +214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214, +214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214, +214,214,214,214,214,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215, +215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215, +215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215, +215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215, +215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215, +215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215, +215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215, +215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215, +215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215, +215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215, +215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215, +215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215, +215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215, +215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215, +215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215, +215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215, +215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215, +215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215, +215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215, +215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215, +215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215, +215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215, +215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215, +215,215,215,215,215,215,215,215,215,215,215,215,216,216,216,216,216,216,216,216, +216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216, +216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216, +216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216, +216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216, +216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216, +216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216, +216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216, +216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216, +216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216, +216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216, +216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216, +216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216, +216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216, +216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216, +216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216, +216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216, +216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216, +216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216, +216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216, +216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216, +216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216, +216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216, +216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216, +216,216,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217, +217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217, +217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217, +217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217, +217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217, +217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217, +217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217, +217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217, +217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217, +217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217, +217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217, +217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217, +217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217, +217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217, +217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217, +217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217, +217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217, +217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217, +217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217, +217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217, +217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217, +217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217, +217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217, +217,217,217,217,217,217,217,217,217,217,217,217,217,217,218,218,218,218,218,218, +218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218, +218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218, +218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218, +218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218, +218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218, +218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218, +218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218, +218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218, +218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218, +218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218, +218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218, +218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218, +218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218, +218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218, +218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218, +218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218, +218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218, +218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218, +218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218, +218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218, +218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218, +218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218, +218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218, +218,218,218,218,218,218,218,218,218,219,219,219,219,219,219,219,219,219,219,219, +219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219, +219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219, +219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219, +219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219, +219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219, +219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219, +219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219, +219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219, +219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219, +219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219, +219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219, +219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219, +219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219, +219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219, +219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219, +219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219, +219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219, +219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219, +219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219, +219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219, +219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219, +219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219, +219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219, +219,219,219,219,219,219,219,220,220,220,220,220,220,220,220,220,220,220,220,220, +220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220, +220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220, +220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220, +220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220, +220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220, +220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220, +220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220, +220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220, +220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220, +220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220, +220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220, +220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220, +220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220, +220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220, +220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220, +220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220, +220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220, +220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220, +220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220, +220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220, +220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220, +220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220, +220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220, +220,220,220,220,220,220,220,220,221,221,221,221,221,221,221,221,221,221,221,221, +221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221, +221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221, +221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221, +221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221, +221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221, +221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221, +221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221, +221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221, +221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221, +221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221, +221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221, +221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221, +221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221, +221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221, +221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221, +221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221, +221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221, +221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221, +221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221, +221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221, +221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221, +221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221, +221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221, +221,221,221,221,221,221,221,221,221,221,221,221,222,222,222,222,222,222,222,222, +222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222, +222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222, +222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222, +222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222, +222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222, +222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222, +222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222, +222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222, +222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222, +222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222, +222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222, +222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222, +222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222, +222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222, +222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222, +222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222, +222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222, +222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222, +222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222, +222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222, +222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222, +222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222, +222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222, +222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,223, +223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223, +223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223, +223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223, +223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223, +223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223, +223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223, +223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223, +223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223, +223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223, +223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223, +223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223, +223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223, +223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223, +223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223, +223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223, +223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223, +223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223, +223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223, +223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223, +223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223, +223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223, +223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223, +223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223, +223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223, +223,223,223,223,223,223,223,223,223,224,224,224,224,224,224,224,224,224,224,224, +224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224, +224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224, +224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224, +224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224, +224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224, +224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224, +224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224, +224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224, +224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224, +224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224, +224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224, +224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224, +224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224, +224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224, +224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224, +224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224, +224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224, +224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224, +224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224, +224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224, +224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224, +224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224, +224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224, +224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224, +224,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, +225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, +225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, +225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, +225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, +225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, +225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, +225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, +225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, +225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, +225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, +225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, +225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, +225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, +225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, +225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, +225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, +225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, +225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, +225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, +225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, +225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, +225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, +225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225, +225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,226,226,226, +226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226, +226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226, +226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226, +226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226, +226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226, +226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226, +226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226, +226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226, +226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226, +226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226, +226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226, +226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226, +226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226, +226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226, +226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226, +226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226, +226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226, +226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226, +226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226, +226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226, +226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226, +226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226, +226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226, +226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226, +226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,227,227,227,227,227, +227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227, +227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227, +227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227, +227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227, +227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227, +227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227, +227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227, +227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227, +227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227, +227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227, +227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227, +227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227, +227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227, +227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227, +227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227, +227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227, +227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227, +227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227, +227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227, +227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227, +227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227, +227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227, +227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227, +227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227, +227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,228,228,228,228, +228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228, +228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228, +228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228, +228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228, +228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228, +228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228, +228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228, +228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228, +228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228, +228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228, +228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228, +228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228, +228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228, +228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228, +228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228, +228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228, +228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228, +228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228, +228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228, +228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228, +228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228, +228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228, +228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228, +228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228, +228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228, +229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229, +229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229, +229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229, +229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229, +229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229, +229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229, +229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229, +229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229, +229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229, +229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229, +229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229, +229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229, +229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229, +229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229, +229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229, +229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229, +229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229, +229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229, +229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229, +229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229, +229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229, +229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229, +229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229, +229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229, +229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229, +229,229,229,229,229,229,229,229,230,230,230,230,230,230,230,230,230,230,230,230, +230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230, +230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230, +230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230, +230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230, +230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230, +230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230, +230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230, +230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230, +230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230, +230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230, +230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230, +230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230, +230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230, +230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230, +230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230, +230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230, +230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230, +230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230, +230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230, +230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230, +230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230, +230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230, +230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230, +230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230, +230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,231,231, +231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231, +231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231, +231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231, +231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231, +231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231, +231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231, +231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231, +231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231, +231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231, +231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231, +231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231, +231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231, +231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231, +231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231, +231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231, +231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231, +231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231, +231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231, +231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231, +231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231, +231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231, +231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231, +231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231, +231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231, +231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231, +231,231,231,231,231,231,231,231,231,231,231,232,232,232,232,232,232,232,232,232, +232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232, +232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232, +232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232, +232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232, +232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232, +232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232, +232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232, +232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232, +232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232, +232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232, +232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232, +232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232, +232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232, +232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232, +232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232, +232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232, +232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232, +232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232, +232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232, +232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232, +232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232, +232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232, +232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232, +232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232, +232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232, +232,232,232,232,232,232,233,233,233,233,233,233,233,233,233,233,233,233,233,233, +233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233, +233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233, +233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233, +233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233, +233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233, +233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233, +233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233, +233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233, +233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233, +233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233, +233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233, +233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233, +233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233, +233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233, +233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233, +233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233, +233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233, +233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233, +233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233, +233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233, +233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233, +233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233, +233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233, +233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233, +233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233, +233,233,233,233,233,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234, +234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234, +234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234, +234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234, +234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234, +234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234, +234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234, +234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234, +234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234, +234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234, +234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234, +234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234, +234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234, +234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234, +234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234, +234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234, +234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234, +234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234, +234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234, +234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234, +234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234, +234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234, +234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234, +234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234, +234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234, +234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234, +234,234,234,234,234,234,234,235,235,235,235,235,235,235,235,235,235,235,235,235, +235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235, +235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235, +235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235, +235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235, +235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235, +235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235, +235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235, +235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235, +235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235, +235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235, +235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235, +235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235, +235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235, +235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235, +235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235, +235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235, +235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235, +235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235, +235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235, +235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235, +235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235, +235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235, +235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235, +235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235, +235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235, +235,235,235,235,235,235,235,235,235,235,235,235,236,236,236,236,236,236,236,236, +236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236, +236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236, +236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236, +236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236, +236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236, +236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236, +236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236, +236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236, +236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236, +236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236, +236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236, +236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236, +236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236, +236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236, +236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236, +236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236, +236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236, +236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236, +236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236, +236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236, +236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236, +236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236, +236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236, +236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236, +236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236, +236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,237, +237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237, +237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237, +237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237, +237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237, +237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237, +237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237, +237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237, +237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237, +237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237, +237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237, +237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237, +237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237, +237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237, +237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237, +237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237, +237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237, +237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237, +237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237, +237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237, +237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237, +237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237, +237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237, +237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237, +237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237, +237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237, +237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237, +237,237,237,237,237,237,237,237,237,237,238,238,238,238,238,238,238,238,238,238, +238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238, +238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238, +238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238, +238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238, +238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238, +238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238, +238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238, +238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238, +238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238, +238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238, +238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238, +238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238, +238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238, +238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238, +238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238, +238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238, +238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238, +238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238, +238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238, +238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238, +238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238, +238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238, +238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238, +238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238, +238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238, +238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238, +238,238,238,238,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239, +239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239, +239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239, +239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239, +239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239, +239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239, +239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239, +239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239, +239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239, +239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239, +239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239, +239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239, +239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239, +239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239, +239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239, +239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239, +239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239, +239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239, +239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239, +239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239, +239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239, +239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239, +239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239, +239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239, +239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239, +239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239, +239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239, +240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240, +240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240, +240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240, +240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240, +240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240, +240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240, +240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240, +240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240, +240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240, +240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240, +240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240, +240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240, +240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240, +240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240, +240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240, +240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240, +240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240, +240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240, +240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240, +240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240, +240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240, +240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240, +240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240, +240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240, +240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240, +240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240, +240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240, +241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241, +241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241, +241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241, +241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241, +241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241, +241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241, +241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241, +241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241, +241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241, +241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241, +241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241, +241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241, +241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241, +241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241, +241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241, +241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241, +241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241, +241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241, +241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241, +241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241, +241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241, +241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241, +241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241, +241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241, +241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241, +241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241, +241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241, +241,241,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242, +242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242, +242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242, +242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242, +242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242, +242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242, +242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242, +242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242, +242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242, +242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242, +242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242, +242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242, +242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242, +242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242, +242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242, +242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242, +242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242, +242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242, +242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242, +242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242, +242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242, +242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242, +242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242, +242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242, +242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242, +242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242, +242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242, +242,242,242,242,242,242,242,242,243,243,243,243,243,243,243,243,243,243,243,243, +243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243, +243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243, +243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243, +243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243, +243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243, +243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243, +243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243, +243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243, +243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243, +243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243, +243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243, +243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243, +243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243, +243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243, +243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243, +243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243, +243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243, +243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243, +243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243, +243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243, +243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243, +243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243, +243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243, +243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243, +243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243, +243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243, +243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,244,244,244,244, +244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244, +244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244, +244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244, +244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244, +244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244, +244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244, +244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244, +244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244, +244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244, +244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244, +244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244, +244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244, +244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244, +244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244, +244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244, +244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244, +244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244, +244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244, +244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244, +244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244, +244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244, +244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244, +244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244, +244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244, +244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244, +244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244, +244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244, +244,244,244,244,244,244,244,244,245,245,245,245,245,245,245,245,245,245,245,245, +245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245, +245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245, +245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245, +245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245, +245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245, +245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245, +245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245, +245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245, +245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245, +245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245, +245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245, +245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245, +245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245, +245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245, +245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245, +245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245, +245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245, +245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245, +245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245, +245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245, +245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245, +245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245, +245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245, +245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245, +245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245, +245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245, +245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245, +245,245,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246, +246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246, +246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246, +246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246, +246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246, +246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246, +246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246, +246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246, +246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246, +246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246, +246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246, +246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246, +246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246, +246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246, +246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246, +246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246, +246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246, +246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246, +246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246, +246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246, +246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246, +246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246, +246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246, +246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246, +246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246, +246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246, +246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246, +246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,247, +247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247, +247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247, +247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247, +247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247, +247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247, +247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247, +247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247, +247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247, +247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247, +247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247, +247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247, +247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247, +247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247, +247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247, +247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247, +247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247, +247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247, +247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247, +247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247, +247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247, +247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247, +247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247, +247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247, +247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247, +247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247, +247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247, +247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247, +247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247, +248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248, +248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248, +248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248, +248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248, +248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248, +248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248, +248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248, +248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248, +248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248, +248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248, +248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248, +248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248, +248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248, +248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248, +248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248, +248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248, +248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248, +248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248, +248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248, +248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248, +248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248, +248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248, +248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248, +248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248, +248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248, +248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248, +248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248, +248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248, +248,248,248,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249, +249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249, +249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249, +249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249, +249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249, +249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249, +249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249, +249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249, +249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249, +249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249, +249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249, +249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249, +249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249, +249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249, +249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249, +249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249, +249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249, +249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249, +249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249, +249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249, +249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249, +249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249, +249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249, +249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249, +249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249, +249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249, +249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249, +249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249, +249,249,249,249,249,249,249,249,249,249,250,250,250,250,250,250,250,250,250,250, +250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250, +250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250, +250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250, +250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250, +250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250, +250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250, +250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250, +250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250, +250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250, +250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250, +250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250, +250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250, +250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250, +250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250, +250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250, +250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250, +250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250, +250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250, +250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250, +250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250, +250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250, +250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250, +250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250, +250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250, +250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250, +250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250, +250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250, +250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,251, +251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251, +251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251, +251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251, +251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251, +251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251, +251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251, +251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251, +251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251, +251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251, +251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251, +251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251, +251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251, +251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251, +251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251, +251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251, +251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251, +251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251, +251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251, +251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251, +251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251, +251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251, +251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251, +251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251, +251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251, +251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251, +251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251, +251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251, +251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251, +251,251,251,251,251,251,251,251,251,251,251,251,252,252,252,252,252,252,252,252, +252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252, +252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252, +252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252, +252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252, +252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252, +252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252, +252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252, +252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252, +252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252, +252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252, +252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252, +252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252, +252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252, +252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252, +252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252, +252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252, +252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252, +252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252, +252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252, +252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252, +252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252, +252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252, +252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252, +252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252, +252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252, +252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252, +252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252, +252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252, +252,252,252,252,252,252,252,253,253,253,253,253,253,253,253,253,253,253,253,253, +253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, +253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, +253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, +253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, +253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, +253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, +253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, +253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, +253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, +253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, +253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, +253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, +253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, +253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, +253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, +253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, +253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, +253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, +253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, +253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, +253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, +253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, +253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, +253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, +253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, +253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, +253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, +253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, +253,253,253,253,253,253,254,254,254,254,254,254,254,254,254,254,254,254,254,254, +254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254, +254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254, +254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254, +254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254, +254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254, +254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254, +254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254, +254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254, +254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254, +254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254, +254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254, +254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254, +254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254, +254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254, +254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254, +254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254, +254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254, +254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254, +254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254, +254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254, +254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254, +254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254, +254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254, +254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254, +254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254, +254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254, +254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254, +254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254, +254,254,254,254,254,254,254,254,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255 +}; + +static const float u8_gamma_minimums[257] = +{ +0.0, +0x1.3e6p-13, /* 0.000152, 1 */ +0x1.dd7p-12, /* 0.000455, 2 */ +0x1.8dd8p-11, /* 0.000759, 3 */ +0x1.168p-10, /* 0.001062, 4 */ +0x1.661p-10, /* 0.001366, 5 */ +0x1.b5ap-10, /* 0.001669, 6 */ +0x1.029ap-9, /* 0.001973, 7 */ +0x1.2a62p-9, /* 0.002276, 8 */ +0x1.522ap-9, /* 0.002580, 9 */ +0x1.79f4p-9, /* 0.002884, 10 */ +0x1.a1e6p-9, /* 0.003188, 11 */ +0x1.cbf8p-9, /* 0.003509, 12 */ +0x1.f86ap-9, /* 0.003848, 13 */ +0x1.13a1p-8, /* 0.004206, 14 */ +0x1.2c47p-8, /* 0.004582, 15 */ +0x1.462ap-8, /* 0.004977, 16 */ +0x1.614fp-8, /* 0.005391, 17 */ +0x1.7dbap-8, /* 0.005825, 18 */ +0x1.9b6fp-8, /* 0.006278, 19 */ +0x1.ba73p-8, /* 0.006751, 20 */ +0x1.dacap-8, /* 0.007245, 21 */ +0x1.fc77p-8, /* 0.007759, 22 */ +0x1.0fbf8p-7, /* 0.008293, 23 */ +0x1.21f28p-7, /* 0.008848, 24 */ +0x1.34d68p-7, /* 0.009425, 25 */ +0x1.486ep-7, /* 0.010023, 26 */ +0x1.5cbap-7, /* 0.010642, 27 */ +0x1.71bc8p-7, /* 0.011283, 28 */ +0x1.87778p-7, /* 0.011947, 29 */ +0x1.9dedp-7, /* 0.012632, 30 */ +0x1.b51ep-7, /* 0.013340, 31 */ +0x1.cd0dp-7, /* 0.014070, 32 */ +0x1.e5bbp-7, /* 0.014823, 33 */ +0x1.ff2a8p-7, /* 0.015600, 34 */ +0x1.0cae4p-6, /* 0.016399, 35 */ +0x1.1a294p-6, /* 0.017222, 36 */ +0x1.28074p-6, /* 0.018068, 37 */ +0x1.3649p-6, /* 0.018938, 38 */ +0x1.44ef8p-6, /* 0.019832, 39 */ +0x1.53fbp-6, /* 0.020751, 40 */ +0x1.636ccp-6, /* 0.021693, 41 */ +0x1.73454p-6, /* 0.022661, 42 */ +0x1.83858p-6, /* 0.023652, 43 */ +0x1.942dcp-6, /* 0.024669, 44 */ +0x1.a53f8p-6, /* 0.025711, 45 */ +0x1.b6bacp-6, /* 0.026778, 46 */ +0x1.c8a08p-6, /* 0.027870, 47 */ +0x1.daf18p-6, /* 0.028988, 48 */ +0x1.edae8p-6, /* 0.030132, 49 */ +0x1.006cp-5, /* 0.031301, 50 */ +0x1.0a378p-5, /* 0.032497, 51 */ +0x1.1439ep-5, /* 0.033719, 52 */ +0x1.1e73ap-5, /* 0.034967, 53 */ +0x1.28e52p-5, /* 0.036242, 54 */ +0x1.338eap-5, /* 0.037544, 55 */ +0x1.3e706p-5, /* 0.038872, 56 */ +0x1.498aep-5, /* 0.040227, 57 */ +0x1.54de6p-5, /* 0.041610, 58 */ +0x1.606b2p-5, /* 0.043020, 59 */ +0x1.6c318p-5, /* 0.044457, 60 */ +0x1.7831ep-5, /* 0.045922, 61 */ +0x1.846c8p-5, /* 0.047415, 62 */ +0x1.90e1ap-5, /* 0.048936, 63 */ +0x1.9d91ap-5, /* 0.050484, 64 */ +0x1.aa7dp-5, /* 0.052062, 65 */ +0x1.b7a3cp-5, /* 0.053667, 66 */ +0x1.c5064p-5, /* 0.055301, 67 */ +0x1.d2a4ep-5, /* 0.056963, 68 */ +0x1.e08p-5, /* 0.058655, 69 */ +0x1.ee97ap-5, /* 0.060375, 70 */ +0x1.fcec6p-5, /* 0.062124, 71 */ +0x1.05bf3p-4, /* 0.063903, 72 */ +0x1.0d26fp-4, /* 0.065711, 73 */ +0x1.14adap-4, /* 0.067548, 74 */ +0x1.1c536p-4, /* 0.069415, 75 */ +0x1.24185p-4, /* 0.071312, 76 */ +0x1.2bfcap-4, /* 0.073239, 77 */ +0x1.34007p-4, /* 0.075196, 78 */ +0x1.3c23ep-4, /* 0.077183, 79 */ +0x1.44671p-4, /* 0.079200, 80 */ +0x1.4cca3p-4, /* 0.081248, 81 */ +0x1.554d5p-4, /* 0.083326, 82 */ +0x1.5df0ap-4, /* 0.085435, 83 */ +0x1.66b44p-4, /* 0.087574, 84 */ +0x1.6f984p-4, /* 0.089745, 85 */ +0x1.789cep-4, /* 0.091946, 86 */ +0x1.81c23p-4, /* 0.094179, 87 */ +0x1.8b085p-4, /* 0.096443, 88 */ +0x1.946f7p-4, /* 0.098739, 89 */ +0x1.9df7bp-4, /* 0.101066, 90 */ +0x1.a7a12p-4, /* 0.103425, 91 */ +0x1.b16bfp-4, /* 0.105816, 92 */ +0x1.bb584p-4, /* 0.108238, 93 */ +0x1.c5662p-4, /* 0.110693, 94 */ +0x1.cf95cp-4, /* 0.113180, 95 */ +0x1.d9e74p-4, /* 0.115699, 96 */ +0x1.e45abp-4, /* 0.118251, 97 */ +0x1.eef03p-4, /* 0.120835, 98 */ +0x1.f9a8p-4, /* 0.123451, 99 */ +0x1.02411p-3, /* 0.126101, 100 */ +0x1.07bf68p-3, /* 0.128783, 101 */ +0x1.0d4f08p-3, /* 0.131498, 102 */ +0x1.12eff8p-3, /* 0.134247, 103 */ +0x1.18a25p-3, /* 0.137028, 104 */ +0x1.1e6628p-3, /* 0.139843, 105 */ +0x1.243b88p-3, /* 0.142692, 106 */ +0x1.2a228p-3, /* 0.145574, 107 */ +0x1.301b28p-3, /* 0.148489, 108 */ +0x1.36258p-3, /* 0.151439, 109 */ +0x1.3c41ap-3, /* 0.154422, 110 */ +0x1.426f98p-3, /* 0.157439, 111 */ +0x1.48af7p-3, /* 0.160491, 112 */ +0x1.4f014p-3, /* 0.163577, 113 */ +0x1.556508p-3, /* 0.166697, 114 */ +0x1.5bdaep-3, /* 0.169851, 115 */ +0x1.6262dp-3, /* 0.173040, 116 */ +0x1.68fcfp-3, /* 0.176264, 117 */ +0x1.6fa948p-3, /* 0.179522, 118 */ +0x1.7667ep-3, /* 0.182815, 119 */ +0x1.7d38d8p-3, /* 0.186144, 120 */ +0x1.841c28p-3, /* 0.189507, 121 */ +0x1.8b11f8p-3, /* 0.192905, 122 */ +0x1.921a4p-3, /* 0.196339, 123 */ +0x1.99352p-3, /* 0.199808, 124 */ +0x1.a06298p-3, /* 0.203313, 125 */ +0x1.a7a2b8p-3, /* 0.206853, 126 */ +0x1.aef598p-3, /* 0.210429, 127 */ +0x1.b65b38p-3, /* 0.214041, 128 */ +0x1.bdd3bp-3, /* 0.217689, 129 */ +0x1.c55f08p-3, /* 0.221373, 130 */ +0x1.ccfd5p-3, /* 0.225093, 131 */ +0x1.d4ae88p-3, /* 0.228849, 132 */ +0x1.dc72dp-3, /* 0.232641, 133 */ +0x1.e44a28p-3, /* 0.236470, 134 */ +0x1.ec34ap-3, /* 0.240335, 135 */ +0x1.f43258p-3, /* 0.244237, 136 */ +0x1.fc435p-3, /* 0.248175, 137 */ +0x1.0233c4p-2, /* 0.252151, 138 */ +0x1.064f98p-2, /* 0.256163, 139 */ +0x1.0a7518p-2, /* 0.260212, 140 */ +0x1.0ea45p-2, /* 0.264299, 141 */ +0x1.12dd44p-2, /* 0.268422, 142 */ +0x1.172p-2, /* 0.272583, 143 */ +0x1.1b6c84p-2, /* 0.276781, 144 */ +0x1.1fc2ep-2, /* 0.281017, 145 */ +0x1.242314p-2, /* 0.285290, 146 */ +0x1.288d28p-2, /* 0.289601, 147 */ +0x1.2d0124p-2, /* 0.293950, 148 */ +0x1.317f0cp-2, /* 0.298336, 149 */ +0x1.3606e8p-2, /* 0.302761, 150 */ +0x1.3a98cp-2, /* 0.307223, 151 */ +0x1.3f3498p-2, /* 0.311724, 152 */ +0x1.43da74p-2, /* 0.316263, 153 */ +0x1.488a5cp-2, /* 0.320840, 154 */ +0x1.4d4454p-2, /* 0.325456, 155 */ +0x1.520864p-2, /* 0.330110, 156 */ +0x1.56d694p-2, /* 0.334803, 157 */ +0x1.5baee8p-2, /* 0.339534, 158 */ +0x1.60916p-2, /* 0.344305, 159 */ +0x1.657e0cp-2, /* 0.349114, 160 */ +0x1.6a74fp-2, /* 0.353962, 161 */ +0x1.6f760cp-2, /* 0.358849, 162 */ +0x1.748168p-2, /* 0.363775, 163 */ +0x1.79971p-2, /* 0.368740, 164 */ +0x1.7eb704p-2, /* 0.373745, 165 */ +0x1.83e15p-2, /* 0.378789, 166 */ +0x1.8915fp-2, /* 0.383873, 167 */ +0x1.8e54f4p-2, /* 0.388996, 168 */ +0x1.939e6p-2, /* 0.394159, 169 */ +0x1.98f238p-2, /* 0.399361, 170 */ +0x1.9e508p-2, /* 0.404604, 171 */ +0x1.a3b94p-2, /* 0.409886, 172 */ +0x1.a92c8p-2, /* 0.415209, 173 */ +0x1.aeaa44p-2, /* 0.420571, 174 */ +0x1.b4329p-2, /* 0.425974, 175 */ +0x1.b9c56cp-2, /* 0.431417, 176 */ +0x1.bf62d8p-2, /* 0.436900, 177 */ +0x1.c50aep-2, /* 0.442424, 178 */ +0x1.cabd88p-2, /* 0.447989, 179 */ +0x1.d07ad4p-2, /* 0.453594, 180 */ +0x1.d642c8p-2, /* 0.459239, 181 */ +0x1.dc156cp-2, /* 0.464925, 182 */ +0x1.e1f2c4p-2, /* 0.470653, 183 */ +0x1.e7dad8p-2, /* 0.476421, 184 */ +0x1.edcdacp-2, /* 0.482230, 185 */ +0x1.f3cb4cp-2, /* 0.488080, 186 */ +0x1.f9d3bcp-2, /* 0.493972, 187 */ +0x1.ffe70cp-2, /* 0.499905, 188 */ +0x1.03028cp-1, /* 0.505879, 189 */ +0x1.06170ap-1, /* 0.511895, 190 */ +0x1.0930f8p-1, /* 0.517952, 191 */ +0x1.0c5058p-1, /* 0.524050, 192 */ +0x1.0f752ep-1, /* 0.530191, 193 */ +0x1.129f7cp-1, /* 0.536373, 194 */ +0x1.15cf44p-1, /* 0.542597, 195 */ +0x1.19048cp-1, /* 0.548863, 196 */ +0x1.1c3f56p-1, /* 0.555171, 197 */ +0x1.1f7fa4p-1, /* 0.561521, 198 */ +0x1.22c578p-1, /* 0.567913, 199 */ +0x1.2610d8p-1, /* 0.574347, 200 */ +0x1.2961c2p-1, /* 0.580824, 201 */ +0x1.2cb83ep-1, /* 0.587343, 202 */ +0x1.30144cp-1, /* 0.593905, 203 */ +0x1.3375eep-1, /* 0.600509, 204 */ +0x1.36dd26p-1, /* 0.607156, 205 */ +0x1.3a49fap-1, /* 0.613846, 206 */ +0x1.3dbc6ap-1, /* 0.620578, 207 */ +0x1.413478p-1, /* 0.627353, 208 */ +0x1.44b228p-1, /* 0.634172, 209 */ +0x1.48357cp-1, /* 0.641033, 210 */ +0x1.4bbe76p-1, /* 0.647937, 211 */ +0x1.4f4d18p-1, /* 0.654885, 212 */ +0x1.52e168p-1, /* 0.661876, 213 */ +0x1.567b64p-1, /* 0.668910, 214 */ +0x1.5a1b1p-1, /* 0.675988, 215 */ +0x1.5dc07p-1, /* 0.683109, 216 */ +0x1.616b86p-1, /* 0.690273, 217 */ +0x1.651c54p-1, /* 0.697482, 218 */ +0x1.68d2dcp-1, /* 0.704734, 219 */ +0x1.6c8f22p-1, /* 0.712030, 220 */ +0x1.705126p-1, /* 0.719369, 221 */ +0x1.7418eep-1, /* 0.726753, 222 */ +0x1.77e67ap-1, /* 0.734180, 223 */ +0x1.7bb9cep-1, /* 0.741652, 224 */ +0x1.7f92eap-1, /* 0.749168, 225 */ +0x1.8371d6p-1, /* 0.756728, 226 */ +0x1.87568ep-1, /* 0.764332, 227 */ +0x1.8b411ap-1, /* 0.771981, 228 */ +0x1.8f317ap-1, /* 0.779674, 229 */ +0x1.9327bp-1, /* 0.787412, 230 */ +0x1.9723cp-1, /* 0.795195, 231 */ +0x1.9b25aap-1, /* 0.803022, 232 */ +0x1.9f2d74p-1, /* 0.810894, 233 */ +0x1.a33b1ep-1, /* 0.818810, 234 */ +0x1.a74eacp-1, /* 0.826772, 235 */ +0x1.ab682p-1, /* 0.834779, 236 */ +0x1.af877cp-1, /* 0.842831, 237 */ +0x1.b3accp-1, /* 0.850927, 238 */ +0x1.b7d7f2p-1, /* 0.859069, 239 */ +0x1.bc0914p-1, /* 0.867257, 240 */ +0x1.c04026p-1, /* 0.875489, 241 */ +0x1.c47d2ap-1, /* 0.883767, 242 */ +0x1.c8c024p-1, /* 0.892091, 243 */ +0x1.cd0918p-1, /* 0.900460, 244 */ +0x1.d15804p-1, /* 0.908875, 245 */ +0x1.d5acecp-1, /* 0.917335, 246 */ +0x1.da07d4p-1, /* 0.925841, 247 */ +0x1.de68bcp-1, /* 0.934393, 248 */ +0x1.e2cfa8p-1, /* 0.942991, 249 */ +0x1.e73c9ap-1, /* 0.951634, 250 */ +0x1.ebaf96p-1, /* 0.960324, 251 */ +0x1.f0289ep-1, /* 0.969060, 252 */ +0x1.f4a7b6p-1, /* 0.977842, 253 */ +0x1.f92cep-1, /* 0.986670, 254 */ +0x1.fdb822p-1, /* 0.995545, 255 */ +999.0 +}; diff --git a/extensions/two-table.c b/extensions/two-table.c new file mode 100644 index 0000000..5c67ad6 --- /dev/null +++ b/extensions/two-table.c @@ -0,0 +1,233 @@ +/* babl - dynamically extendable universal pixel conversion library. + * Copyright (C) 2013, Daniel Sabo + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, see + * . + */ + +#include +#include "babl.h" + +#include "base/util.h" +#include "extensions/two-table-tables.h" + +static inline unsigned char +conv_float_u8_two_table_map (float value) +{ + unsigned short index; + unsigned char result; + if (value < 0.0f) + return 0; + else if (value > 1.0f) + return 0xFF; + index = (unsigned short)(value * 0xFFFF); + result = linear_to_gamma[index]; + + if (value < u8_gamma_minimums[result]) + result -= 1; + else if (value >= u8_gamma_minimums[result+1]) + result += 1; + + return result; +} + +static long +conv_rgbafloat_linear_cairo24_le (unsigned char *src_char, + unsigned char *dst, + long samples) +{ + long n = samples; + float *src = (float*)src_char; + + while (n--) + { + if (src[3] < BABL_ALPHA_THRESHOLD) + { + *(int *)dst = 0; + } + else + { + dst[0] = conv_float_u8_two_table_map (src[2]); + dst[1] = conv_float_u8_two_table_map (src[1]); + dst[2] = conv_float_u8_two_table_map (src[0]); + } + src += 4; + dst += 4; + } + return samples; +} + +static long +conv_rgbfloat_linear_cairo24_le (unsigned char *src_char, + unsigned char *dst, + long samples) +{ + long n = samples; + float *src = (float*)src_char; + + while (n--) + { + dst[0] = conv_float_u8_two_table_map (src[2]); + dst[1] = conv_float_u8_two_table_map (src[1]); + dst[2] = conv_float_u8_two_table_map (src[0]); + + src += 3; + dst += 4; + } + return samples; +} + +static long +conv_rgbafloat_linear_rgbu8_gamma (unsigned char *src_char, + unsigned char *dst, + long samples) +{ + long n = samples; + float *src = (float*)src_char; + + while (n--) + { + if (src[3] < BABL_ALPHA_THRESHOLD) + { + dst[0] = 0; + dst[1] = 0; + dst[2] = 0; + } + else + { + dst[0] = conv_float_u8_two_table_map (src[0]); + dst[1] = conv_float_u8_two_table_map (src[1]); + dst[2] = conv_float_u8_two_table_map (src[2]); + } + src += 4; + dst += 3; + } + return samples; +} + +static long +conv_rgbfloat_linear_rgbu8_gamma (unsigned char *src_char, + unsigned char *dst, + long samples) +{ + long n = samples; + float *src = (float*)src_char; + + while (n--) + { + dst[0] = conv_float_u8_two_table_map (src[0]); + dst[1] = conv_float_u8_two_table_map (src[1]); + dst[2] = conv_float_u8_two_table_map (src[2]); + + src += 3; + dst += 3; + } + return samples; +} + +static long +conv_yfloat_linear_yu8_gamma (unsigned char *src_char, + unsigned char *dst, + long samples) +{ + long n = samples; + float *src = (float*)src_char; + + while (n--) + { + *dst++ = conv_float_u8_two_table_map (*src++); + } + return samples; +} + +static long +conv_yafloat_linear_yau8_gamma (unsigned char *src_char, + unsigned char *dst, + long samples) +{ + long n = samples; + float *src = (float*)src_char; + + while (n--) + { + long int alpha; + *dst++ = conv_float_u8_two_table_map (*src++); + + alpha = rint (*src++ * 255.0); + *dst++ = (alpha < 0) ? 0 : ((alpha > 255) ? 255 : alpha); + } + return samples; +} + +int init (void); + +int +init (void) +{ + int testint = 23; + char *testchar = (char*) &testint; + int littleendian = (testchar[0] == 23); + + if (littleendian) + { + const Babl *f24 = babl_format_new ( + "name", "cairo-RGB24", + babl_model ("R'G'B'"), + babl_type ("u8"), + babl_component ("B'"), + babl_component ("G'"), + babl_component ("R'"), + babl_component ("PAD"), + NULL + ); + + babl_conversion_new (babl_format ("RGB float"), + f24, + "linear", + conv_rgbfloat_linear_cairo24_le, + NULL); + + babl_conversion_new (babl_format ("RGBA float"), + f24, + "linear", + conv_rgbafloat_linear_cairo24_le, + NULL); + } + + babl_conversion_new (babl_format ("RGBA float"), + babl_format ("R'G'B' u8"), + "linear", + conv_rgbafloat_linear_rgbu8_gamma, + NULL); + + babl_conversion_new (babl_format ("RGB float"), + babl_format ("R'G'B' u8"), + "linear", + conv_rgbfloat_linear_rgbu8_gamma, + NULL); + + babl_conversion_new (babl_format ("Y float"), + babl_format ("Y' u8"), + "linear", + conv_yfloat_linear_yu8_gamma, + NULL); + + babl_conversion_new (babl_format ("YA float"), + babl_format ("Y'A u8"), + "linear", + conv_yafloat_linear_yau8_gamma, + NULL); + + return 0; +} diff --git a/extensions/util.h b/extensions/util.h new file mode 100644 index 0000000..cb872f8 --- /dev/null +++ b/extensions/util.h @@ -0,0 +1,56 @@ +/* babl - dynamically extendable universal pixel conversion library. + * Copyright (C) 2005, Øyvind Kolås. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, see + * . + */ + +#ifndef _UTIL_H +#define _UTIL_H + +#include +#include + +#ifndef BABL_LIBRARY +#error "config.h must be included prior to util.h" +#endif + +#ifndef HAVE_RINT +# define rint(f) (floor (((double) (f)) + 0.5)) +#endif + + +#define BABL_PLANAR_SANITY \ + { \ + assert(src_bands>0); \ + assert(dst_bands>0); \ + assert(src); \ + assert(*src); \ + assert(dst); \ + assert(*dst); \ + assert(n>0); \ + assert(*src_pitch); \ + } + +#define BABL_PLANAR_STEP \ + { \ + int i; \ + for (i=0; i< src_bands; i++) \ + src[i]+=src_pitch[i]; \ + for (i=0; i< dst_bands; i++) \ + dst[i]+=dst_pitch[i]; \ + } + +#endif + diff --git a/extensions/ycbcr.c b/extensions/ycbcr.c new file mode 100644 index 0000000..11db563 --- /dev/null +++ b/extensions/ycbcr.c @@ -0,0 +1,258 @@ +/* babl - dynamically extendable universal pixel conversion library. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, see + * . + */ + +#include "config.h" + +#include +#include + +#include "babl.h" +#include "base/util.h" + + +static void components (void); +static void models (void); +static void conversions (void); +static void formats (void); + +int init (void); + + +int +init (void) +{ + components (); + models (); + conversions (); + formats (); + + return 0; +} + + +static void +components (void) +{ + babl_component_new ("alpha", NULL); +} + + +static void +models (void) +{ + babl_model_new ( + "name", "Y'CbCr709", + babl_component ("Y'"), + babl_component ("Cb"), + babl_component ("Cr"), + NULL); + + babl_model_new ( + "name", "Y'CbCrA709", + babl_component ("Y'"), + babl_component ("Cb"), + babl_component ("Cr"), + babl_component ("alpha"), + NULL); +} + + +static long +rgba_to_ycbcra709 (char *src, + char *dst, + long n) +{ + while (n--) + { + double red = ((double *) src)[0]; + double green = ((double *) src)[1]; + double blue = ((double *) src)[2]; + double alpha = ((double *) src)[3]; + + double luminance, cb, cr; + + red = linear_to_gamma_2_2 (red); + green = linear_to_gamma_2_2 (green); + blue = linear_to_gamma_2_2 (blue); + + luminance = 0.2126 * red + 0.7152 * green + 0.0722 * blue; + cb = (blue - luminance) / 1.8556; + cr = (red - luminance) / 1.5748; + + ((double *) dst)[0] = luminance; + ((double *) dst)[1] = cb; + ((double *) dst)[2] = cr; + ((double *) dst)[3] = alpha; + + src += sizeof (double) * 4; + dst += sizeof (double) * 4; + } + return n; +} + + +static long +rgba_to_ycbcr709 (char *src, + char *dst, + long n) +{ + while (n--) + { + double red = ((double *) src)[0]; + double green = ((double *) src)[1]; + double blue = ((double *) src)[2]; + + double luminance, cb, cr; + + red = linear_to_gamma_2_2 (red); + green = linear_to_gamma_2_2 (green); + blue = linear_to_gamma_2_2 (blue); + + luminance = 0.2126 * red + 0.7152 * green + 0.0722 * blue; + cb = (blue - luminance) / 1.8556; + cr = (red - luminance) / 1.5748; + + ((double *) dst)[0] = luminance; + ((double *) dst)[1] = cb; + ((double *) dst)[2] = cr; + + src += sizeof (double) * 4; + dst += sizeof (double) * 3; + } + return n; +} + + +static long +ycbcra709_to_rgba (char *src, + char *dst, + long n) +{ + while (n--) + { + double luminance = ((double *) src)[0]; + double cb = ((double *) src)[1]; + double cr = ((double *) src)[2]; + double alpha = ((double *) src)[3]; + + double red, green, blue; + + red = 1.0 * luminance + 0.0 * cb + 1.5748 * cr; + green = 1.0 * luminance - 0.1873 * cb - 0.4681 * cr; + blue = 1.0 * luminance + 1.8556 * cb + 0.0 * cr; + + red = gamma_2_2_to_linear (red); + green = gamma_2_2_to_linear (green); + blue = gamma_2_2_to_linear (blue); + + ((double *) dst)[0] = red; + ((double *) dst)[1] = green; + ((double *) dst)[2] = blue; + ((double *) dst)[3] = alpha; + + src += sizeof (double) * 4; + dst += sizeof (double) * 4; + } + return n; +} + + +static long +ycbcr709_to_rgba (char *src, + char *dst, + long n) +{ + while (n--) + { + double luminance = ((double *) src)[0]; + double cb = ((double *) src)[1]; + double cr = ((double *) src)[2]; + + double red, green, blue; + + red = 1.0 * luminance + 0.0 * cb + 1.5748 * cr; + green = 1.0 * luminance - 0.1873 * cb - 0.4681 * cr; + blue = 1.0 * luminance + 1.8556 * cb + 0.0 * cr; + + red = gamma_2_2_to_linear (red); + green = gamma_2_2_to_linear (green); + blue = gamma_2_2_to_linear (blue); + + ((double *) dst)[0] = red; + ((double *) dst)[1] = green; + ((double *) dst)[2] = blue; + ((double *) dst)[3] = 1.0; + + src += sizeof (double) * 3; + dst += sizeof (double) * 4; + } + return n; +} + + +static void +conversions (void) +{ + babl_conversion_new ( + babl_model ("RGBA"), + babl_model ("Y'CbCr709"), + "linear", rgba_to_ycbcr709, + NULL + ); + babl_conversion_new ( + babl_model ("RGBA"), + babl_model ("Y'CbCrA709"), + "linear", rgba_to_ycbcra709, + NULL + ); + babl_conversion_new ( + babl_model ("Y'CbCrA709"), + babl_model ("RGBA"), + "linear", ycbcra709_to_rgba, + NULL + ); + babl_conversion_new ( + babl_model ("Y'CbCr709"), + babl_model ("RGBA"), + "linear", ycbcr709_to_rgba, + NULL + ); +} + + +static void +formats (void) +{ + babl_format_new ( + babl_model ("Y'CbCrA709"), + babl_type ("float"), + babl_component ("Y'"), + babl_type ("float"), + babl_component ("Cb"), + babl_component ("Cr"), + babl_component ("alpha"), + NULL); + + babl_format_new ( + babl_model ("Y'CbCr709"), + babl_type ("float"), + babl_component ("Y'"), + babl_type ("float"), + babl_component ("Cb"), + babl_component ("Cr"), + NULL); +} diff --git a/install-sh b/install-sh new file mode 100755 index 0000000..0b0fdcb --- /dev/null +++ b/install-sh @@ -0,0 +1,501 @@ +#!/bin/sh +# install - install a program, script, or datafile + +scriptversion=2013-12-25.23; # UTC + +# This originates from X11R5 (mit/util/scripts/install.sh), which was +# later released in X11R6 (xc/config/util/install.sh) with the +# following copyright and license. +# +# Copyright (C) 1994 X Consortium +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to +# deal in the Software without restriction, including without limitation the +# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +# sell copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN +# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- +# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +# +# Except as contained in this notice, the name of the X Consortium shall not +# be used in advertising or otherwise to promote the sale, use or other deal- +# ings in this Software without prior written authorization from the X Consor- +# tium. +# +# +# FSF changes to this file are in the public domain. +# +# Calling this script install-sh is preferred over install.sh, to prevent +# 'make' implicit rules from creating a file called install from it +# when there is no Makefile. +# +# This script is compatible with the BSD install script, but was written +# from scratch. + +tab=' ' +nl=' +' +IFS=" $tab$nl" + +# Set DOITPROG to "echo" to test this script. + +doit=${DOITPROG-} +doit_exec=${doit:-exec} + +# Put in absolute file names if you don't have them in your path; +# or use environment vars. + +chgrpprog=${CHGRPPROG-chgrp} +chmodprog=${CHMODPROG-chmod} +chownprog=${CHOWNPROG-chown} +cmpprog=${CMPPROG-cmp} +cpprog=${CPPROG-cp} +mkdirprog=${MKDIRPROG-mkdir} +mvprog=${MVPROG-mv} +rmprog=${RMPROG-rm} +stripprog=${STRIPPROG-strip} + +posix_mkdir= + +# Desired mode of installed file. +mode=0755 + +chgrpcmd= +chmodcmd=$chmodprog +chowncmd= +mvcmd=$mvprog +rmcmd="$rmprog -f" +stripcmd= + +src= +dst= +dir_arg= +dst_arg= + +copy_on_change=false +is_target_a_directory=possibly + +usage="\ +Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE + or: $0 [OPTION]... SRCFILES... DIRECTORY + or: $0 [OPTION]... -t DIRECTORY SRCFILES... + or: $0 [OPTION]... -d DIRECTORIES... + +In the 1st form, copy SRCFILE to DSTFILE. +In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. +In the 4th, create DIRECTORIES. + +Options: + --help display this help and exit. + --version display version info and exit. + + -c (ignored) + -C install only if different (preserve the last data modification time) + -d create directories instead of installing files. + -g GROUP $chgrpprog installed files to GROUP. + -m MODE $chmodprog installed files to MODE. + -o USER $chownprog installed files to USER. + -s $stripprog installed files. + -t DIRECTORY install into DIRECTORY. + -T report an error if DSTFILE is a directory. + +Environment variables override the default commands: + CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG + RMPROG STRIPPROG +" + +while test $# -ne 0; do + case $1 in + -c) ;; + + -C) copy_on_change=true;; + + -d) dir_arg=true;; + + -g) chgrpcmd="$chgrpprog $2" + shift;; + + --help) echo "$usage"; exit $?;; + + -m) mode=$2 + case $mode in + *' '* | *"$tab"* | *"$nl"* | *'*'* | *'?'* | *'['*) + echo "$0: invalid mode: $mode" >&2 + exit 1;; + esac + shift;; + + -o) chowncmd="$chownprog $2" + shift;; + + -s) stripcmd=$stripprog;; + + -t) + is_target_a_directory=always + dst_arg=$2 + # Protect names problematic for 'test' and other utilities. + case $dst_arg in + -* | [=\(\)!]) dst_arg=./$dst_arg;; + esac + shift;; + + -T) is_target_a_directory=never;; + + --version) echo "$0 $scriptversion"; exit $?;; + + --) shift + break;; + + -*) echo "$0: invalid option: $1" >&2 + exit 1;; + + *) break;; + esac + shift +done + +# We allow the use of options -d and -T together, by making -d +# take the precedence; this is for compatibility with GNU install. + +if test -n "$dir_arg"; then + if test -n "$dst_arg"; then + echo "$0: target directory not allowed when installing a directory." >&2 + exit 1 + fi +fi + +if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then + # When -d is used, all remaining arguments are directories to create. + # When -t is used, the destination is already specified. + # Otherwise, the last argument is the destination. Remove it from $@. + for arg + do + if test -n "$dst_arg"; then + # $@ is not empty: it contains at least $arg. + set fnord "$@" "$dst_arg" + shift # fnord + fi + shift # arg + dst_arg=$arg + # Protect names problematic for 'test' and other utilities. + case $dst_arg in + -* | [=\(\)!]) dst_arg=./$dst_arg;; + esac + done +fi + +if test $# -eq 0; then + if test -z "$dir_arg"; then + echo "$0: no input file specified." >&2 + exit 1 + fi + # It's OK to call 'install-sh -d' without argument. + # This can happen when creating conditional directories. + exit 0 +fi + +if test -z "$dir_arg"; then + if test $# -gt 1 || test "$is_target_a_directory" = always; then + if test ! -d "$dst_arg"; then + echo "$0: $dst_arg: Is not a directory." >&2 + exit 1 + fi + fi +fi + +if test -z "$dir_arg"; then + do_exit='(exit $ret); exit $ret' + trap "ret=129; $do_exit" 1 + trap "ret=130; $do_exit" 2 + trap "ret=141; $do_exit" 13 + trap "ret=143; $do_exit" 15 + + # Set umask so as not to create temps with too-generous modes. + # However, 'strip' requires both read and write access to temps. + case $mode in + # Optimize common cases. + *644) cp_umask=133;; + *755) cp_umask=22;; + + *[0-7]) + if test -z "$stripcmd"; then + u_plus_rw= + else + u_plus_rw='% 200' + fi + cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; + *) + if test -z "$stripcmd"; then + u_plus_rw= + else + u_plus_rw=,u+rw + fi + cp_umask=$mode$u_plus_rw;; + esac +fi + +for src +do + # Protect names problematic for 'test' and other utilities. + case $src in + -* | [=\(\)!]) src=./$src;; + esac + + if test -n "$dir_arg"; then + dst=$src + dstdir=$dst + test -d "$dstdir" + dstdir_status=$? + else + + # Waiting for this to be detected by the "$cpprog $src $dsttmp" command + # might cause directories to be created, which would be especially bad + # if $src (and thus $dsttmp) contains '*'. + if test ! -f "$src" && test ! -d "$src"; then + echo "$0: $src does not exist." >&2 + exit 1 + fi + + if test -z "$dst_arg"; then + echo "$0: no destination specified." >&2 + exit 1 + fi + dst=$dst_arg + + # If destination is a directory, append the input filename; won't work + # if double slashes aren't ignored. + if test -d "$dst"; then + if test "$is_target_a_directory" = never; then + echo "$0: $dst_arg: Is a directory" >&2 + exit 1 + fi + dstdir=$dst + dst=$dstdir/`basename "$src"` + dstdir_status=0 + else + dstdir=`dirname "$dst"` + test -d "$dstdir" + dstdir_status=$? + fi + fi + + obsolete_mkdir_used=false + + if test $dstdir_status != 0; then + case $posix_mkdir in + '') + # Create intermediate dirs using mode 755 as modified by the umask. + # This is like FreeBSD 'install' as of 1997-10-28. + umask=`umask` + case $stripcmd.$umask in + # Optimize common cases. + *[2367][2367]) mkdir_umask=$umask;; + .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; + + *[0-7]) + mkdir_umask=`expr $umask + 22 \ + - $umask % 100 % 40 + $umask % 20 \ + - $umask % 10 % 4 + $umask % 2 + `;; + *) mkdir_umask=$umask,go-w;; + esac + + # With -d, create the new directory with the user-specified mode. + # Otherwise, rely on $mkdir_umask. + if test -n "$dir_arg"; then + mkdir_mode=-m$mode + else + mkdir_mode= + fi + + posix_mkdir=false + case $umask in + *[123567][0-7][0-7]) + # POSIX mkdir -p sets u+wx bits regardless of umask, which + # is incompatible with FreeBSD 'install' when (umask & 300) != 0. + ;; + *) + tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ + trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 + + if (umask $mkdir_umask && + exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 + then + if test -z "$dir_arg" || { + # Check for POSIX incompatibilities with -m. + # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or + # other-writable bit of parent directory when it shouldn't. + # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. + ls_ld_tmpdir=`ls -ld "$tmpdir"` + case $ls_ld_tmpdir in + d????-?r-*) different_mode=700;; + d????-?--*) different_mode=755;; + *) false;; + esac && + $mkdirprog -m$different_mode -p -- "$tmpdir" && { + ls_ld_tmpdir_1=`ls -ld "$tmpdir"` + test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" + } + } + then posix_mkdir=: + fi + rmdir "$tmpdir/d" "$tmpdir" + else + # Remove any dirs left behind by ancient mkdir implementations. + rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null + fi + trap '' 0;; + esac;; + esac + + if + $posix_mkdir && ( + umask $mkdir_umask && + $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" + ) + then : + else + + # The umask is ridiculous, or mkdir does not conform to POSIX, + # or it failed possibly due to a race condition. Create the + # directory the slow way, step by step, checking for races as we go. + + case $dstdir in + /*) prefix='/';; + [-=\(\)!]*) prefix='./';; + *) prefix='';; + esac + + oIFS=$IFS + IFS=/ + set -f + set fnord $dstdir + shift + set +f + IFS=$oIFS + + prefixes= + + for d + do + test X"$d" = X && continue + + prefix=$prefix$d + if test -d "$prefix"; then + prefixes= + else + if $posix_mkdir; then + (umask=$mkdir_umask && + $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break + # Don't fail if two instances are running concurrently. + test -d "$prefix" || exit 1 + else + case $prefix in + *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; + *) qprefix=$prefix;; + esac + prefixes="$prefixes '$qprefix'" + fi + fi + prefix=$prefix/ + done + + if test -n "$prefixes"; then + # Don't fail if two instances are running concurrently. + (umask $mkdir_umask && + eval "\$doit_exec \$mkdirprog $prefixes") || + test -d "$dstdir" || exit 1 + obsolete_mkdir_used=true + fi + fi + fi + + if test -n "$dir_arg"; then + { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && + { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && + { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || + test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 + else + + # Make a couple of temp file names in the proper directory. + dsttmp=$dstdir/_inst.$$_ + rmtmp=$dstdir/_rm.$$_ + + # Trap to clean up those temp files at exit. + trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 + + # Copy the file name to the temp name. + (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && + + # and set any options; do chmod last to preserve setuid bits. + # + # If any of these fail, we abort the whole thing. If we want to + # ignore errors from any of these, just make sure not to ignore + # errors from the above "$doit $cpprog $src $dsttmp" command. + # + { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && + { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && + { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && + { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && + + # If -C, don't bother to copy if it wouldn't change the file. + if $copy_on_change && + old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && + new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && + set -f && + set X $old && old=:$2:$4:$5:$6 && + set X $new && new=:$2:$4:$5:$6 && + set +f && + test "$old" = "$new" && + $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 + then + rm -f "$dsttmp" + else + # Rename the file to the real destination. + $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || + + # The rename failed, perhaps because mv can't rename something else + # to itself, or perhaps because mv is so ancient that it does not + # support -f. + { + # Now remove or move aside any old file at destination location. + # We try this two ways since rm can't unlink itself on some + # systems and the destination file might be busy for other + # reasons. In this case, the final cleanup might fail but the new + # file should still install successfully. + { + test ! -f "$dst" || + $doit $rmcmd -f "$dst" 2>/dev/null || + { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && + { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } + } || + { echo "$0: cannot unlink or rename $dst" >&2 + (exit 1); exit 1 + } + } && + + # Now rename the file to the real destination. + $doit $mvcmd "$dsttmp" "$dst" + } + fi || exit 1 + + trap '' 0 + fi +done + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-time-zone: "UTC" +# time-stamp-end: "; # UTC" +# End: diff --git a/ltmain.sh b/ltmain.sh new file mode 100644 index 0000000..0f0a2da --- /dev/null +++ b/ltmain.sh @@ -0,0 +1,11147 @@ +#! /bin/sh +## DO NOT EDIT - This file generated from ./build-aux/ltmain.in +## by inline-source v2014-01-03.01 + +# libtool (GNU libtool) 2.4.6 +# Provide generalized library-building support services. +# Written by Gordon Matzigkeit , 1996 + +# Copyright (C) 1996-2015 Free Software Foundation, Inc. +# This is free software; see the source for copying conditions. There is NO +# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +# GNU Libtool is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# As a special exception to the GNU General Public License, +# if you distribute this file as part of a program or library that +# is built using GNU Libtool, you may include this file under the +# same distribution terms that you use for the rest of that program. +# +# GNU Libtool is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + + +PROGRAM=libtool +PACKAGE=libtool +VERSION=2.4.6 +package_revision=2.4.6 + + +## ------ ## +## Usage. ## +## ------ ## + +# Run './libtool --help' for help with using this script from the +# command line. + + +## ------------------------------- ## +## User overridable command paths. ## +## ------------------------------- ## + +# After configure completes, it has a better idea of some of the +# shell tools we need than the defaults used by the functions shared +# with bootstrap, so set those here where they can still be over- +# ridden by the user, but otherwise take precedence. + +: ${AUTOCONF="autoconf"} +: ${AUTOMAKE="automake"} + + +## -------------------------- ## +## Source external libraries. ## +## -------------------------- ## + +# Much of our low-level functionality needs to be sourced from external +# libraries, which are installed to $pkgauxdir. + +# Set a version string for this script. +scriptversion=2015-01-20.17; # UTC + +# General shell script boiler plate, and helper functions. +# Written by Gary V. Vaughan, 2004 + +# Copyright (C) 2004-2015 Free Software Foundation, Inc. +# This is free software; see the source for copying conditions. There is NO +# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. + +# As a special exception to the GNU General Public License, if you distribute +# this file as part of a program or library that is built using GNU Libtool, +# you may include this file under the same distribution terms that you use +# for the rest of that program. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNES FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# Please report bugs or propose patches to gary@gnu.org. + + +## ------ ## +## Usage. ## +## ------ ## + +# Evaluate this file near the top of your script to gain access to +# the functions and variables defined here: +# +# . `echo "$0" | ${SED-sed} 's|[^/]*$||'`/build-aux/funclib.sh +# +# If you need to override any of the default environment variable +# settings, do that before evaluating this file. + + +## -------------------- ## +## Shell normalisation. ## +## -------------------- ## + +# Some shells need a little help to be as Bourne compatible as possible. +# Before doing anything else, make sure all that help has been provided! + +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac +fi + +# NLS nuisances: We save the old values in case they are required later. +_G_user_locale= +_G_safe_locale= +for _G_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES +do + eval "if test set = \"\${$_G_var+set}\"; then + save_$_G_var=\$$_G_var + $_G_var=C + export $_G_var + _G_user_locale=\"$_G_var=\\\$save_\$_G_var; \$_G_user_locale\" + _G_safe_locale=\"$_G_var=C; \$_G_safe_locale\" + fi" +done + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +# Make sure IFS has a sensible default +sp=' ' +nl=' +' +IFS="$sp $nl" + +# There are apparently some retarded systems that use ';' as a PATH separator! +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + + +## ------------------------- ## +## Locate command utilities. ## +## ------------------------- ## + + +# func_executable_p FILE +# ---------------------- +# Check that FILE is an executable regular file. +func_executable_p () +{ + test -f "$1" && test -x "$1" +} + + +# func_path_progs PROGS_LIST CHECK_FUNC [PATH] +# -------------------------------------------- +# Search for either a program that responds to --version with output +# containing "GNU", or else returned by CHECK_FUNC otherwise, by +# trying all the directories in PATH with each of the elements of +# PROGS_LIST. +# +# CHECK_FUNC should accept the path to a candidate program, and +# set $func_check_prog_result if it truncates its output less than +# $_G_path_prog_max characters. +func_path_progs () +{ + _G_progs_list=$1 + _G_check_func=$2 + _G_PATH=${3-"$PATH"} + + _G_path_prog_max=0 + _G_path_prog_found=false + _G_save_IFS=$IFS; IFS=${PATH_SEPARATOR-:} + for _G_dir in $_G_PATH; do + IFS=$_G_save_IFS + test -z "$_G_dir" && _G_dir=. + for _G_prog_name in $_G_progs_list; do + for _exeext in '' .EXE; do + _G_path_prog=$_G_dir/$_G_prog_name$_exeext + func_executable_p "$_G_path_prog" || continue + case `"$_G_path_prog" --version 2>&1` in + *GNU*) func_path_progs_result=$_G_path_prog _G_path_prog_found=: ;; + *) $_G_check_func $_G_path_prog + func_path_progs_result=$func_check_prog_result + ;; + esac + $_G_path_prog_found && break 3 + done + done + done + IFS=$_G_save_IFS + test -z "$func_path_progs_result" && { + echo "no acceptable sed could be found in \$PATH" >&2 + exit 1 + } +} + + +# We want to be able to use the functions in this file before configure +# has figured out where the best binaries are kept, which means we have +# to search for them ourselves - except when the results are already set +# where we skip the searches. + +# Unless the user overrides by setting SED, search the path for either GNU +# sed, or the sed that truncates its output the least. +test -z "$SED" && { + _G_sed_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ + for _G_i in 1 2 3 4 5 6 7; do + _G_sed_script=$_G_sed_script$nl$_G_sed_script + done + echo "$_G_sed_script" 2>/dev/null | sed 99q >conftest.sed + _G_sed_script= + + func_check_prog_sed () + { + _G_path_prog=$1 + + _G_count=0 + printf 0123456789 >conftest.in + while : + do + cat conftest.in conftest.in >conftest.tmp + mv conftest.tmp conftest.in + cp conftest.in conftest.nl + echo '' >> conftest.nl + "$_G_path_prog" -f conftest.sed conftest.out 2>/dev/null || break + diff conftest.out conftest.nl >/dev/null 2>&1 || break + _G_count=`expr $_G_count + 1` + if test "$_G_count" -gt "$_G_path_prog_max"; then + # Best one so far, save it but keep looking for a better one + func_check_prog_result=$_G_path_prog + _G_path_prog_max=$_G_count + fi + # 10*(2^10) chars as input seems more than enough + test 10 -lt "$_G_count" && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out + } + + func_path_progs "sed gsed" func_check_prog_sed $PATH:/usr/xpg4/bin + rm -f conftest.sed + SED=$func_path_progs_result +} + + +# Unless the user overrides by setting GREP, search the path for either GNU +# grep, or the grep that truncates its output the least. +test -z "$GREP" && { + func_check_prog_grep () + { + _G_path_prog=$1 + + _G_count=0 + _G_path_prog_max=0 + printf 0123456789 >conftest.in + while : + do + cat conftest.in conftest.in >conftest.tmp + mv conftest.tmp conftest.in + cp conftest.in conftest.nl + echo 'GREP' >> conftest.nl + "$_G_path_prog" -e 'GREP$' -e '-(cannot match)-' conftest.out 2>/dev/null || break + diff conftest.out conftest.nl >/dev/null 2>&1 || break + _G_count=`expr $_G_count + 1` + if test "$_G_count" -gt "$_G_path_prog_max"; then + # Best one so far, save it but keep looking for a better one + func_check_prog_result=$_G_path_prog + _G_path_prog_max=$_G_count + fi + # 10*(2^10) chars as input seems more than enough + test 10 -lt "$_G_count" && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out + } + + func_path_progs "grep ggrep" func_check_prog_grep $PATH:/usr/xpg4/bin + GREP=$func_path_progs_result +} + + +## ------------------------------- ## +## User overridable command paths. ## +## ------------------------------- ## + +# All uppercase variable names are used for environment variables. These +# variables can be overridden by the user before calling a script that +# uses them if a suitable command of that name is not already available +# in the command search PATH. + +: ${CP="cp -f"} +: ${ECHO="printf %s\n"} +: ${EGREP="$GREP -E"} +: ${FGREP="$GREP -F"} +: ${LN_S="ln -s"} +: ${MAKE="make"} +: ${MKDIR="mkdir"} +: ${MV="mv -f"} +: ${RM="rm -f"} +: ${SHELL="${CONFIG_SHELL-/bin/sh}"} + + +## -------------------- ## +## Useful sed snippets. ## +## -------------------- ## + +sed_dirname='s|/[^/]*$||' +sed_basename='s|^.*/||' + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +sed_quote_subst='s|\([`"$\\]\)|\\\1|g' + +# Same as above, but do not quote variable references. +sed_double_quote_subst='s/\(["`\\]\)/\\\1/g' + +# Sed substitution that turns a string into a regex matching for the +# string literally. +sed_make_literal_regex='s|[].[^$\\*\/]|\\&|g' + +# Sed substitution that converts a w32 file name or path +# that contains forward slashes, into one that contains +# (escaped) backslashes. A very naive implementation. +sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' + +# Re-'\' parameter expansions in output of sed_double_quote_subst that +# were '\'-ed in input to the same. If an odd number of '\' preceded a +# '$' in input to sed_double_quote_subst, that '$' was protected from +# expansion. Since each input '\' is now two '\'s, look for any number +# of runs of four '\'s followed by two '\'s and then a '$'. '\' that '$'. +_G_bs='\\' +_G_bs2='\\\\' +_G_bs4='\\\\\\\\' +_G_dollar='\$' +sed_double_backslash="\ + s/$_G_bs4/&\\ +/g + s/^$_G_bs2$_G_dollar/$_G_bs&/ + s/\\([^$_G_bs]\\)$_G_bs2$_G_dollar/\\1$_G_bs2$_G_bs$_G_dollar/g + s/\n//g" + + +## ----------------- ## +## Global variables. ## +## ----------------- ## + +# Except for the global variables explicitly listed below, the following +# functions in the '^func_' namespace, and the '^require_' namespace +# variables initialised in the 'Resource management' section, sourcing +# this file will not pollute your global namespace with anything +# else. There's no portable way to scope variables in Bourne shell +# though, so actually running these functions will sometimes place +# results into a variable named after the function, and often use +# temporary variables in the '^_G_' namespace. If you are careful to +# avoid using those namespaces casually in your sourcing script, things +# should continue to work as you expect. And, of course, you can freely +# overwrite any of the functions or variables defined here before +# calling anything to customize them. + +EXIT_SUCCESS=0 +EXIT_FAILURE=1 +EXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. +EXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. + +# Allow overriding, eg assuming that you follow the convention of +# putting '$debug_cmd' at the start of all your functions, you can get +# bash to show function call trace with: +# +# debug_cmd='eval echo "${FUNCNAME[0]} $*" >&2' bash your-script-name +debug_cmd=${debug_cmd-":"} +exit_cmd=: + +# By convention, finish your script with: +# +# exit $exit_status +# +# so that you can set exit_status to non-zero if you want to indicate +# something went wrong during execution without actually bailing out at +# the point of failure. +exit_status=$EXIT_SUCCESS + +# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh +# is ksh but when the shell is invoked as "sh" and the current value of +# the _XPG environment variable is not equal to 1 (one), the special +# positional parameter $0, within a function call, is the name of the +# function. +progpath=$0 + +# The name of this program. +progname=`$ECHO "$progpath" |$SED "$sed_basename"` + +# Make sure we have an absolute progpath for reexecution: +case $progpath in + [\\/]*|[A-Za-z]:\\*) ;; + *[\\/]*) + progdir=`$ECHO "$progpath" |$SED "$sed_dirname"` + progdir=`cd "$progdir" && pwd` + progpath=$progdir/$progname + ;; + *) + _G_IFS=$IFS + IFS=${PATH_SEPARATOR-:} + for progdir in $PATH; do + IFS=$_G_IFS + test -x "$progdir/$progname" && break + done + IFS=$_G_IFS + test -n "$progdir" || progdir=`pwd` + progpath=$progdir/$progname + ;; +esac + + +## ----------------- ## +## Standard options. ## +## ----------------- ## + +# The following options affect the operation of the functions defined +# below, and should be set appropriately depending on run-time para- +# meters passed on the command line. + +opt_dry_run=false +opt_quiet=false +opt_verbose=false + +# Categories 'all' and 'none' are always available. Append any others +# you will pass as the first argument to func_warning from your own +# code. +warning_categories= + +# By default, display warnings according to 'opt_warning_types'. Set +# 'warning_func' to ':' to elide all warnings, or func_fatal_error to +# treat the next displayed warning as a fatal error. +warning_func=func_warn_and_continue + +# Set to 'all' to display all warnings, 'none' to suppress all +# warnings, or a space delimited list of some subset of +# 'warning_categories' to display only the listed warnings. +opt_warning_types=all + + +## -------------------- ## +## Resource management. ## +## -------------------- ## + +# This section contains definitions for functions that each ensure a +# particular resource (a file, or a non-empty configuration variable for +# example) is available, and if appropriate to extract default values +# from pertinent package files. Call them using their associated +# 'require_*' variable to ensure that they are executed, at most, once. +# +# It's entirely deliberate that calling these functions can set +# variables that don't obey the namespace limitations obeyed by the rest +# of this file, in order that that they be as useful as possible to +# callers. + + +# require_term_colors +# ------------------- +# Allow display of bold text on terminals that support it. +require_term_colors=func_require_term_colors +func_require_term_colors () +{ + $debug_cmd + + test -t 1 && { + # COLORTERM and USE_ANSI_COLORS environment variables take + # precedence, because most terminfo databases neglect to describe + # whether color sequences are supported. + test -n "${COLORTERM+set}" && : ${USE_ANSI_COLORS="1"} + + if test 1 = "$USE_ANSI_COLORS"; then + # Standard ANSI escape sequences + tc_reset='' + tc_bold=''; tc_standout='' + tc_red=''; tc_green='' + tc_blue=''; tc_cyan='' + else + # Otherwise trust the terminfo database after all. + test -n "`tput sgr0 2>/dev/null`" && { + tc_reset=`tput sgr0` + test -n "`tput bold 2>/dev/null`" && tc_bold=`tput bold` + tc_standout=$tc_bold + test -n "`tput smso 2>/dev/null`" && tc_standout=`tput smso` + test -n "`tput setaf 1 2>/dev/null`" && tc_red=`tput setaf 1` + test -n "`tput setaf 2 2>/dev/null`" && tc_green=`tput setaf 2` + test -n "`tput setaf 4 2>/dev/null`" && tc_blue=`tput setaf 4` + test -n "`tput setaf 5 2>/dev/null`" && tc_cyan=`tput setaf 5` + } + fi + } + + require_term_colors=: +} + + +## ----------------- ## +## Function library. ## +## ----------------- ## + +# This section contains a variety of useful functions to call in your +# scripts. Take note of the portable wrappers for features provided by +# some modern shells, which will fall back to slower equivalents on +# less featureful shells. + + +# func_append VAR VALUE +# --------------------- +# Append VALUE onto the existing contents of VAR. + + # We should try to minimise forks, especially on Windows where they are + # unreasonably slow, so skip the feature probes when bash or zsh are + # being used: + if test set = "${BASH_VERSION+set}${ZSH_VERSION+set}"; then + : ${_G_HAVE_ARITH_OP="yes"} + : ${_G_HAVE_XSI_OPS="yes"} + # The += operator was introduced in bash 3.1 + case $BASH_VERSION in + [12].* | 3.0 | 3.0*) ;; + *) + : ${_G_HAVE_PLUSEQ_OP="yes"} + ;; + esac + fi + + # _G_HAVE_PLUSEQ_OP + # Can be empty, in which case the shell is probed, "yes" if += is + # useable or anything else if it does not work. + test -z "$_G_HAVE_PLUSEQ_OP" \ + && (eval 'x=a; x+=" b"; test "a b" = "$x"') 2>/dev/null \ + && _G_HAVE_PLUSEQ_OP=yes + +if test yes = "$_G_HAVE_PLUSEQ_OP" +then + # This is an XSI compatible shell, allowing a faster implementation... + eval 'func_append () + { + $debug_cmd + + eval "$1+=\$2" + }' +else + # ...otherwise fall back to using expr, which is often a shell builtin. + func_append () + { + $debug_cmd + + eval "$1=\$$1\$2" + } +fi + + +# func_append_quoted VAR VALUE +# ---------------------------- +# Quote VALUE and append to the end of shell variable VAR, separated +# by a space. +if test yes = "$_G_HAVE_PLUSEQ_OP"; then + eval 'func_append_quoted () + { + $debug_cmd + + func_quote_for_eval "$2" + eval "$1+=\\ \$func_quote_for_eval_result" + }' +else + func_append_quoted () + { + $debug_cmd + + func_quote_for_eval "$2" + eval "$1=\$$1\\ \$func_quote_for_eval_result" + } +fi + + +# func_append_uniq VAR VALUE +# -------------------------- +# Append unique VALUE onto the existing contents of VAR, assuming +# entries are delimited by the first character of VALUE. For example: +# +# func_append_uniq options " --another-option option-argument" +# +# will only append to $options if " --another-option option-argument " +# is not already present somewhere in $options already (note spaces at +# each end implied by leading space in second argument). +func_append_uniq () +{ + $debug_cmd + + eval _G_current_value='`$ECHO $'$1'`' + _G_delim=`expr "$2" : '\(.\)'` + + case $_G_delim$_G_current_value$_G_delim in + *"$2$_G_delim"*) ;; + *) func_append "$@" ;; + esac +} + + +# func_arith TERM... +# ------------------ +# Set func_arith_result to the result of evaluating TERMs. + test -z "$_G_HAVE_ARITH_OP" \ + && (eval 'test 2 = $(( 1 + 1 ))') 2>/dev/null \ + && _G_HAVE_ARITH_OP=yes + +if test yes = "$_G_HAVE_ARITH_OP"; then + eval 'func_arith () + { + $debug_cmd + + func_arith_result=$(( $* )) + }' +else + func_arith () + { + $debug_cmd + + func_arith_result=`expr "$@"` + } +fi + + +# func_basename FILE +# ------------------ +# Set func_basename_result to FILE with everything up to and including +# the last / stripped. +if test yes = "$_G_HAVE_XSI_OPS"; then + # If this shell supports suffix pattern removal, then use it to avoid + # forking. Hide the definitions single quotes in case the shell chokes + # on unsupported syntax... + _b='func_basename_result=${1##*/}' + _d='case $1 in + */*) func_dirname_result=${1%/*}$2 ;; + * ) func_dirname_result=$3 ;; + esac' + +else + # ...otherwise fall back to using sed. + _b='func_basename_result=`$ECHO "$1" |$SED "$sed_basename"`' + _d='func_dirname_result=`$ECHO "$1" |$SED "$sed_dirname"` + if test "X$func_dirname_result" = "X$1"; then + func_dirname_result=$3 + else + func_append func_dirname_result "$2" + fi' +fi + +eval 'func_basename () +{ + $debug_cmd + + '"$_b"' +}' + + +# func_dirname FILE APPEND NONDIR_REPLACEMENT +# ------------------------------------------- +# Compute the dirname of FILE. If nonempty, add APPEND to the result, +# otherwise set result to NONDIR_REPLACEMENT. +eval 'func_dirname () +{ + $debug_cmd + + '"$_d"' +}' + + +# func_dirname_and_basename FILE APPEND NONDIR_REPLACEMENT +# -------------------------------------------------------- +# Perform func_basename and func_dirname in a single function +# call: +# dirname: Compute the dirname of FILE. If nonempty, +# add APPEND to the result, otherwise set result +# to NONDIR_REPLACEMENT. +# value returned in "$func_dirname_result" +# basename: Compute filename of FILE. +# value retuned in "$func_basename_result" +# For efficiency, we do not delegate to the functions above but instead +# duplicate the functionality here. +eval 'func_dirname_and_basename () +{ + $debug_cmd + + '"$_b"' + '"$_d"' +}' + + +# func_echo ARG... +# ---------------- +# Echo program name prefixed message. +func_echo () +{ + $debug_cmd + + _G_message=$* + + func_echo_IFS=$IFS + IFS=$nl + for _G_line in $_G_message; do + IFS=$func_echo_IFS + $ECHO "$progname: $_G_line" + done + IFS=$func_echo_IFS +} + + +# func_echo_all ARG... +# -------------------- +# Invoke $ECHO with all args, space-separated. +func_echo_all () +{ + $ECHO "$*" +} + + +# func_echo_infix_1 INFIX ARG... +# ------------------------------ +# Echo program name, followed by INFIX on the first line, with any +# additional lines not showing INFIX. +func_echo_infix_1 () +{ + $debug_cmd + + $require_term_colors + + _G_infix=$1; shift + _G_indent=$_G_infix + _G_prefix="$progname: $_G_infix: " + _G_message=$* + + # Strip color escape sequences before counting printable length + for _G_tc in "$tc_reset" "$tc_bold" "$tc_standout" "$tc_red" "$tc_green" "$tc_blue" "$tc_cyan" + do + test -n "$_G_tc" && { + _G_esc_tc=`$ECHO "$_G_tc" | $SED "$sed_make_literal_regex"` + _G_indent=`$ECHO "$_G_indent" | $SED "s|$_G_esc_tc||g"` + } + done + _G_indent="$progname: "`echo "$_G_indent" | $SED 's|.| |g'`" " ## exclude from sc_prohibit_nested_quotes + + func_echo_infix_1_IFS=$IFS + IFS=$nl + for _G_line in $_G_message; do + IFS=$func_echo_infix_1_IFS + $ECHO "$_G_prefix$tc_bold$_G_line$tc_reset" >&2 + _G_prefix=$_G_indent + done + IFS=$func_echo_infix_1_IFS +} + + +# func_error ARG... +# ----------------- +# Echo program name prefixed message to standard error. +func_error () +{ + $debug_cmd + + $require_term_colors + + func_echo_infix_1 " $tc_standout${tc_red}error$tc_reset" "$*" >&2 +} + + +# func_fatal_error ARG... +# ----------------------- +# Echo program name prefixed message to standard error, and exit. +func_fatal_error () +{ + $debug_cmd + + func_error "$*" + exit $EXIT_FAILURE +} + + +# func_grep EXPRESSION FILENAME +# ----------------------------- +# Check whether EXPRESSION matches any line of FILENAME, without output. +func_grep () +{ + $debug_cmd + + $GREP "$1" "$2" >/dev/null 2>&1 +} + + +# func_len STRING +# --------------- +# Set func_len_result to the length of STRING. STRING may not +# start with a hyphen. + test -z "$_G_HAVE_XSI_OPS" \ + && (eval 'x=a/b/c; + test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \ + && _G_HAVE_XSI_OPS=yes + +if test yes = "$_G_HAVE_XSI_OPS"; then + eval 'func_len () + { + $debug_cmd + + func_len_result=${#1} + }' +else + func_len () + { + $debug_cmd + + func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len` + } +fi + + +# func_mkdir_p DIRECTORY-PATH +# --------------------------- +# Make sure the entire path to DIRECTORY-PATH is available. +func_mkdir_p () +{ + $debug_cmd + + _G_directory_path=$1 + _G_dir_list= + + if test -n "$_G_directory_path" && test : != "$opt_dry_run"; then + + # Protect directory names starting with '-' + case $_G_directory_path in + -*) _G_directory_path=./$_G_directory_path ;; + esac + + # While some portion of DIR does not yet exist... + while test ! -d "$_G_directory_path"; do + # ...make a list in topmost first order. Use a colon delimited + # list incase some portion of path contains whitespace. + _G_dir_list=$_G_directory_path:$_G_dir_list + + # If the last portion added has no slash in it, the list is done + case $_G_directory_path in */*) ;; *) break ;; esac + + # ...otherwise throw away the child directory and loop + _G_directory_path=`$ECHO "$_G_directory_path" | $SED -e "$sed_dirname"` + done + _G_dir_list=`$ECHO "$_G_dir_list" | $SED 's|:*$||'` + + func_mkdir_p_IFS=$IFS; IFS=: + for _G_dir in $_G_dir_list; do + IFS=$func_mkdir_p_IFS + # mkdir can fail with a 'File exist' error if two processes + # try to create one of the directories concurrently. Don't + # stop in that case! + $MKDIR "$_G_dir" 2>/dev/null || : + done + IFS=$func_mkdir_p_IFS + + # Bail out if we (or some other process) failed to create a directory. + test -d "$_G_directory_path" || \ + func_fatal_error "Failed to create '$1'" + fi +} + + +# func_mktempdir [BASENAME] +# ------------------------- +# Make a temporary directory that won't clash with other running +# libtool processes, and avoids race conditions if possible. If +# given, BASENAME is the basename for that directory. +func_mktempdir () +{ + $debug_cmd + + _G_template=${TMPDIR-/tmp}/${1-$progname} + + if test : = "$opt_dry_run"; then + # Return a directory name, but don't create it in dry-run mode + _G_tmpdir=$_G_template-$$ + else + + # If mktemp works, use that first and foremost + _G_tmpdir=`mktemp -d "$_G_template-XXXXXXXX" 2>/dev/null` + + if test ! -d "$_G_tmpdir"; then + # Failing that, at least try and use $RANDOM to avoid a race + _G_tmpdir=$_G_template-${RANDOM-0}$$ + + func_mktempdir_umask=`umask` + umask 0077 + $MKDIR "$_G_tmpdir" + umask $func_mktempdir_umask + fi + + # If we're not in dry-run mode, bomb out on failure + test -d "$_G_tmpdir" || \ + func_fatal_error "cannot create temporary directory '$_G_tmpdir'" + fi + + $ECHO "$_G_tmpdir" +} + + +# func_normal_abspath PATH +# ------------------------ +# Remove doubled-up and trailing slashes, "." path components, +# and cancel out any ".." path components in PATH after making +# it an absolute path. +func_normal_abspath () +{ + $debug_cmd + + # These SED scripts presuppose an absolute path with a trailing slash. + _G_pathcar='s|^/\([^/]*\).*$|\1|' + _G_pathcdr='s|^/[^/]*||' + _G_removedotparts=':dotsl + s|/\./|/|g + t dotsl + s|/\.$|/|' + _G_collapseslashes='s|/\{1,\}|/|g' + _G_finalslash='s|/*$|/|' + + # Start from root dir and reassemble the path. + func_normal_abspath_result= + func_normal_abspath_tpath=$1 + func_normal_abspath_altnamespace= + case $func_normal_abspath_tpath in + "") + # Empty path, that just means $cwd. + func_stripname '' '/' "`pwd`" + func_normal_abspath_result=$func_stripname_result + return + ;; + # The next three entries are used to spot a run of precisely + # two leading slashes without using negated character classes; + # we take advantage of case's first-match behaviour. + ///*) + # Unusual form of absolute path, do nothing. + ;; + //*) + # Not necessarily an ordinary path; POSIX reserves leading '//' + # and for example Cygwin uses it to access remote file shares + # over CIFS/SMB, so we conserve a leading double slash if found. + func_normal_abspath_altnamespace=/ + ;; + /*) + # Absolute path, do nothing. + ;; + *) + # Relative path, prepend $cwd. + func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath + ;; + esac + + # Cancel out all the simple stuff to save iterations. We also want + # the path to end with a slash for ease of parsing, so make sure + # there is one (and only one) here. + func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ + -e "$_G_removedotparts" -e "$_G_collapseslashes" -e "$_G_finalslash"` + while :; do + # Processed it all yet? + if test / = "$func_normal_abspath_tpath"; then + # If we ascended to the root using ".." the result may be empty now. + if test -z "$func_normal_abspath_result"; then + func_normal_abspath_result=/ + fi + break + fi + func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \ + -e "$_G_pathcar"` + func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ + -e "$_G_pathcdr"` + # Figure out what to do with it + case $func_normal_abspath_tcomponent in + "") + # Trailing empty path component, ignore it. + ;; + ..) + # Parent dir; strip last assembled component from result. + func_dirname "$func_normal_abspath_result" + func_normal_abspath_result=$func_dirname_result + ;; + *) + # Actual path component, append it. + func_append func_normal_abspath_result "/$func_normal_abspath_tcomponent" + ;; + esac + done + # Restore leading double-slash if one was found on entry. + func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result +} + + +# func_notquiet ARG... +# -------------------- +# Echo program name prefixed message only when not in quiet mode. +func_notquiet () +{ + $debug_cmd + + $opt_quiet || func_echo ${1+"$@"} + + # A bug in bash halts the script if the last line of a function + # fails when set -e is in force, so we need another command to + # work around that: + : +} + + +# func_relative_path SRCDIR DSTDIR +# -------------------------------- +# Set func_relative_path_result to the relative path from SRCDIR to DSTDIR. +func_relative_path () +{ + $debug_cmd + + func_relative_path_result= + func_normal_abspath "$1" + func_relative_path_tlibdir=$func_normal_abspath_result + func_normal_abspath "$2" + func_relative_path_tbindir=$func_normal_abspath_result + + # Ascend the tree starting from libdir + while :; do + # check if we have found a prefix of bindir + case $func_relative_path_tbindir in + $func_relative_path_tlibdir) + # found an exact match + func_relative_path_tcancelled= + break + ;; + $func_relative_path_tlibdir*) + # found a matching prefix + func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir" + func_relative_path_tcancelled=$func_stripname_result + if test -z "$func_relative_path_result"; then + func_relative_path_result=. + fi + break + ;; + *) + func_dirname $func_relative_path_tlibdir + func_relative_path_tlibdir=$func_dirname_result + if test -z "$func_relative_path_tlibdir"; then + # Have to descend all the way to the root! + func_relative_path_result=../$func_relative_path_result + func_relative_path_tcancelled=$func_relative_path_tbindir + break + fi + func_relative_path_result=../$func_relative_path_result + ;; + esac + done + + # Now calculate path; take care to avoid doubling-up slashes. + func_stripname '' '/' "$func_relative_path_result" + func_relative_path_result=$func_stripname_result + func_stripname '/' '/' "$func_relative_path_tcancelled" + if test -n "$func_stripname_result"; then + func_append func_relative_path_result "/$func_stripname_result" + fi + + # Normalisation. If bindir is libdir, return '.' else relative path. + if test -n "$func_relative_path_result"; then + func_stripname './' '' "$func_relative_path_result" + func_relative_path_result=$func_stripname_result + fi + + test -n "$func_relative_path_result" || func_relative_path_result=. + + : +} + + +# func_quote_for_eval ARG... +# -------------------------- +# Aesthetically quote ARGs to be evaled later. +# This function returns two values: +# i) func_quote_for_eval_result +# double-quoted, suitable for a subsequent eval +# ii) func_quote_for_eval_unquoted_result +# has all characters that are still active within double +# quotes backslashified. +func_quote_for_eval () +{ + $debug_cmd + + func_quote_for_eval_unquoted_result= + func_quote_for_eval_result= + while test 0 -lt $#; do + case $1 in + *[\\\`\"\$]*) + _G_unquoted_arg=`printf '%s\n' "$1" |$SED "$sed_quote_subst"` ;; + *) + _G_unquoted_arg=$1 ;; + esac + if test -n "$func_quote_for_eval_unquoted_result"; then + func_append func_quote_for_eval_unquoted_result " $_G_unquoted_arg" + else + func_append func_quote_for_eval_unquoted_result "$_G_unquoted_arg" + fi + + case $_G_unquoted_arg in + # Double-quote args containing shell metacharacters to delay + # word splitting, command substitution and variable expansion + # for a subsequent eval. + # Many Bourne shells cannot handle close brackets correctly + # in scan sets, so we specify it separately. + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + _G_quoted_arg=\"$_G_unquoted_arg\" + ;; + *) + _G_quoted_arg=$_G_unquoted_arg + ;; + esac + + if test -n "$func_quote_for_eval_result"; then + func_append func_quote_for_eval_result " $_G_quoted_arg" + else + func_append func_quote_for_eval_result "$_G_quoted_arg" + fi + shift + done +} + + +# func_quote_for_expand ARG +# ------------------------- +# Aesthetically quote ARG to be evaled later; same as above, +# but do not quote variable references. +func_quote_for_expand () +{ + $debug_cmd + + case $1 in + *[\\\`\"]*) + _G_arg=`$ECHO "$1" | $SED \ + -e "$sed_double_quote_subst" -e "$sed_double_backslash"` ;; + *) + _G_arg=$1 ;; + esac + + case $_G_arg in + # Double-quote args containing shell metacharacters to delay + # word splitting and command substitution for a subsequent eval. + # Many Bourne shells cannot handle close brackets correctly + # in scan sets, so we specify it separately. + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + _G_arg=\"$_G_arg\" + ;; + esac + + func_quote_for_expand_result=$_G_arg +} + + +# func_stripname PREFIX SUFFIX NAME +# --------------------------------- +# strip PREFIX and SUFFIX from NAME, and store in func_stripname_result. +# PREFIX and SUFFIX must not contain globbing or regex special +# characters, hashes, percent signs, but SUFFIX may contain a leading +# dot (in which case that matches only a dot). +if test yes = "$_G_HAVE_XSI_OPS"; then + eval 'func_stripname () + { + $debug_cmd + + # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are + # positional parameters, so assign one to ordinary variable first. + func_stripname_result=$3 + func_stripname_result=${func_stripname_result#"$1"} + func_stripname_result=${func_stripname_result%"$2"} + }' +else + func_stripname () + { + $debug_cmd + + case $2 in + .*) func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%\\\\$2\$%%"`;; + *) func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%$2\$%%"`;; + esac + } +fi + + +# func_show_eval CMD [FAIL_EXP] +# ----------------------------- +# Unless opt_quiet is true, then output CMD. Then, if opt_dryrun is +# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP +# is given, then evaluate it. +func_show_eval () +{ + $debug_cmd + + _G_cmd=$1 + _G_fail_exp=${2-':'} + + func_quote_for_expand "$_G_cmd" + eval "func_notquiet $func_quote_for_expand_result" + + $opt_dry_run || { + eval "$_G_cmd" + _G_status=$? + if test 0 -ne "$_G_status"; then + eval "(exit $_G_status); $_G_fail_exp" + fi + } +} + + +# func_show_eval_locale CMD [FAIL_EXP] +# ------------------------------------ +# Unless opt_quiet is true, then output CMD. Then, if opt_dryrun is +# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP +# is given, then evaluate it. Use the saved locale for evaluation. +func_show_eval_locale () +{ + $debug_cmd + + _G_cmd=$1 + _G_fail_exp=${2-':'} + + $opt_quiet || { + func_quote_for_expand "$_G_cmd" + eval "func_echo $func_quote_for_expand_result" + } + + $opt_dry_run || { + eval "$_G_user_locale + $_G_cmd" + _G_status=$? + eval "$_G_safe_locale" + if test 0 -ne "$_G_status"; then + eval "(exit $_G_status); $_G_fail_exp" + fi + } +} + + +# func_tr_sh +# ---------- +# Turn $1 into a string suitable for a shell variable name. +# Result is stored in $func_tr_sh_result. All characters +# not in the set a-zA-Z0-9_ are replaced with '_'. Further, +# if $1 begins with a digit, a '_' is prepended as well. +func_tr_sh () +{ + $debug_cmd + + case $1 in + [0-9]* | *[!a-zA-Z0-9_]*) + func_tr_sh_result=`$ECHO "$1" | $SED -e 's/^\([0-9]\)/_\1/' -e 's/[^a-zA-Z0-9_]/_/g'` + ;; + * ) + func_tr_sh_result=$1 + ;; + esac +} + + +# func_verbose ARG... +# ------------------- +# Echo program name prefixed message in verbose mode only. +func_verbose () +{ + $debug_cmd + + $opt_verbose && func_echo "$*" + + : +} + + +# func_warn_and_continue ARG... +# ----------------------------- +# Echo program name prefixed warning message to standard error. +func_warn_and_continue () +{ + $debug_cmd + + $require_term_colors + + func_echo_infix_1 "${tc_red}warning$tc_reset" "$*" >&2 +} + + +# func_warning CATEGORY ARG... +# ---------------------------- +# Echo program name prefixed warning message to standard error. Warning +# messages can be filtered according to CATEGORY, where this function +# elides messages where CATEGORY is not listed in the global variable +# 'opt_warning_types'. +func_warning () +{ + $debug_cmd + + # CATEGORY must be in the warning_categories list! + case " $warning_categories " in + *" $1 "*) ;; + *) func_internal_error "invalid warning category '$1'" ;; + esac + + _G_category=$1 + shift + + case " $opt_warning_types " in + *" $_G_category "*) $warning_func ${1+"$@"} ;; + esac +} + + +# func_sort_ver VER1 VER2 +# ----------------------- +# 'sort -V' is not generally available. +# Note this deviates from the version comparison in automake +# in that it treats 1.5 < 1.5.0, and treats 1.4.4a < 1.4-p3a +# but this should suffice as we won't be specifying old +# version formats or redundant trailing .0 in bootstrap.conf. +# If we did want full compatibility then we should probably +# use m4_version_compare from autoconf. +func_sort_ver () +{ + $debug_cmd + + printf '%s\n%s\n' "$1" "$2" \ + | sort -t. -k 1,1n -k 2,2n -k 3,3n -k 4,4n -k 5,5n -k 6,6n -k 7,7n -k 8,8n -k 9,9n +} + +# func_lt_ver PREV CURR +# --------------------- +# Return true if PREV and CURR are in the correct order according to +# func_sort_ver, otherwise false. Use it like this: +# +# func_lt_ver "$prev_ver" "$proposed_ver" || func_fatal_error "..." +func_lt_ver () +{ + $debug_cmd + + test "x$1" = x`func_sort_ver "$1" "$2" | $SED 1q` +} + + +# Local variables: +# mode: shell-script +# sh-indentation: 2 +# eval: (add-hook 'before-save-hook 'time-stamp) +# time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC" +# time-stamp-time-zone: "UTC" +# End: +#! /bin/sh + +# Set a version string for this script. +scriptversion=2014-01-07.03; # UTC + +# A portable, pluggable option parser for Bourne shell. +# Written by Gary V. Vaughan, 2010 + +# Copyright (C) 2010-2015 Free Software Foundation, Inc. +# This is free software; see the source for copying conditions. There is NO +# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# Please report bugs or propose patches to gary@gnu.org. + + +## ------ ## +## Usage. ## +## ------ ## + +# This file is a library for parsing options in your shell scripts along +# with assorted other useful supporting features that you can make use +# of too. +# +# For the simplest scripts you might need only: +# +# #!/bin/sh +# . relative/path/to/funclib.sh +# . relative/path/to/options-parser +# scriptversion=1.0 +# func_options ${1+"$@"} +# eval set dummy "$func_options_result"; shift +# ...rest of your script... +# +# In order for the '--version' option to work, you will need to have a +# suitably formatted comment like the one at the top of this file +# starting with '# Written by ' and ending with '# warranty; '. +# +# For '-h' and '--help' to work, you will also need a one line +# description of your script's purpose in a comment directly above the +# '# Written by ' line, like the one at the top of this file. +# +# The default options also support '--debug', which will turn on shell +# execution tracing (see the comment above debug_cmd below for another +# use), and '--verbose' and the func_verbose function to allow your script +# to display verbose messages only when your user has specified +# '--verbose'. +# +# After sourcing this file, you can plug processing for additional +# options by amending the variables from the 'Configuration' section +# below, and following the instructions in the 'Option parsing' +# section further down. + +## -------------- ## +## Configuration. ## +## -------------- ## + +# You should override these variables in your script after sourcing this +# file so that they reflect the customisations you have added to the +# option parser. + +# The usage line for option parsing errors and the start of '-h' and +# '--help' output messages. You can embed shell variables for delayed +# expansion at the time the message is displayed, but you will need to +# quote other shell meta-characters carefully to prevent them being +# expanded when the contents are evaled. +usage='$progpath [OPTION]...' + +# Short help message in response to '-h' and '--help'. Add to this or +# override it after sourcing this library to reflect the full set of +# options your script accepts. +usage_message="\ + --debug enable verbose shell tracing + -W, --warnings=CATEGORY + report the warnings falling in CATEGORY [all] + -v, --verbose verbosely report processing + --version print version information and exit + -h, --help print short or long help message and exit +" + +# Additional text appended to 'usage_message' in response to '--help'. +long_help_message=" +Warning categories include: + 'all' show all warnings + 'none' turn off all the warnings + 'error' warnings are treated as fatal errors" + +# Help message printed before fatal option parsing errors. +fatal_help="Try '\$progname --help' for more information." + + + +## ------------------------- ## +## Hook function management. ## +## ------------------------- ## + +# This section contains functions for adding, removing, and running hooks +# to the main code. A hook is just a named list of of function, that can +# be run in order later on. + +# func_hookable FUNC_NAME +# ----------------------- +# Declare that FUNC_NAME will run hooks added with +# 'func_add_hook FUNC_NAME ...'. +func_hookable () +{ + $debug_cmd + + func_append hookable_fns " $1" +} + + +# func_add_hook FUNC_NAME HOOK_FUNC +# --------------------------------- +# Request that FUNC_NAME call HOOK_FUNC before it returns. FUNC_NAME must +# first have been declared "hookable" by a call to 'func_hookable'. +func_add_hook () +{ + $debug_cmd + + case " $hookable_fns " in + *" $1 "*) ;; + *) func_fatal_error "'$1' does not accept hook functions." ;; + esac + + eval func_append ${1}_hooks '" $2"' +} + + +# func_remove_hook FUNC_NAME HOOK_FUNC +# ------------------------------------ +# Remove HOOK_FUNC from the list of functions called by FUNC_NAME. +func_remove_hook () +{ + $debug_cmd + + eval ${1}_hooks='`$ECHO "\$'$1'_hooks" |$SED "s| '$2'||"`' +} + + +# func_run_hooks FUNC_NAME [ARG]... +# --------------------------------- +# Run all hook functions registered to FUNC_NAME. +# It is assumed that the list of hook functions contains nothing more +# than a whitespace-delimited list of legal shell function names, and +# no effort is wasted trying to catch shell meta-characters or preserve +# whitespace. +func_run_hooks () +{ + $debug_cmd + + case " $hookable_fns " in + *" $1 "*) ;; + *) func_fatal_error "'$1' does not support hook funcions.n" ;; + esac + + eval _G_hook_fns=\$$1_hooks; shift + + for _G_hook in $_G_hook_fns; do + eval $_G_hook '"$@"' + + # store returned options list back into positional + # parameters for next 'cmd' execution. + eval _G_hook_result=\$${_G_hook}_result + eval set dummy "$_G_hook_result"; shift + done + + func_quote_for_eval ${1+"$@"} + func_run_hooks_result=$func_quote_for_eval_result +} + + + +## --------------- ## +## Option parsing. ## +## --------------- ## + +# In order to add your own option parsing hooks, you must accept the +# full positional parameter list in your hook function, remove any +# options that you action, and then pass back the remaining unprocessed +# options in '_result', escaped suitably for +# 'eval'. Like this: +# +# my_options_prep () +# { +# $debug_cmd +# +# # Extend the existing usage message. +# usage_message=$usage_message' +# -s, --silent don'\''t print informational messages +# ' +# +# func_quote_for_eval ${1+"$@"} +# my_options_prep_result=$func_quote_for_eval_result +# } +# func_add_hook func_options_prep my_options_prep +# +# +# my_silent_option () +# { +# $debug_cmd +# +# # Note that for efficiency, we parse as many options as we can +# # recognise in a loop before passing the remainder back to the +# # caller on the first unrecognised argument we encounter. +# while test $# -gt 0; do +# opt=$1; shift +# case $opt in +# --silent|-s) opt_silent=: ;; +# # Separate non-argument short options: +# -s*) func_split_short_opt "$_G_opt" +# set dummy "$func_split_short_opt_name" \ +# "-$func_split_short_opt_arg" ${1+"$@"} +# shift +# ;; +# *) set dummy "$_G_opt" "$*"; shift; break ;; +# esac +# done +# +# func_quote_for_eval ${1+"$@"} +# my_silent_option_result=$func_quote_for_eval_result +# } +# func_add_hook func_parse_options my_silent_option +# +# +# my_option_validation () +# { +# $debug_cmd +# +# $opt_silent && $opt_verbose && func_fatal_help "\ +# '--silent' and '--verbose' options are mutually exclusive." +# +# func_quote_for_eval ${1+"$@"} +# my_option_validation_result=$func_quote_for_eval_result +# } +# func_add_hook func_validate_options my_option_validation +# +# You'll alse need to manually amend $usage_message to reflect the extra +# options you parse. It's preferable to append if you can, so that +# multiple option parsing hooks can be added safely. + + +# func_options [ARG]... +# --------------------- +# All the functions called inside func_options are hookable. See the +# individual implementations for details. +func_hookable func_options +func_options () +{ + $debug_cmd + + func_options_prep ${1+"$@"} + eval func_parse_options \ + ${func_options_prep_result+"$func_options_prep_result"} + eval func_validate_options \ + ${func_parse_options_result+"$func_parse_options_result"} + + eval func_run_hooks func_options \ + ${func_validate_options_result+"$func_validate_options_result"} + + # save modified positional parameters for caller + func_options_result=$func_run_hooks_result +} + + +# func_options_prep [ARG]... +# -------------------------- +# All initialisations required before starting the option parse loop. +# Note that when calling hook functions, we pass through the list of +# positional parameters. If a hook function modifies that list, and +# needs to propogate that back to rest of this script, then the complete +# modified list must be put in 'func_run_hooks_result' before +# returning. +func_hookable func_options_prep +func_options_prep () +{ + $debug_cmd + + # Option defaults: + opt_verbose=false + opt_warning_types= + + func_run_hooks func_options_prep ${1+"$@"} + + # save modified positional parameters for caller + func_options_prep_result=$func_run_hooks_result +} + + +# func_parse_options [ARG]... +# --------------------------- +# The main option parsing loop. +func_hookable func_parse_options +func_parse_options () +{ + $debug_cmd + + func_parse_options_result= + + # this just eases exit handling + while test $# -gt 0; do + # Defer to hook functions for initial option parsing, so they + # get priority in the event of reusing an option name. + func_run_hooks func_parse_options ${1+"$@"} + + # Adjust func_parse_options positional parameters to match + eval set dummy "$func_run_hooks_result"; shift + + # Break out of the loop if we already parsed every option. + test $# -gt 0 || break + + _G_opt=$1 + shift + case $_G_opt in + --debug|-x) debug_cmd='set -x' + func_echo "enabling shell trace mode" + $debug_cmd + ;; + + --no-warnings|--no-warning|--no-warn) + set dummy --warnings none ${1+"$@"} + shift + ;; + + --warnings|--warning|-W) + test $# = 0 && func_missing_arg $_G_opt && break + case " $warning_categories $1" in + *" $1 "*) + # trailing space prevents matching last $1 above + func_append_uniq opt_warning_types " $1" + ;; + *all) + opt_warning_types=$warning_categories + ;; + *none) + opt_warning_types=none + warning_func=: + ;; + *error) + opt_warning_types=$warning_categories + warning_func=func_fatal_error + ;; + *) + func_fatal_error \ + "unsupported warning category: '$1'" + ;; + esac + shift + ;; + + --verbose|-v) opt_verbose=: ;; + --version) func_version ;; + -\?|-h) func_usage ;; + --help) func_help ;; + + # Separate optargs to long options (plugins may need this): + --*=*) func_split_equals "$_G_opt" + set dummy "$func_split_equals_lhs" \ + "$func_split_equals_rhs" ${1+"$@"} + shift + ;; + + # Separate optargs to short options: + -W*) + func_split_short_opt "$_G_opt" + set dummy "$func_split_short_opt_name" \ + "$func_split_short_opt_arg" ${1+"$@"} + shift + ;; + + # Separate non-argument short options: + -\?*|-h*|-v*|-x*) + func_split_short_opt "$_G_opt" + set dummy "$func_split_short_opt_name" \ + "-$func_split_short_opt_arg" ${1+"$@"} + shift + ;; + + --) break ;; + -*) func_fatal_help "unrecognised option: '$_G_opt'" ;; + *) set dummy "$_G_opt" ${1+"$@"}; shift; break ;; + esac + done + + # save modified positional parameters for caller + func_quote_for_eval ${1+"$@"} + func_parse_options_result=$func_quote_for_eval_result +} + + +# func_validate_options [ARG]... +# ------------------------------ +# Perform any sanity checks on option settings and/or unconsumed +# arguments. +func_hookable func_validate_options +func_validate_options () +{ + $debug_cmd + + # Display all warnings if -W was not given. + test -n "$opt_warning_types" || opt_warning_types=" $warning_categories" + + func_run_hooks func_validate_options ${1+"$@"} + + # Bail if the options were screwed! + $exit_cmd $EXIT_FAILURE + + # save modified positional parameters for caller + func_validate_options_result=$func_run_hooks_result +} + + + +## ----------------- ## +## Helper functions. ## +## ----------------- ## + +# This section contains the helper functions used by the rest of the +# hookable option parser framework in ascii-betical order. + + +# func_fatal_help ARG... +# ---------------------- +# Echo program name prefixed message to standard error, followed by +# a help hint, and exit. +func_fatal_help () +{ + $debug_cmd + + eval \$ECHO \""Usage: $usage"\" + eval \$ECHO \""$fatal_help"\" + func_error ${1+"$@"} + exit $EXIT_FAILURE +} + + +# func_help +# --------- +# Echo long help message to standard output and exit. +func_help () +{ + $debug_cmd + + func_usage_message + $ECHO "$long_help_message" + exit 0 +} + + +# func_missing_arg ARGNAME +# ------------------------ +# Echo program name prefixed message to standard error and set global +# exit_cmd. +func_missing_arg () +{ + $debug_cmd + + func_error "Missing argument for '$1'." + exit_cmd=exit +} + + +# func_split_equals STRING +# ------------------------ +# Set func_split_equals_lhs and func_split_equals_rhs shell variables after +# splitting STRING at the '=' sign. +test -z "$_G_HAVE_XSI_OPS" \ + && (eval 'x=a/b/c; + test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \ + && _G_HAVE_XSI_OPS=yes + +if test yes = "$_G_HAVE_XSI_OPS" +then + # This is an XSI compatible shell, allowing a faster implementation... + eval 'func_split_equals () + { + $debug_cmd + + func_split_equals_lhs=${1%%=*} + func_split_equals_rhs=${1#*=} + test "x$func_split_equals_lhs" = "x$1" \ + && func_split_equals_rhs= + }' +else + # ...otherwise fall back to using expr, which is often a shell builtin. + func_split_equals () + { + $debug_cmd + + func_split_equals_lhs=`expr "x$1" : 'x\([^=]*\)'` + func_split_equals_rhs= + test "x$func_split_equals_lhs" = "x$1" \ + || func_split_equals_rhs=`expr "x$1" : 'x[^=]*=\(.*\)$'` + } +fi #func_split_equals + + +# func_split_short_opt SHORTOPT +# ----------------------------- +# Set func_split_short_opt_name and func_split_short_opt_arg shell +# variables after splitting SHORTOPT after the 2nd character. +if test yes = "$_G_HAVE_XSI_OPS" +then + # This is an XSI compatible shell, allowing a faster implementation... + eval 'func_split_short_opt () + { + $debug_cmd + + func_split_short_opt_arg=${1#??} + func_split_short_opt_name=${1%"$func_split_short_opt_arg"} + }' +else + # ...otherwise fall back to using expr, which is often a shell builtin. + func_split_short_opt () + { + $debug_cmd + + func_split_short_opt_name=`expr "x$1" : 'x-\(.\)'` + func_split_short_opt_arg=`expr "x$1" : 'x-.\(.*\)$'` + } +fi #func_split_short_opt + + +# func_usage +# ---------- +# Echo short help message to standard output and exit. +func_usage () +{ + $debug_cmd + + func_usage_message + $ECHO "Run '$progname --help |${PAGER-more}' for full usage" + exit 0 +} + + +# func_usage_message +# ------------------ +# Echo short help message to standard output. +func_usage_message () +{ + $debug_cmd + + eval \$ECHO \""Usage: $usage"\" + echo + $SED -n 's|^# || + /^Written by/{ + x;p;x + } + h + /^Written by/q' < "$progpath" + echo + eval \$ECHO \""$usage_message"\" +} + + +# func_version +# ------------ +# Echo version message to standard output and exit. +func_version () +{ + $debug_cmd + + printf '%s\n' "$progname $scriptversion" + $SED -n ' + /(C)/!b go + :more + /\./!{ + N + s|\n# | | + b more + } + :go + /^# Written by /,/# warranty; / { + s|^# || + s|^# *$|| + s|\((C)\)[ 0-9,-]*[ ,-]\([1-9][0-9]* \)|\1 \2| + p + } + /^# Written by / { + s|^# || + p + } + /^warranty; /q' < "$progpath" + + exit $? +} + + +# Local variables: +# mode: shell-script +# sh-indentation: 2 +# eval: (add-hook 'before-save-hook 'time-stamp) +# time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC" +# time-stamp-time-zone: "UTC" +# End: + +# Set a version string. +scriptversion='(GNU libtool) 2.4.6' + + +# func_echo ARG... +# ---------------- +# Libtool also displays the current mode in messages, so override +# funclib.sh func_echo with this custom definition. +func_echo () +{ + $debug_cmd + + _G_message=$* + + func_echo_IFS=$IFS + IFS=$nl + for _G_line in $_G_message; do + IFS=$func_echo_IFS + $ECHO "$progname${opt_mode+: $opt_mode}: $_G_line" + done + IFS=$func_echo_IFS +} + + +# func_warning ARG... +# ------------------- +# Libtool warnings are not categorized, so override funclib.sh +# func_warning with this simpler definition. +func_warning () +{ + $debug_cmd + + $warning_func ${1+"$@"} +} + + +## ---------------- ## +## Options parsing. ## +## ---------------- ## + +# Hook in the functions to make sure our own options are parsed during +# the option parsing loop. + +usage='$progpath [OPTION]... [MODE-ARG]...' + +# Short help message in response to '-h'. +usage_message="Options: + --config show all configuration variables + --debug enable verbose shell tracing + -n, --dry-run display commands without modifying any files + --features display basic configuration information and exit + --mode=MODE use operation mode MODE + --no-warnings equivalent to '-Wnone' + --preserve-dup-deps don't remove duplicate dependency libraries + --quiet, --silent don't print informational messages + --tag=TAG use configuration variables from tag TAG + -v, --verbose print more informational messages than default + --version print version information + -W, --warnings=CATEGORY report the warnings falling in CATEGORY [all] + -h, --help, --help-all print short, long, or detailed help message +" + +# Additional text appended to 'usage_message' in response to '--help'. +func_help () +{ + $debug_cmd + + func_usage_message + $ECHO "$long_help_message + +MODE must be one of the following: + + clean remove files from the build directory + compile compile a source file into a libtool object + execute automatically set library path, then run a program + finish complete the installation of libtool libraries + install install libraries or executables + link create a library or an executable + uninstall remove libraries from an installed directory + +MODE-ARGS vary depending on the MODE. When passed as first option, +'--mode=MODE' may be abbreviated as 'MODE' or a unique abbreviation of that. +Try '$progname --help --mode=MODE' for a more detailed description of MODE. + +When reporting a bug, please describe a test case to reproduce it and +include the following information: + + host-triplet: $host + shell: $SHELL + compiler: $LTCC + compiler flags: $LTCFLAGS + linker: $LD (gnu? $with_gnu_ld) + version: $progname (GNU libtool) 2.4.6 + automake: `($AUTOMAKE --version) 2>/dev/null |$SED 1q` + autoconf: `($AUTOCONF --version) 2>/dev/null |$SED 1q` + +Report bugs to . +GNU libtool home page: . +General help using GNU software: ." + exit 0 +} + + +# func_lo2o OBJECT-NAME +# --------------------- +# Transform OBJECT-NAME from a '.lo' suffix to the platform specific +# object suffix. + +lo2o=s/\\.lo\$/.$objext/ +o2lo=s/\\.$objext\$/.lo/ + +if test yes = "$_G_HAVE_XSI_OPS"; then + eval 'func_lo2o () + { + case $1 in + *.lo) func_lo2o_result=${1%.lo}.$objext ;; + * ) func_lo2o_result=$1 ;; + esac + }' + + # func_xform LIBOBJ-OR-SOURCE + # --------------------------- + # Transform LIBOBJ-OR-SOURCE from a '.o' or '.c' (or otherwise) + # suffix to a '.lo' libtool-object suffix. + eval 'func_xform () + { + func_xform_result=${1%.*}.lo + }' +else + # ...otherwise fall back to using sed. + func_lo2o () + { + func_lo2o_result=`$ECHO "$1" | $SED "$lo2o"` + } + + func_xform () + { + func_xform_result=`$ECHO "$1" | $SED 's|\.[^.]*$|.lo|'` + } +fi + + +# func_fatal_configuration ARG... +# ------------------------------- +# Echo program name prefixed message to standard error, followed by +# a configuration failure hint, and exit. +func_fatal_configuration () +{ + func__fatal_error ${1+"$@"} \ + "See the $PACKAGE documentation for more information." \ + "Fatal configuration error." +} + + +# func_config +# ----------- +# Display the configuration for all the tags in this script. +func_config () +{ + re_begincf='^# ### BEGIN LIBTOOL' + re_endcf='^# ### END LIBTOOL' + + # Default configuration. + $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath" + + # Now print the configurations for the tags. + for tagname in $taglist; do + $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath" + done + + exit $? +} + + +# func_features +# ------------- +# Display the features supported by this script. +func_features () +{ + echo "host: $host" + if test yes = "$build_libtool_libs"; then + echo "enable shared libraries" + else + echo "disable shared libraries" + fi + if test yes = "$build_old_libs"; then + echo "enable static libraries" + else + echo "disable static libraries" + fi + + exit $? +} + + +# func_enable_tag TAGNAME +# ----------------------- +# Verify that TAGNAME is valid, and either flag an error and exit, or +# enable the TAGNAME tag. We also add TAGNAME to the global $taglist +# variable here. +func_enable_tag () +{ + # Global variable: + tagname=$1 + + re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$" + re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$" + sed_extractcf=/$re_begincf/,/$re_endcf/p + + # Validate tagname. + case $tagname in + *[!-_A-Za-z0-9,/]*) + func_fatal_error "invalid tag name: $tagname" + ;; + esac + + # Don't test for the "default" C tag, as we know it's + # there but not specially marked. + case $tagname in + CC) ;; + *) + if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then + taglist="$taglist $tagname" + + # Evaluate the configuration. Be careful to quote the path + # and the sed script, to avoid splitting on whitespace, but + # also don't use non-portable quotes within backquotes within + # quotes we have to do it in 2 steps: + extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` + eval "$extractedcf" + else + func_error "ignoring unknown tag $tagname" + fi + ;; + esac +} + + +# func_check_version_match +# ------------------------ +# Ensure that we are using m4 macros, and libtool script from the same +# release of libtool. +func_check_version_match () +{ + if test "$package_revision" != "$macro_revision"; then + if test "$VERSION" != "$macro_version"; then + if test -z "$macro_version"; then + cat >&2 <<_LT_EOF +$progname: Version mismatch error. This is $PACKAGE $VERSION, but the +$progname: definition of this LT_INIT comes from an older release. +$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION +$progname: and run autoconf again. +_LT_EOF + else + cat >&2 <<_LT_EOF +$progname: Version mismatch error. This is $PACKAGE $VERSION, but the +$progname: definition of this LT_INIT comes from $PACKAGE $macro_version. +$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION +$progname: and run autoconf again. +_LT_EOF + fi + else + cat >&2 <<_LT_EOF +$progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, +$progname: but the definition of this LT_INIT comes from revision $macro_revision. +$progname: You should recreate aclocal.m4 with macros from revision $package_revision +$progname: of $PACKAGE $VERSION and run autoconf again. +_LT_EOF + fi + + exit $EXIT_MISMATCH + fi +} + + +# libtool_options_prep [ARG]... +# ----------------------------- +# Preparation for options parsed by libtool. +libtool_options_prep () +{ + $debug_mode + + # Option defaults: + opt_config=false + opt_dlopen= + opt_dry_run=false + opt_help=false + opt_mode= + opt_preserve_dup_deps=false + opt_quiet=false + + nonopt= + preserve_args= + + # Shorthand for --mode=foo, only valid as the first argument + case $1 in + clean|clea|cle|cl) + shift; set dummy --mode clean ${1+"$@"}; shift + ;; + compile|compil|compi|comp|com|co|c) + shift; set dummy --mode compile ${1+"$@"}; shift + ;; + execute|execut|execu|exec|exe|ex|e) + shift; set dummy --mode execute ${1+"$@"}; shift + ;; + finish|finis|fini|fin|fi|f) + shift; set dummy --mode finish ${1+"$@"}; shift + ;; + install|instal|insta|inst|ins|in|i) + shift; set dummy --mode install ${1+"$@"}; shift + ;; + link|lin|li|l) + shift; set dummy --mode link ${1+"$@"}; shift + ;; + uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) + shift; set dummy --mode uninstall ${1+"$@"}; shift + ;; + esac + + # Pass back the list of options. + func_quote_for_eval ${1+"$@"} + libtool_options_prep_result=$func_quote_for_eval_result +} +func_add_hook func_options_prep libtool_options_prep + + +# libtool_parse_options [ARG]... +# --------------------------------- +# Provide handling for libtool specific options. +libtool_parse_options () +{ + $debug_cmd + + # Perform our own loop to consume as many options as possible in + # each iteration. + while test $# -gt 0; do + _G_opt=$1 + shift + case $_G_opt in + --dry-run|--dryrun|-n) + opt_dry_run=: + ;; + + --config) func_config ;; + + --dlopen|-dlopen) + opt_dlopen="${opt_dlopen+$opt_dlopen +}$1" + shift + ;; + + --preserve-dup-deps) + opt_preserve_dup_deps=: ;; + + --features) func_features ;; + + --finish) set dummy --mode finish ${1+"$@"}; shift ;; + + --help) opt_help=: ;; + + --help-all) opt_help=': help-all' ;; + + --mode) test $# = 0 && func_missing_arg $_G_opt && break + opt_mode=$1 + case $1 in + # Valid mode arguments: + clean|compile|execute|finish|install|link|relink|uninstall) ;; + + # Catch anything else as an error + *) func_error "invalid argument for $_G_opt" + exit_cmd=exit + break + ;; + esac + shift + ;; + + --no-silent|--no-quiet) + opt_quiet=false + func_append preserve_args " $_G_opt" + ;; + + --no-warnings|--no-warning|--no-warn) + opt_warning=false + func_append preserve_args " $_G_opt" + ;; + + --no-verbose) + opt_verbose=false + func_append preserve_args " $_G_opt" + ;; + + --silent|--quiet) + opt_quiet=: + opt_verbose=false + func_append preserve_args " $_G_opt" + ;; + + --tag) test $# = 0 && func_missing_arg $_G_opt && break + opt_tag=$1 + func_append preserve_args " $_G_opt $1" + func_enable_tag "$1" + shift + ;; + + --verbose|-v) opt_quiet=false + opt_verbose=: + func_append preserve_args " $_G_opt" + ;; + + # An option not handled by this hook function: + *) set dummy "$_G_opt" ${1+"$@"}; shift; break ;; + esac + done + + + # save modified positional parameters for caller + func_quote_for_eval ${1+"$@"} + libtool_parse_options_result=$func_quote_for_eval_result +} +func_add_hook func_parse_options libtool_parse_options + + + +# libtool_validate_options [ARG]... +# --------------------------------- +# Perform any sanity checks on option settings and/or unconsumed +# arguments. +libtool_validate_options () +{ + # save first non-option argument + if test 0 -lt $#; then + nonopt=$1 + shift + fi + + # preserve --debug + test : = "$debug_cmd" || func_append preserve_args " --debug" + + case $host in + # Solaris2 added to fix http://debbugs.gnu.org/cgi/bugreport.cgi?bug=16452 + # see also: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59788 + *cygwin* | *mingw* | *pw32* | *cegcc* | *solaris2* | *os2*) + # don't eliminate duplications in $postdeps and $predeps + opt_duplicate_compiler_generated_deps=: + ;; + *) + opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps + ;; + esac + + $opt_help || { + # Sanity checks first: + func_check_version_match + + test yes != "$build_libtool_libs" \ + && test yes != "$build_old_libs" \ + && func_fatal_configuration "not configured to build any kind of library" + + # Darwin sucks + eval std_shrext=\"$shrext_cmds\" + + # Only execute mode is allowed to have -dlopen flags. + if test -n "$opt_dlopen" && test execute != "$opt_mode"; then + func_error "unrecognized option '-dlopen'" + $ECHO "$help" 1>&2 + exit $EXIT_FAILURE + fi + + # Change the help message to a mode-specific one. + generic_help=$help + help="Try '$progname --help --mode=$opt_mode' for more information." + } + + # Pass back the unparsed argument list + func_quote_for_eval ${1+"$@"} + libtool_validate_options_result=$func_quote_for_eval_result +} +func_add_hook func_validate_options libtool_validate_options + + +# Process options as early as possible so that --help and --version +# can return quickly. +func_options ${1+"$@"} +eval set dummy "$func_options_result"; shift + + + +## ----------- ## +## Main. ## +## ----------- ## + +magic='%%%MAGIC variable%%%' +magic_exe='%%%MAGIC EXE variable%%%' + +# Global variables. +extracted_archives= +extracted_serial=0 + +# If this variable is set in any of the actions, the command in it +# will be execed at the end. This prevents here-documents from being +# left over by shells. +exec_cmd= + + +# A function that is used when there is no print builtin or printf. +func_fallback_echo () +{ + eval 'cat <<_LTECHO_EOF +$1 +_LTECHO_EOF' +} + +# func_generated_by_libtool +# True iff stdin has been generated by Libtool. This function is only +# a basic sanity check; it will hardly flush out determined imposters. +func_generated_by_libtool_p () +{ + $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 +} + +# func_lalib_p file +# True iff FILE is a libtool '.la' library or '.lo' object file. +# This function is only a basic sanity check; it will hardly flush out +# determined imposters. +func_lalib_p () +{ + test -f "$1" && + $SED -e 4q "$1" 2>/dev/null | func_generated_by_libtool_p +} + +# func_lalib_unsafe_p file +# True iff FILE is a libtool '.la' library or '.lo' object file. +# This function implements the same check as func_lalib_p without +# resorting to external programs. To this end, it redirects stdin and +# closes it afterwards, without saving the original file descriptor. +# As a safety measure, use it only where a negative result would be +# fatal anyway. Works if 'file' does not exist. +func_lalib_unsafe_p () +{ + lalib_p=no + if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then + for lalib_p_l in 1 2 3 4 + do + read lalib_p_line + case $lalib_p_line in + \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; + esac + done + exec 0<&5 5<&- + fi + test yes = "$lalib_p" +} + +# func_ltwrapper_script_p file +# True iff FILE is a libtool wrapper script +# This function is only a basic sanity check; it will hardly flush out +# determined imposters. +func_ltwrapper_script_p () +{ + test -f "$1" && + $lt_truncate_bin < "$1" 2>/dev/null | func_generated_by_libtool_p +} + +# func_ltwrapper_executable_p file +# True iff FILE is a libtool wrapper executable +# This function is only a basic sanity check; it will hardly flush out +# determined imposters. +func_ltwrapper_executable_p () +{ + func_ltwrapper_exec_suffix= + case $1 in + *.exe) ;; + *) func_ltwrapper_exec_suffix=.exe ;; + esac + $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 +} + +# func_ltwrapper_scriptname file +# Assumes file is an ltwrapper_executable +# uses $file to determine the appropriate filename for a +# temporary ltwrapper_script. +func_ltwrapper_scriptname () +{ + func_dirname_and_basename "$1" "" "." + func_stripname '' '.exe' "$func_basename_result" + func_ltwrapper_scriptname_result=$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper +} + +# func_ltwrapper_p file +# True iff FILE is a libtool wrapper script or wrapper executable +# This function is only a basic sanity check; it will hardly flush out +# determined imposters. +func_ltwrapper_p () +{ + func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" +} + + +# func_execute_cmds commands fail_cmd +# Execute tilde-delimited COMMANDS. +# If FAIL_CMD is given, eval that upon failure. +# FAIL_CMD may read-access the current command in variable CMD! +func_execute_cmds () +{ + $debug_cmd + + save_ifs=$IFS; IFS='~' + for cmd in $1; do + IFS=$sp$nl + eval cmd=\"$cmd\" + IFS=$save_ifs + func_show_eval "$cmd" "${2-:}" + done + IFS=$save_ifs +} + + +# func_source file +# Source FILE, adding directory component if necessary. +# Note that it is not necessary on cygwin/mingw to append a dot to +# FILE even if both FILE and FILE.exe exist: automatic-append-.exe +# behavior happens only for exec(3), not for open(2)! Also, sourcing +# 'FILE.' does not work on cygwin managed mounts. +func_source () +{ + $debug_cmd + + case $1 in + */* | *\\*) . "$1" ;; + *) . "./$1" ;; + esac +} + + +# func_resolve_sysroot PATH +# Replace a leading = in PATH with a sysroot. Store the result into +# func_resolve_sysroot_result +func_resolve_sysroot () +{ + func_resolve_sysroot_result=$1 + case $func_resolve_sysroot_result in + =*) + func_stripname '=' '' "$func_resolve_sysroot_result" + func_resolve_sysroot_result=$lt_sysroot$func_stripname_result + ;; + esac +} + +# func_replace_sysroot PATH +# If PATH begins with the sysroot, replace it with = and +# store the result into func_replace_sysroot_result. +func_replace_sysroot () +{ + case $lt_sysroot:$1 in + ?*:"$lt_sysroot"*) + func_stripname "$lt_sysroot" '' "$1" + func_replace_sysroot_result='='$func_stripname_result + ;; + *) + # Including no sysroot. + func_replace_sysroot_result=$1 + ;; + esac +} + +# func_infer_tag arg +# Infer tagged configuration to use if any are available and +# if one wasn't chosen via the "--tag" command line option. +# Only attempt this if the compiler in the base compile +# command doesn't match the default compiler. +# arg is usually of the form 'gcc ...' +func_infer_tag () +{ + $debug_cmd + + if test -n "$available_tags" && test -z "$tagname"; then + CC_quoted= + for arg in $CC; do + func_append_quoted CC_quoted "$arg" + done + CC_expanded=`func_echo_all $CC` + CC_quoted_expanded=`func_echo_all $CC_quoted` + case $@ in + # Blanks in the command may have been stripped by the calling shell, + # but not from the CC environment variable when configure was run. + " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ + " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;; + # Blanks at the start of $base_compile will cause this to fail + # if we don't check for them as well. + *) + for z in $available_tags; do + if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then + # Evaluate the configuration. + eval "`$SED -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" + CC_quoted= + for arg in $CC; do + # Double-quote args containing other shell metacharacters. + func_append_quoted CC_quoted "$arg" + done + CC_expanded=`func_echo_all $CC` + CC_quoted_expanded=`func_echo_all $CC_quoted` + case "$@ " in + " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ + " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) + # The compiler in the base compile command matches + # the one in the tagged configuration. + # Assume this is the tagged configuration we want. + tagname=$z + break + ;; + esac + fi + done + # If $tagname still isn't set, then no tagged configuration + # was found and let the user know that the "--tag" command + # line option must be used. + if test -z "$tagname"; then + func_echo "unable to infer tagged configuration" + func_fatal_error "specify a tag with '--tag'" +# else +# func_verbose "using $tagname tagged configuration" + fi + ;; + esac + fi +} + + + +# func_write_libtool_object output_name pic_name nonpic_name +# Create a libtool object file (analogous to a ".la" file), +# but don't create it if we're doing a dry run. +func_write_libtool_object () +{ + write_libobj=$1 + if test yes = "$build_libtool_libs"; then + write_lobj=\'$2\' + else + write_lobj=none + fi + + if test yes = "$build_old_libs"; then + write_oldobj=\'$3\' + else + write_oldobj=none + fi + + $opt_dry_run || { + cat >${write_libobj}T </dev/null` + if test "$?" -eq 0 && test -n "$func_convert_core_file_wine_to_w32_tmp"; then + func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" | + $SED -e "$sed_naive_backslashify"` + else + func_convert_core_file_wine_to_w32_result= + fi + fi +} +# end: func_convert_core_file_wine_to_w32 + + +# func_convert_core_path_wine_to_w32 ARG +# Helper function used by path conversion functions when $build is *nix, and +# $host is mingw, cygwin, or some other w32 environment. Relies on a correctly +# configured wine environment available, with the winepath program in $build's +# $PATH. Assumes ARG has no leading or trailing path separator characters. +# +# ARG is path to be converted from $build format to win32. +# Result is available in $func_convert_core_path_wine_to_w32_result. +# Unconvertible file (directory) names in ARG are skipped; if no directory names +# are convertible, then the result may be empty. +func_convert_core_path_wine_to_w32 () +{ + $debug_cmd + + # unfortunately, winepath doesn't convert paths, only file names + func_convert_core_path_wine_to_w32_result= + if test -n "$1"; then + oldIFS=$IFS + IFS=: + for func_convert_core_path_wine_to_w32_f in $1; do + IFS=$oldIFS + func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f" + if test -n "$func_convert_core_file_wine_to_w32_result"; then + if test -z "$func_convert_core_path_wine_to_w32_result"; then + func_convert_core_path_wine_to_w32_result=$func_convert_core_file_wine_to_w32_result + else + func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result" + fi + fi + done + IFS=$oldIFS + fi +} +# end: func_convert_core_path_wine_to_w32 + + +# func_cygpath ARGS... +# Wrapper around calling the cygpath program via LT_CYGPATH. This is used when +# when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2) +# $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or +# (2), returns the Cygwin file name or path in func_cygpath_result (input +# file name or path is assumed to be in w32 format, as previously converted +# from $build's *nix or MSYS format). In case (3), returns the w32 file name +# or path in func_cygpath_result (input file name or path is assumed to be in +# Cygwin format). Returns an empty string on error. +# +# ARGS are passed to cygpath, with the last one being the file name or path to +# be converted. +# +# Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH +# environment variable; do not put it in $PATH. +func_cygpath () +{ + $debug_cmd + + if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then + func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null` + if test "$?" -ne 0; then + # on failure, ensure result is empty + func_cygpath_result= + fi + else + func_cygpath_result= + func_error "LT_CYGPATH is empty or specifies non-existent file: '$LT_CYGPATH'" + fi +} +#end: func_cygpath + + +# func_convert_core_msys_to_w32 ARG +# Convert file name or path ARG from MSYS format to w32 format. Return +# result in func_convert_core_msys_to_w32_result. +func_convert_core_msys_to_w32 () +{ + $debug_cmd + + # awkward: cmd appends spaces to result + func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null | + $SED -e 's/[ ]*$//' -e "$sed_naive_backslashify"` +} +#end: func_convert_core_msys_to_w32 + + +# func_convert_file_check ARG1 ARG2 +# Verify that ARG1 (a file name in $build format) was converted to $host +# format in ARG2. Otherwise, emit an error message, but continue (resetting +# func_to_host_file_result to ARG1). +func_convert_file_check () +{ + $debug_cmd + + if test -z "$2" && test -n "$1"; then + func_error "Could not determine host file name corresponding to" + func_error " '$1'" + func_error "Continuing, but uninstalled executables may not work." + # Fallback: + func_to_host_file_result=$1 + fi +} +# end func_convert_file_check + + +# func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH +# Verify that FROM_PATH (a path in $build format) was converted to $host +# format in TO_PATH. Otherwise, emit an error message, but continue, resetting +# func_to_host_file_result to a simplistic fallback value (see below). +func_convert_path_check () +{ + $debug_cmd + + if test -z "$4" && test -n "$3"; then + func_error "Could not determine the host path corresponding to" + func_error " '$3'" + func_error "Continuing, but uninstalled executables may not work." + # Fallback. This is a deliberately simplistic "conversion" and + # should not be "improved". See libtool.info. + if test "x$1" != "x$2"; then + lt_replace_pathsep_chars="s|$1|$2|g" + func_to_host_path_result=`echo "$3" | + $SED -e "$lt_replace_pathsep_chars"` + else + func_to_host_path_result=$3 + fi + fi +} +# end func_convert_path_check + + +# func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG +# Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT +# and appending REPL if ORIG matches BACKPAT. +func_convert_path_front_back_pathsep () +{ + $debug_cmd + + case $4 in + $1 ) func_to_host_path_result=$3$func_to_host_path_result + ;; + esac + case $4 in + $2 ) func_append func_to_host_path_result "$3" + ;; + esac +} +# end func_convert_path_front_back_pathsep + + +################################################## +# $build to $host FILE NAME CONVERSION FUNCTIONS # +################################################## +# invoked via '$to_host_file_cmd ARG' +# +# In each case, ARG is the path to be converted from $build to $host format. +# Result will be available in $func_to_host_file_result. + + +# func_to_host_file ARG +# Converts the file name ARG from $build format to $host format. Return result +# in func_to_host_file_result. +func_to_host_file () +{ + $debug_cmd + + $to_host_file_cmd "$1" +} +# end func_to_host_file + + +# func_to_tool_file ARG LAZY +# converts the file name ARG from $build format to toolchain format. Return +# result in func_to_tool_file_result. If the conversion in use is listed +# in (the comma separated) LAZY, no conversion takes place. +func_to_tool_file () +{ + $debug_cmd + + case ,$2, in + *,"$to_tool_file_cmd",*) + func_to_tool_file_result=$1 + ;; + *) + $to_tool_file_cmd "$1" + func_to_tool_file_result=$func_to_host_file_result + ;; + esac +} +# end func_to_tool_file + + +# func_convert_file_noop ARG +# Copy ARG to func_to_host_file_result. +func_convert_file_noop () +{ + func_to_host_file_result=$1 +} +# end func_convert_file_noop + + +# func_convert_file_msys_to_w32 ARG +# Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic +# conversion to w32 is not available inside the cwrapper. Returns result in +# func_to_host_file_result. +func_convert_file_msys_to_w32 () +{ + $debug_cmd + + func_to_host_file_result=$1 + if test -n "$1"; then + func_convert_core_msys_to_w32 "$1" + func_to_host_file_result=$func_convert_core_msys_to_w32_result + fi + func_convert_file_check "$1" "$func_to_host_file_result" +} +# end func_convert_file_msys_to_w32 + + +# func_convert_file_cygwin_to_w32 ARG +# Convert file name ARG from Cygwin to w32 format. Returns result in +# func_to_host_file_result. +func_convert_file_cygwin_to_w32 () +{ + $debug_cmd + + func_to_host_file_result=$1 + if test -n "$1"; then + # because $build is cygwin, we call "the" cygpath in $PATH; no need to use + # LT_CYGPATH in this case. + func_to_host_file_result=`cygpath -m "$1"` + fi + func_convert_file_check "$1" "$func_to_host_file_result" +} +# end func_convert_file_cygwin_to_w32 + + +# func_convert_file_nix_to_w32 ARG +# Convert file name ARG from *nix to w32 format. Requires a wine environment +# and a working winepath. Returns result in func_to_host_file_result. +func_convert_file_nix_to_w32 () +{ + $debug_cmd + + func_to_host_file_result=$1 + if test -n "$1"; then + func_convert_core_file_wine_to_w32 "$1" + func_to_host_file_result=$func_convert_core_file_wine_to_w32_result + fi + func_convert_file_check "$1" "$func_to_host_file_result" +} +# end func_convert_file_nix_to_w32 + + +# func_convert_file_msys_to_cygwin ARG +# Convert file name ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. +# Returns result in func_to_host_file_result. +func_convert_file_msys_to_cygwin () +{ + $debug_cmd + + func_to_host_file_result=$1 + if test -n "$1"; then + func_convert_core_msys_to_w32 "$1" + func_cygpath -u "$func_convert_core_msys_to_w32_result" + func_to_host_file_result=$func_cygpath_result + fi + func_convert_file_check "$1" "$func_to_host_file_result" +} +# end func_convert_file_msys_to_cygwin + + +# func_convert_file_nix_to_cygwin ARG +# Convert file name ARG from *nix to Cygwin format. Requires Cygwin installed +# in a wine environment, working winepath, and LT_CYGPATH set. Returns result +# in func_to_host_file_result. +func_convert_file_nix_to_cygwin () +{ + $debug_cmd + + func_to_host_file_result=$1 + if test -n "$1"; then + # convert from *nix to w32, then use cygpath to convert from w32 to cygwin. + func_convert_core_file_wine_to_w32 "$1" + func_cygpath -u "$func_convert_core_file_wine_to_w32_result" + func_to_host_file_result=$func_cygpath_result + fi + func_convert_file_check "$1" "$func_to_host_file_result" +} +# end func_convert_file_nix_to_cygwin + + +############################################# +# $build to $host PATH CONVERSION FUNCTIONS # +############################################# +# invoked via '$to_host_path_cmd ARG' +# +# In each case, ARG is the path to be converted from $build to $host format. +# The result will be available in $func_to_host_path_result. +# +# Path separators are also converted from $build format to $host format. If +# ARG begins or ends with a path separator character, it is preserved (but +# converted to $host format) on output. +# +# All path conversion functions are named using the following convention: +# file name conversion function : func_convert_file_X_to_Y () +# path conversion function : func_convert_path_X_to_Y () +# where, for any given $build/$host combination the 'X_to_Y' value is the +# same. If conversion functions are added for new $build/$host combinations, +# the two new functions must follow this pattern, or func_init_to_host_path_cmd +# will break. + + +# func_init_to_host_path_cmd +# Ensures that function "pointer" variable $to_host_path_cmd is set to the +# appropriate value, based on the value of $to_host_file_cmd. +to_host_path_cmd= +func_init_to_host_path_cmd () +{ + $debug_cmd + + if test -z "$to_host_path_cmd"; then + func_stripname 'func_convert_file_' '' "$to_host_file_cmd" + to_host_path_cmd=func_convert_path_$func_stripname_result + fi +} + + +# func_to_host_path ARG +# Converts the path ARG from $build format to $host format. Return result +# in func_to_host_path_result. +func_to_host_path () +{ + $debug_cmd + + func_init_to_host_path_cmd + $to_host_path_cmd "$1" +} +# end func_to_host_path + + +# func_convert_path_noop ARG +# Copy ARG to func_to_host_path_result. +func_convert_path_noop () +{ + func_to_host_path_result=$1 +} +# end func_convert_path_noop + + +# func_convert_path_msys_to_w32 ARG +# Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic +# conversion to w32 is not available inside the cwrapper. Returns result in +# func_to_host_path_result. +func_convert_path_msys_to_w32 () +{ + $debug_cmd + + func_to_host_path_result=$1 + if test -n "$1"; then + # Remove leading and trailing path separator characters from ARG. MSYS + # behavior is inconsistent here; cygpath turns them into '.;' and ';.'; + # and winepath ignores them completely. + func_stripname : : "$1" + func_to_host_path_tmp1=$func_stripname_result + func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" + func_to_host_path_result=$func_convert_core_msys_to_w32_result + func_convert_path_check : ";" \ + "$func_to_host_path_tmp1" "$func_to_host_path_result" + func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" + fi +} +# end func_convert_path_msys_to_w32 + + +# func_convert_path_cygwin_to_w32 ARG +# Convert path ARG from Cygwin to w32 format. Returns result in +# func_to_host_file_result. +func_convert_path_cygwin_to_w32 () +{ + $debug_cmd + + func_to_host_path_result=$1 + if test -n "$1"; then + # See func_convert_path_msys_to_w32: + func_stripname : : "$1" + func_to_host_path_tmp1=$func_stripname_result + func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"` + func_convert_path_check : ";" \ + "$func_to_host_path_tmp1" "$func_to_host_path_result" + func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" + fi +} +# end func_convert_path_cygwin_to_w32 + + +# func_convert_path_nix_to_w32 ARG +# Convert path ARG from *nix to w32 format. Requires a wine environment and +# a working winepath. Returns result in func_to_host_file_result. +func_convert_path_nix_to_w32 () +{ + $debug_cmd + + func_to_host_path_result=$1 + if test -n "$1"; then + # See func_convert_path_msys_to_w32: + func_stripname : : "$1" + func_to_host_path_tmp1=$func_stripname_result + func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" + func_to_host_path_result=$func_convert_core_path_wine_to_w32_result + func_convert_path_check : ";" \ + "$func_to_host_path_tmp1" "$func_to_host_path_result" + func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" + fi +} +# end func_convert_path_nix_to_w32 + + +# func_convert_path_msys_to_cygwin ARG +# Convert path ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. +# Returns result in func_to_host_file_result. +func_convert_path_msys_to_cygwin () +{ + $debug_cmd + + func_to_host_path_result=$1 + if test -n "$1"; then + # See func_convert_path_msys_to_w32: + func_stripname : : "$1" + func_to_host_path_tmp1=$func_stripname_result + func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" + func_cygpath -u -p "$func_convert_core_msys_to_w32_result" + func_to_host_path_result=$func_cygpath_result + func_convert_path_check : : \ + "$func_to_host_path_tmp1" "$func_to_host_path_result" + func_convert_path_front_back_pathsep ":*" "*:" : "$1" + fi +} +# end func_convert_path_msys_to_cygwin + + +# func_convert_path_nix_to_cygwin ARG +# Convert path ARG from *nix to Cygwin format. Requires Cygwin installed in a +# a wine environment, working winepath, and LT_CYGPATH set. Returns result in +# func_to_host_file_result. +func_convert_path_nix_to_cygwin () +{ + $debug_cmd + + func_to_host_path_result=$1 + if test -n "$1"; then + # Remove leading and trailing path separator characters from + # ARG. msys behavior is inconsistent here, cygpath turns them + # into '.;' and ';.', and winepath ignores them completely. + func_stripname : : "$1" + func_to_host_path_tmp1=$func_stripname_result + func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" + func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result" + func_to_host_path_result=$func_cygpath_result + func_convert_path_check : : \ + "$func_to_host_path_tmp1" "$func_to_host_path_result" + func_convert_path_front_back_pathsep ":*" "*:" : "$1" + fi +} +# end func_convert_path_nix_to_cygwin + + +# func_dll_def_p FILE +# True iff FILE is a Windows DLL '.def' file. +# Keep in sync with _LT_DLL_DEF_P in libtool.m4 +func_dll_def_p () +{ + $debug_cmd + + func_dll_def_p_tmp=`$SED -n \ + -e 's/^[ ]*//' \ + -e '/^\(;.*\)*$/d' \ + -e 's/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p' \ + -e q \ + "$1"` + test DEF = "$func_dll_def_p_tmp" +} + + +# func_mode_compile arg... +func_mode_compile () +{ + $debug_cmd + + # Get the compilation command and the source file. + base_compile= + srcfile=$nonopt # always keep a non-empty value in "srcfile" + suppress_opt=yes + suppress_output= + arg_mode=normal + libobj= + later= + pie_flag= + + for arg + do + case $arg_mode in + arg ) + # do not "continue". Instead, add this to base_compile + lastarg=$arg + arg_mode=normal + ;; + + target ) + libobj=$arg + arg_mode=normal + continue + ;; + + normal ) + # Accept any command-line options. + case $arg in + -o) + test -n "$libobj" && \ + func_fatal_error "you cannot specify '-o' more than once" + arg_mode=target + continue + ;; + + -pie | -fpie | -fPIE) + func_append pie_flag " $arg" + continue + ;; + + -shared | -static | -prefer-pic | -prefer-non-pic) + func_append later " $arg" + continue + ;; + + -no-suppress) + suppress_opt=no + continue + ;; + + -Xcompiler) + arg_mode=arg # the next one goes into the "base_compile" arg list + continue # The current "srcfile" will either be retained or + ;; # replaced later. I would guess that would be a bug. + + -Wc,*) + func_stripname '-Wc,' '' "$arg" + args=$func_stripname_result + lastarg= + save_ifs=$IFS; IFS=, + for arg in $args; do + IFS=$save_ifs + func_append_quoted lastarg "$arg" + done + IFS=$save_ifs + func_stripname ' ' '' "$lastarg" + lastarg=$func_stripname_result + + # Add the arguments to base_compile. + func_append base_compile " $lastarg" + continue + ;; + + *) + # Accept the current argument as the source file. + # The previous "srcfile" becomes the current argument. + # + lastarg=$srcfile + srcfile=$arg + ;; + esac # case $arg + ;; + esac # case $arg_mode + + # Aesthetically quote the previous argument. + func_append_quoted base_compile "$lastarg" + done # for arg + + case $arg_mode in + arg) + func_fatal_error "you must specify an argument for -Xcompile" + ;; + target) + func_fatal_error "you must specify a target with '-o'" + ;; + *) + # Get the name of the library object. + test -z "$libobj" && { + func_basename "$srcfile" + libobj=$func_basename_result + } + ;; + esac + + # Recognize several different file suffixes. + # If the user specifies -o file.o, it is replaced with file.lo + case $libobj in + *.[cCFSifmso] | \ + *.ada | *.adb | *.ads | *.asm | \ + *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \ + *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup) + func_xform "$libobj" + libobj=$func_xform_result + ;; + esac + + case $libobj in + *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;; + *) + func_fatal_error "cannot determine name of library object from '$libobj'" + ;; + esac + + func_infer_tag $base_compile + + for arg in $later; do + case $arg in + -shared) + test yes = "$build_libtool_libs" \ + || func_fatal_configuration "cannot build a shared library" + build_old_libs=no + continue + ;; + + -static) + build_libtool_libs=no + build_old_libs=yes + continue + ;; + + -prefer-pic) + pic_mode=yes + continue + ;; + + -prefer-non-pic) + pic_mode=no + continue + ;; + esac + done + + func_quote_for_eval "$libobj" + test "X$libobj" != "X$func_quote_for_eval_result" \ + && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \ + && func_warning "libobj name '$libobj' may not contain shell special characters." + func_dirname_and_basename "$obj" "/" "" + objname=$func_basename_result + xdir=$func_dirname_result + lobj=$xdir$objdir/$objname + + test -z "$base_compile" && \ + func_fatal_help "you must specify a compilation command" + + # Delete any leftover library objects. + if test yes = "$build_old_libs"; then + removelist="$obj $lobj $libobj ${libobj}T" + else + removelist="$lobj $libobj ${libobj}T" + fi + + # On Cygwin there's no "real" PIC flag so we must build both object types + case $host_os in + cygwin* | mingw* | pw32* | os2* | cegcc*) + pic_mode=default + ;; + esac + if test no = "$pic_mode" && test pass_all != "$deplibs_check_method"; then + # non-PIC code in shared libraries is not supported + pic_mode=default + fi + + # Calculate the filename of the output object if compiler does + # not support -o with -c + if test no = "$compiler_c_o"; then + output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.$objext + lockfile=$output_obj.lock + else + output_obj= + need_locks=no + lockfile= + fi + + # Lock this critical section if it is needed + # We use this script file to make the link, it avoids creating a new file + if test yes = "$need_locks"; then + until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do + func_echo "Waiting for $lockfile to be removed" + sleep 2 + done + elif test warn = "$need_locks"; then + if test -f "$lockfile"; then + $ECHO "\ +*** ERROR, $lockfile exists and contains: +`cat $lockfile 2>/dev/null` + +This indicates that another process is trying to use the same +temporary object file, and libtool could not work around it because +your compiler does not support '-c' and '-o' together. If you +repeat this compilation, it may succeed, by chance, but you had better +avoid parallel builds (make -j) in this platform, or get a better +compiler." + + $opt_dry_run || $RM $removelist + exit $EXIT_FAILURE + fi + func_append removelist " $output_obj" + $ECHO "$srcfile" > "$lockfile" + fi + + $opt_dry_run || $RM $removelist + func_append removelist " $lockfile" + trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 + + func_to_tool_file "$srcfile" func_convert_file_msys_to_w32 + srcfile=$func_to_tool_file_result + func_quote_for_eval "$srcfile" + qsrcfile=$func_quote_for_eval_result + + # Only build a PIC object if we are building libtool libraries. + if test yes = "$build_libtool_libs"; then + # Without this assignment, base_compile gets emptied. + fbsd_hideous_sh_bug=$base_compile + + if test no != "$pic_mode"; then + command="$base_compile $qsrcfile $pic_flag" + else + # Don't build PIC code + command="$base_compile $qsrcfile" + fi + + func_mkdir_p "$xdir$objdir" + + if test -z "$output_obj"; then + # Place PIC objects in $objdir + func_append command " -o $lobj" + fi + + func_show_eval_locale "$command" \ + 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' + + if test warn = "$need_locks" && + test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then + $ECHO "\ +*** ERROR, $lockfile contains: +`cat $lockfile 2>/dev/null` + +but it should contain: +$srcfile + +This indicates that another process is trying to use the same +temporary object file, and libtool could not work around it because +your compiler does not support '-c' and '-o' together. If you +repeat this compilation, it may succeed, by chance, but you had better +avoid parallel builds (make -j) in this platform, or get a better +compiler." + + $opt_dry_run || $RM $removelist + exit $EXIT_FAILURE + fi + + # Just move the object if needed, then go on to compile the next one + if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then + func_show_eval '$MV "$output_obj" "$lobj"' \ + 'error=$?; $opt_dry_run || $RM $removelist; exit $error' + fi + + # Allow error messages only from the first compilation. + if test yes = "$suppress_opt"; then + suppress_output=' >/dev/null 2>&1' + fi + fi + + # Only build a position-dependent object if we build old libraries. + if test yes = "$build_old_libs"; then + if test yes != "$pic_mode"; then + # Don't build PIC code + command="$base_compile $qsrcfile$pie_flag" + else + command="$base_compile $qsrcfile $pic_flag" + fi + if test yes = "$compiler_c_o"; then + func_append command " -o $obj" + fi + + # Suppress compiler output if we already did a PIC compilation. + func_append command "$suppress_output" + func_show_eval_locale "$command" \ + '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' + + if test warn = "$need_locks" && + test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then + $ECHO "\ +*** ERROR, $lockfile contains: +`cat $lockfile 2>/dev/null` + +but it should contain: +$srcfile + +This indicates that another process is trying to use the same +temporary object file, and libtool could not work around it because +your compiler does not support '-c' and '-o' together. If you +repeat this compilation, it may succeed, by chance, but you had better +avoid parallel builds (make -j) in this platform, or get a better +compiler." + + $opt_dry_run || $RM $removelist + exit $EXIT_FAILURE + fi + + # Just move the object if needed + if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then + func_show_eval '$MV "$output_obj" "$obj"' \ + 'error=$?; $opt_dry_run || $RM $removelist; exit $error' + fi + fi + + $opt_dry_run || { + func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" + + # Unlock the critical section if it was locked + if test no != "$need_locks"; then + removelist=$lockfile + $RM "$lockfile" + fi + } + + exit $EXIT_SUCCESS +} + +$opt_help || { + test compile = "$opt_mode" && func_mode_compile ${1+"$@"} +} + +func_mode_help () +{ + # We need to display help for each of the modes. + case $opt_mode in + "") + # Generic help is extracted from the usage comments + # at the start of this file. + func_help + ;; + + clean) + $ECHO \ +"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... + +Remove files from the build directory. + +RM is the name of the program to use to delete files associated with each FILE +(typically '/bin/rm'). RM-OPTIONS are options (such as '-f') to be passed +to RM. + +If FILE is a libtool library, object or program, all the files associated +with it are deleted. Otherwise, only FILE itself is deleted using RM." + ;; + + compile) + $ECHO \ +"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE + +Compile a source file into a libtool library object. + +This mode accepts the following additional options: + + -o OUTPUT-FILE set the output file name to OUTPUT-FILE + -no-suppress do not suppress compiler output for multiple passes + -prefer-pic try to build PIC objects only + -prefer-non-pic try to build non-PIC objects only + -shared do not build a '.o' file suitable for static linking + -static only build a '.o' file suitable for static linking + -Wc,FLAG pass FLAG directly to the compiler + +COMPILE-COMMAND is a command to be used in creating a 'standard' object file +from the given SOURCEFILE. + +The output file name is determined by removing the directory component from +SOURCEFILE, then substituting the C source code suffix '.c' with the +library object suffix, '.lo'." + ;; + + execute) + $ECHO \ +"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... + +Automatically set library path, then run a program. + +This mode accepts the following additional options: + + -dlopen FILE add the directory containing FILE to the library path + +This mode sets the library path environment variable according to '-dlopen' +flags. + +If any of the ARGS are libtool executable wrappers, then they are translated +into their corresponding uninstalled binary, and any of their required library +directories are added to the library path. + +Then, COMMAND is executed, with ARGS as arguments." + ;; + + finish) + $ECHO \ +"Usage: $progname [OPTION]... --mode=finish [LIBDIR]... + +Complete the installation of libtool libraries. + +Each LIBDIR is a directory that contains libtool libraries. + +The commands that this mode executes may require superuser privileges. Use +the '--dry-run' option if you just want to see what would be executed." + ;; + + install) + $ECHO \ +"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... + +Install executables or libraries. + +INSTALL-COMMAND is the installation command. The first component should be +either the 'install' or 'cp' program. + +The following components of INSTALL-COMMAND are treated specially: + + -inst-prefix-dir PREFIX-DIR Use PREFIX-DIR as a staging area for installation + +The rest of the components are interpreted as arguments to that command (only +BSD-compatible install options are recognized)." + ;; + + link) + $ECHO \ +"Usage: $progname [OPTION]... --mode=link LINK-COMMAND... + +Link object files or libraries together to form another library, or to +create an executable program. + +LINK-COMMAND is a command using the C compiler that you would use to create +a program from several object files. + +The following components of LINK-COMMAND are treated specially: + + -all-static do not do any dynamic linking at all + -avoid-version do not add a version suffix if possible + -bindir BINDIR specify path to binaries directory (for systems where + libraries must be found in the PATH setting at runtime) + -dlopen FILE '-dlpreopen' FILE if it cannot be dlopened at runtime + -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols + -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) + -export-symbols SYMFILE + try to export only the symbols listed in SYMFILE + -export-symbols-regex REGEX + try to export only the symbols matching REGEX + -LLIBDIR search LIBDIR for required installed libraries + -lNAME OUTPUT-FILE requires the installed library libNAME + -module build a library that can dlopened + -no-fast-install disable the fast-install mode + -no-install link a not-installable executable + -no-undefined declare that a library does not refer to external symbols + -o OUTPUT-FILE create OUTPUT-FILE from the specified objects + -objectlist FILE use a list of object files found in FILE to specify objects + -os2dllname NAME force a short DLL name on OS/2 (no effect on other OSes) + -precious-files-regex REGEX + don't remove output files matching REGEX + -release RELEASE specify package release information + -rpath LIBDIR the created library will eventually be installed in LIBDIR + -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries + -shared only do dynamic linking of libtool libraries + -shrext SUFFIX override the standard shared library file extension + -static do not do any dynamic linking of uninstalled libtool libraries + -static-libtool-libs + do not do any dynamic linking of libtool libraries + -version-info CURRENT[:REVISION[:AGE]] + specify library version info [each variable defaults to 0] + -weak LIBNAME declare that the target provides the LIBNAME interface + -Wc,FLAG + -Xcompiler FLAG pass linker-specific FLAG directly to the compiler + -Wl,FLAG + -Xlinker FLAG pass linker-specific FLAG directly to the linker + -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC) + +All other options (arguments beginning with '-') are ignored. + +Every other argument is treated as a filename. Files ending in '.la' are +treated as uninstalled libtool libraries, other files are standard or library +object files. + +If the OUTPUT-FILE ends in '.la', then a libtool library is created, +only library objects ('.lo' files) may be specified, and '-rpath' is +required, except when creating a convenience library. + +If OUTPUT-FILE ends in '.a' or '.lib', then a standard library is created +using 'ar' and 'ranlib', or on Windows using 'lib'. + +If OUTPUT-FILE ends in '.lo' or '.$objext', then a reloadable object file +is created, otherwise an executable program is created." + ;; + + uninstall) + $ECHO \ +"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... + +Remove libraries from an installation directory. + +RM is the name of the program to use to delete files associated with each FILE +(typically '/bin/rm'). RM-OPTIONS are options (such as '-f') to be passed +to RM. + +If FILE is a libtool library, all the files associated with it are deleted. +Otherwise, only FILE itself is deleted using RM." + ;; + + *) + func_fatal_help "invalid operation mode '$opt_mode'" + ;; + esac + + echo + $ECHO "Try '$progname --help' for more information about other modes." +} + +# Now that we've collected a possible --mode arg, show help if necessary +if $opt_help; then + if test : = "$opt_help"; then + func_mode_help + else + { + func_help noexit + for opt_mode in compile link execute install finish uninstall clean; do + func_mode_help + done + } | $SED -n '1p; 2,$s/^Usage:/ or: /p' + { + func_help noexit + for opt_mode in compile link execute install finish uninstall clean; do + echo + func_mode_help + done + } | + $SED '1d + /^When reporting/,/^Report/{ + H + d + } + $x + /information about other modes/d + /more detailed .*MODE/d + s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/' + fi + exit $? +fi + + +# func_mode_execute arg... +func_mode_execute () +{ + $debug_cmd + + # The first argument is the command name. + cmd=$nonopt + test -z "$cmd" && \ + func_fatal_help "you must specify a COMMAND" + + # Handle -dlopen flags immediately. + for file in $opt_dlopen; do + test -f "$file" \ + || func_fatal_help "'$file' is not a file" + + dir= + case $file in + *.la) + func_resolve_sysroot "$file" + file=$func_resolve_sysroot_result + + # Check to see that this really is a libtool archive. + func_lalib_unsafe_p "$file" \ + || func_fatal_help "'$lib' is not a valid libtool archive" + + # Read the libtool library. + dlname= + library_names= + func_source "$file" + + # Skip this library if it cannot be dlopened. + if test -z "$dlname"; then + # Warn if it was a shared library. + test -n "$library_names" && \ + func_warning "'$file' was not linked with '-export-dynamic'" + continue + fi + + func_dirname "$file" "" "." + dir=$func_dirname_result + + if test -f "$dir/$objdir/$dlname"; then + func_append dir "/$objdir" + else + if test ! -f "$dir/$dlname"; then + func_fatal_error "cannot find '$dlname' in '$dir' or '$dir/$objdir'" + fi + fi + ;; + + *.lo) + # Just add the directory containing the .lo file. + func_dirname "$file" "" "." + dir=$func_dirname_result + ;; + + *) + func_warning "'-dlopen' is ignored for non-libtool libraries and objects" + continue + ;; + esac + + # Get the absolute pathname. + absdir=`cd "$dir" && pwd` + test -n "$absdir" && dir=$absdir + + # Now add the directory to shlibpath_var. + if eval "test -z \"\$$shlibpath_var\""; then + eval "$shlibpath_var=\"\$dir\"" + else + eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" + fi + done + + # This variable tells wrapper scripts just to set shlibpath_var + # rather than running their programs. + libtool_execute_magic=$magic + + # Check if any of the arguments is a wrapper script. + args= + for file + do + case $file in + -* | *.la | *.lo ) ;; + *) + # Do a test to see if this is really a libtool program. + if func_ltwrapper_script_p "$file"; then + func_source "$file" + # Transform arg to wrapped name. + file=$progdir/$program + elif func_ltwrapper_executable_p "$file"; then + func_ltwrapper_scriptname "$file" + func_source "$func_ltwrapper_scriptname_result" + # Transform arg to wrapped name. + file=$progdir/$program + fi + ;; + esac + # Quote arguments (to preserve shell metacharacters). + func_append_quoted args "$file" + done + + if $opt_dry_run; then + # Display what would be done. + if test -n "$shlibpath_var"; then + eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" + echo "export $shlibpath_var" + fi + $ECHO "$cmd$args" + exit $EXIT_SUCCESS + else + if test -n "$shlibpath_var"; then + # Export the shlibpath_var. + eval "export $shlibpath_var" + fi + + # Restore saved environment variables + for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES + do + eval "if test \"\${save_$lt_var+set}\" = set; then + $lt_var=\$save_$lt_var; export $lt_var + else + $lt_unset $lt_var + fi" + done + + # Now prepare to actually exec the command. + exec_cmd=\$cmd$args + fi +} + +test execute = "$opt_mode" && func_mode_execute ${1+"$@"} + + +# func_mode_finish arg... +func_mode_finish () +{ + $debug_cmd + + libs= + libdirs= + admincmds= + + for opt in "$nonopt" ${1+"$@"} + do + if test -d "$opt"; then + func_append libdirs " $opt" + + elif test -f "$opt"; then + if func_lalib_unsafe_p "$opt"; then + func_append libs " $opt" + else + func_warning "'$opt' is not a valid libtool archive" + fi + + else + func_fatal_error "invalid argument '$opt'" + fi + done + + if test -n "$libs"; then + if test -n "$lt_sysroot"; then + sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"` + sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;" + else + sysroot_cmd= + fi + + # Remove sysroot references + if $opt_dry_run; then + for lib in $libs; do + echo "removing references to $lt_sysroot and '=' prefixes from $lib" + done + else + tmpdir=`func_mktempdir` + for lib in $libs; do + $SED -e "$sysroot_cmd s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \ + > $tmpdir/tmp-la + mv -f $tmpdir/tmp-la $lib + done + ${RM}r "$tmpdir" + fi + fi + + if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then + for libdir in $libdirs; do + if test -n "$finish_cmds"; then + # Do each command in the finish commands. + func_execute_cmds "$finish_cmds" 'admincmds="$admincmds +'"$cmd"'"' + fi + if test -n "$finish_eval"; then + # Do the single finish_eval. + eval cmds=\"$finish_eval\" + $opt_dry_run || eval "$cmds" || func_append admincmds " + $cmds" + fi + done + fi + + # Exit here if they wanted silent mode. + $opt_quiet && exit $EXIT_SUCCESS + + if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then + echo "----------------------------------------------------------------------" + echo "Libraries have been installed in:" + for libdir in $libdirs; do + $ECHO " $libdir" + done + echo + echo "If you ever happen to want to link against installed libraries" + echo "in a given directory, LIBDIR, you must either use libtool, and" + echo "specify the full pathname of the library, or use the '-LLIBDIR'" + echo "flag during linking and do at least one of the following:" + if test -n "$shlibpath_var"; then + echo " - add LIBDIR to the '$shlibpath_var' environment variable" + echo " during execution" + fi + if test -n "$runpath_var"; then + echo " - add LIBDIR to the '$runpath_var' environment variable" + echo " during linking" + fi + if test -n "$hardcode_libdir_flag_spec"; then + libdir=LIBDIR + eval flag=\"$hardcode_libdir_flag_spec\" + + $ECHO " - use the '$flag' linker flag" + fi + if test -n "$admincmds"; then + $ECHO " - have your system administrator run these commands:$admincmds" + fi + if test -f /etc/ld.so.conf; then + echo " - have your system administrator add LIBDIR to '/etc/ld.so.conf'" + fi + echo + + echo "See any operating system documentation about shared libraries for" + case $host in + solaris2.[6789]|solaris2.1[0-9]) + echo "more information, such as the ld(1), crle(1) and ld.so(8) manual" + echo "pages." + ;; + *) + echo "more information, such as the ld(1) and ld.so(8) manual pages." + ;; + esac + echo "----------------------------------------------------------------------" + fi + exit $EXIT_SUCCESS +} + +test finish = "$opt_mode" && func_mode_finish ${1+"$@"} + + +# func_mode_install arg... +func_mode_install () +{ + $debug_cmd + + # There may be an optional sh(1) argument at the beginning of + # install_prog (especially on Windows NT). + if test "$SHELL" = "$nonopt" || test /bin/sh = "$nonopt" || + # Allow the use of GNU shtool's install command. + case $nonopt in *shtool*) :;; *) false;; esac + then + # Aesthetically quote it. + func_quote_for_eval "$nonopt" + install_prog="$func_quote_for_eval_result " + arg=$1 + shift + else + install_prog= + arg=$nonopt + fi + + # The real first argument should be the name of the installation program. + # Aesthetically quote it. + func_quote_for_eval "$arg" + func_append install_prog "$func_quote_for_eval_result" + install_shared_prog=$install_prog + case " $install_prog " in + *[\\\ /]cp\ *) install_cp=: ;; + *) install_cp=false ;; + esac + + # We need to accept at least all the BSD install flags. + dest= + files= + opts= + prev= + install_type= + isdir=false + stripme= + no_mode=: + for arg + do + arg2= + if test -n "$dest"; then + func_append files " $dest" + dest=$arg + continue + fi + + case $arg in + -d) isdir=: ;; + -f) + if $install_cp; then :; else + prev=$arg + fi + ;; + -g | -m | -o) + prev=$arg + ;; + -s) + stripme=" -s" + continue + ;; + -*) + ;; + *) + # If the previous option needed an argument, then skip it. + if test -n "$prev"; then + if test X-m = "X$prev" && test -n "$install_override_mode"; then + arg2=$install_override_mode + no_mode=false + fi + prev= + else + dest=$arg + continue + fi + ;; + esac + + # Aesthetically quote the argument. + func_quote_for_eval "$arg" + func_append install_prog " $func_quote_for_eval_result" + if test -n "$arg2"; then + func_quote_for_eval "$arg2" + fi + func_append install_shared_prog " $func_quote_for_eval_result" + done + + test -z "$install_prog" && \ + func_fatal_help "you must specify an install program" + + test -n "$prev" && \ + func_fatal_help "the '$prev' option requires an argument" + + if test -n "$install_override_mode" && $no_mode; then + if $install_cp; then :; else + func_quote_for_eval "$install_override_mode" + func_append install_shared_prog " -m $func_quote_for_eval_result" + fi + fi + + if test -z "$files"; then + if test -z "$dest"; then + func_fatal_help "no file or destination specified" + else + func_fatal_help "you must specify a destination" + fi + fi + + # Strip any trailing slash from the destination. + func_stripname '' '/' "$dest" + dest=$func_stripname_result + + # Check to see that the destination is a directory. + test -d "$dest" && isdir=: + if $isdir; then + destdir=$dest + destname= + else + func_dirname_and_basename "$dest" "" "." + destdir=$func_dirname_result + destname=$func_basename_result + + # Not a directory, so check to see that there is only one file specified. + set dummy $files; shift + test "$#" -gt 1 && \ + func_fatal_help "'$dest' is not a directory" + fi + case $destdir in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + for file in $files; do + case $file in + *.lo) ;; + *) + func_fatal_help "'$destdir' must be an absolute directory name" + ;; + esac + done + ;; + esac + + # This variable tells wrapper scripts just to set variables rather + # than running their programs. + libtool_install_magic=$magic + + staticlibs= + future_libdirs= + current_libdirs= + for file in $files; do + + # Do each installation. + case $file in + *.$libext) + # Do the static libraries later. + func_append staticlibs " $file" + ;; + + *.la) + func_resolve_sysroot "$file" + file=$func_resolve_sysroot_result + + # Check to see that this really is a libtool archive. + func_lalib_unsafe_p "$file" \ + || func_fatal_help "'$file' is not a valid libtool archive" + + library_names= + old_library= + relink_command= + func_source "$file" + + # Add the libdir to current_libdirs if it is the destination. + if test "X$destdir" = "X$libdir"; then + case "$current_libdirs " in + *" $libdir "*) ;; + *) func_append current_libdirs " $libdir" ;; + esac + else + # Note the libdir as a future libdir. + case "$future_libdirs " in + *" $libdir "*) ;; + *) func_append future_libdirs " $libdir" ;; + esac + fi + + func_dirname "$file" "/" "" + dir=$func_dirname_result + func_append dir "$objdir" + + if test -n "$relink_command"; then + # Determine the prefix the user has applied to our future dir. + inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"` + + # Don't allow the user to place us outside of our expected + # location b/c this prevents finding dependent libraries that + # are installed to the same prefix. + # At present, this check doesn't affect windows .dll's that + # are installed into $libdir/../bin (currently, that works fine) + # but it's something to keep an eye on. + test "$inst_prefix_dir" = "$destdir" && \ + func_fatal_error "error: cannot install '$file' to a directory not ending in $libdir" + + if test -n "$inst_prefix_dir"; then + # Stick the inst_prefix_dir data into the link command. + relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` + else + relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"` + fi + + func_warning "relinking '$file'" + func_show_eval "$relink_command" \ + 'func_fatal_error "error: relink '\''$file'\'' with the above command before installing it"' + fi + + # See the names of the shared library. + set dummy $library_names; shift + if test -n "$1"; then + realname=$1 + shift + + srcname=$realname + test -n "$relink_command" && srcname=${realname}T + + # Install the shared library and build the symlinks. + func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \ + 'exit $?' + tstripme=$stripme + case $host_os in + cygwin* | mingw* | pw32* | cegcc*) + case $realname in + *.dll.a) + tstripme= + ;; + esac + ;; + os2*) + case $realname in + *_dll.a) + tstripme= + ;; + esac + ;; + esac + if test -n "$tstripme" && test -n "$striplib"; then + func_show_eval "$striplib $destdir/$realname" 'exit $?' + fi + + if test "$#" -gt 0; then + # Delete the old symlinks, and create new ones. + # Try 'ln -sf' first, because the 'ln' binary might depend on + # the symlink we replace! Solaris /bin/ln does not understand -f, + # so we also need to try rm && ln -s. + for linkname + do + test "$linkname" != "$realname" \ + && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" + done + fi + + # Do each command in the postinstall commands. + lib=$destdir/$realname + func_execute_cmds "$postinstall_cmds" 'exit $?' + fi + + # Install the pseudo-library for information purposes. + func_basename "$file" + name=$func_basename_result + instname=$dir/${name}i + func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' + + # Maybe install the static library, too. + test -n "$old_library" && func_append staticlibs " $dir/$old_library" + ;; + + *.lo) + # Install (i.e. copy) a libtool object. + + # Figure out destination file name, if it wasn't already specified. + if test -n "$destname"; then + destfile=$destdir/$destname + else + func_basename "$file" + destfile=$func_basename_result + destfile=$destdir/$destfile + fi + + # Deduce the name of the destination old-style object file. + case $destfile in + *.lo) + func_lo2o "$destfile" + staticdest=$func_lo2o_result + ;; + *.$objext) + staticdest=$destfile + destfile= + ;; + *) + func_fatal_help "cannot copy a libtool object to '$destfile'" + ;; + esac + + # Install the libtool object if requested. + test -n "$destfile" && \ + func_show_eval "$install_prog $file $destfile" 'exit $?' + + # Install the old object if enabled. + if test yes = "$build_old_libs"; then + # Deduce the name of the old-style object file. + func_lo2o "$file" + staticobj=$func_lo2o_result + func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' + fi + exit $EXIT_SUCCESS + ;; + + *) + # Figure out destination file name, if it wasn't already specified. + if test -n "$destname"; then + destfile=$destdir/$destname + else + func_basename "$file" + destfile=$func_basename_result + destfile=$destdir/$destfile + fi + + # If the file is missing, and there is a .exe on the end, strip it + # because it is most likely a libtool script we actually want to + # install + stripped_ext= + case $file in + *.exe) + if test ! -f "$file"; then + func_stripname '' '.exe' "$file" + file=$func_stripname_result + stripped_ext=.exe + fi + ;; + esac + + # Do a test to see if this is really a libtool program. + case $host in + *cygwin* | *mingw*) + if func_ltwrapper_executable_p "$file"; then + func_ltwrapper_scriptname "$file" + wrapper=$func_ltwrapper_scriptname_result + else + func_stripname '' '.exe' "$file" + wrapper=$func_stripname_result + fi + ;; + *) + wrapper=$file + ;; + esac + if func_ltwrapper_script_p "$wrapper"; then + notinst_deplibs= + relink_command= + + func_source "$wrapper" + + # Check the variables that should have been set. + test -z "$generated_by_libtool_version" && \ + func_fatal_error "invalid libtool wrapper script '$wrapper'" + + finalize=: + for lib in $notinst_deplibs; do + # Check to see that each library is installed. + libdir= + if test -f "$lib"; then + func_source "$lib" + fi + libfile=$libdir/`$ECHO "$lib" | $SED 's%^.*/%%g'` + if test -n "$libdir" && test ! -f "$libfile"; then + func_warning "'$lib' has not been installed in '$libdir'" + finalize=false + fi + done + + relink_command= + func_source "$wrapper" + + outputname= + if test no = "$fast_install" && test -n "$relink_command"; then + $opt_dry_run || { + if $finalize; then + tmpdir=`func_mktempdir` + func_basename "$file$stripped_ext" + file=$func_basename_result + outputname=$tmpdir/$file + # Replace the output file specification. + relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'` + + $opt_quiet || { + func_quote_for_expand "$relink_command" + eval "func_echo $func_quote_for_expand_result" + } + if eval "$relink_command"; then : + else + func_error "error: relink '$file' with the above command before installing it" + $opt_dry_run || ${RM}r "$tmpdir" + continue + fi + file=$outputname + else + func_warning "cannot relink '$file'" + fi + } + else + # Install the binary that we compiled earlier. + file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"` + fi + fi + + # remove .exe since cygwin /usr/bin/install will append another + # one anyway + case $install_prog,$host in + */usr/bin/install*,*cygwin*) + case $file:$destfile in + *.exe:*.exe) + # this is ok + ;; + *.exe:*) + destfile=$destfile.exe + ;; + *:*.exe) + func_stripname '' '.exe' "$destfile" + destfile=$func_stripname_result + ;; + esac + ;; + esac + func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' + $opt_dry_run || if test -n "$outputname"; then + ${RM}r "$tmpdir" + fi + ;; + esac + done + + for file in $staticlibs; do + func_basename "$file" + name=$func_basename_result + + # Set up the ranlib parameters. + oldlib=$destdir/$name + func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 + tool_oldlib=$func_to_tool_file_result + + func_show_eval "$install_prog \$file \$oldlib" 'exit $?' + + if test -n "$stripme" && test -n "$old_striplib"; then + func_show_eval "$old_striplib $tool_oldlib" 'exit $?' + fi + + # Do each command in the postinstall commands. + func_execute_cmds "$old_postinstall_cmds" 'exit $?' + done + + test -n "$future_libdirs" && \ + func_warning "remember to run '$progname --finish$future_libdirs'" + + if test -n "$current_libdirs"; then + # Maybe just do a dry run. + $opt_dry_run && current_libdirs=" -n$current_libdirs" + exec_cmd='$SHELL "$progpath" $preserve_args --finish$current_libdirs' + else + exit $EXIT_SUCCESS + fi +} + +test install = "$opt_mode" && func_mode_install ${1+"$@"} + + +# func_generate_dlsyms outputname originator pic_p +# Extract symbols from dlprefiles and create ${outputname}S.o with +# a dlpreopen symbol table. +func_generate_dlsyms () +{ + $debug_cmd + + my_outputname=$1 + my_originator=$2 + my_pic_p=${3-false} + my_prefix=`$ECHO "$my_originator" | $SED 's%[^a-zA-Z0-9]%_%g'` + my_dlsyms= + + if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then + if test -n "$NM" && test -n "$global_symbol_pipe"; then + my_dlsyms=${my_outputname}S.c + else + func_error "not configured to extract global symbols from dlpreopened files" + fi + fi + + if test -n "$my_dlsyms"; then + case $my_dlsyms in + "") ;; + *.c) + # Discover the nlist of each of the dlfiles. + nlist=$output_objdir/$my_outputname.nm + + func_show_eval "$RM $nlist ${nlist}S ${nlist}T" + + # Parse the name list into a source file. + func_verbose "creating $output_objdir/$my_dlsyms" + + $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ +/* $my_dlsyms - symbol resolution table for '$my_outputname' dlsym emulation. */ +/* Generated by $PROGRAM (GNU $PACKAGE) $VERSION */ + +#ifdef __cplusplus +extern \"C\" { +#endif + +#if defined __GNUC__ && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4)) +#pragma GCC diagnostic ignored \"-Wstrict-prototypes\" +#endif + +/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ +#if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE +/* DATA imports from DLLs on WIN32 can't be const, because runtime + relocations are performed -- see ld's documentation on pseudo-relocs. */ +# define LT_DLSYM_CONST +#elif defined __osf__ +/* This system does not cope well with relocations in const data. */ +# define LT_DLSYM_CONST +#else +# define LT_DLSYM_CONST const +#endif + +#define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0) + +/* External symbol declarations for the compiler. */\ +" + + if test yes = "$dlself"; then + func_verbose "generating symbol list for '$output'" + + $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" + + # Add our own program objects to the symbol list. + progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP` + for progfile in $progfiles; do + func_to_tool_file "$progfile" func_convert_file_msys_to_w32 + func_verbose "extracting global C symbols from '$func_to_tool_file_result'" + $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'" + done + + if test -n "$exclude_expsyms"; then + $opt_dry_run || { + eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' + eval '$MV "$nlist"T "$nlist"' + } + fi + + if test -n "$export_symbols_regex"; then + $opt_dry_run || { + eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' + eval '$MV "$nlist"T "$nlist"' + } + fi + + # Prepare the list of exported symbols + if test -z "$export_symbols"; then + export_symbols=$output_objdir/$outputname.exp + $opt_dry_run || { + $RM $export_symbols + eval "$SED -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' + case $host in + *cygwin* | *mingw* | *cegcc* ) + eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' + eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' + ;; + esac + } + else + $opt_dry_run || { + eval "$SED -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' + eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' + eval '$MV "$nlist"T "$nlist"' + case $host in + *cygwin* | *mingw* | *cegcc* ) + eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' + eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' + ;; + esac + } + fi + fi + + for dlprefile in $dlprefiles; do + func_verbose "extracting global C symbols from '$dlprefile'" + func_basename "$dlprefile" + name=$func_basename_result + case $host in + *cygwin* | *mingw* | *cegcc* ) + # if an import library, we need to obtain dlname + if func_win32_import_lib_p "$dlprefile"; then + func_tr_sh "$dlprefile" + eval "curr_lafile=\$libfile_$func_tr_sh_result" + dlprefile_dlbasename= + if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then + # Use subshell, to avoid clobbering current variable values + dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"` + if test -n "$dlprefile_dlname"; then + func_basename "$dlprefile_dlname" + dlprefile_dlbasename=$func_basename_result + else + # no lafile. user explicitly requested -dlpreopen . + $sharedlib_from_linklib_cmd "$dlprefile" + dlprefile_dlbasename=$sharedlib_from_linklib_result + fi + fi + $opt_dry_run || { + if test -n "$dlprefile_dlbasename"; then + eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"' + else + func_warning "Could not compute DLL name from $name" + eval '$ECHO ": $name " >> "$nlist"' + fi + func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 + eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe | + $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'" + } + else # not an import lib + $opt_dry_run || { + eval '$ECHO ": $name " >> "$nlist"' + func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 + eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" + } + fi + ;; + *) + $opt_dry_run || { + eval '$ECHO ": $name " >> "$nlist"' + func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 + eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" + } + ;; + esac + done + + $opt_dry_run || { + # Make sure we have at least an empty file. + test -f "$nlist" || : > "$nlist" + + if test -n "$exclude_expsyms"; then + $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T + $MV "$nlist"T "$nlist" + fi + + # Try sorting and uniquifying the output. + if $GREP -v "^: " < "$nlist" | + if sort -k 3 /dev/null 2>&1; then + sort -k 3 + else + sort +2 + fi | + uniq > "$nlist"S; then + : + else + $GREP -v "^: " < "$nlist" > "$nlist"S + fi + + if test -f "$nlist"S; then + eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' + else + echo '/* NONE */' >> "$output_objdir/$my_dlsyms" + fi + + func_show_eval '$RM "${nlist}I"' + if test -n "$global_symbol_to_import"; then + eval "$global_symbol_to_import"' < "$nlist"S > "$nlist"I' + fi + + echo >> "$output_objdir/$my_dlsyms" "\ + +/* The mapping between symbol names and symbols. */ +typedef struct { + const char *name; + void *address; +} lt_dlsymlist; +extern LT_DLSYM_CONST lt_dlsymlist +lt_${my_prefix}_LTX_preloaded_symbols[];\ +" + + if test -s "$nlist"I; then + echo >> "$output_objdir/$my_dlsyms" "\ +static void lt_syminit(void) +{ + LT_DLSYM_CONST lt_dlsymlist *symbol = lt_${my_prefix}_LTX_preloaded_symbols; + for (; symbol->name; ++symbol) + {" + $SED 's/.*/ if (STREQ (symbol->name, \"&\")) symbol->address = (void *) \&&;/' < "$nlist"I >> "$output_objdir/$my_dlsyms" + echo >> "$output_objdir/$my_dlsyms" "\ + } +}" + fi + echo >> "$output_objdir/$my_dlsyms" "\ +LT_DLSYM_CONST lt_dlsymlist +lt_${my_prefix}_LTX_preloaded_symbols[] = +{ {\"$my_originator\", (void *) 0}," + + if test -s "$nlist"I; then + echo >> "$output_objdir/$my_dlsyms" "\ + {\"@INIT@\", (void *) <_syminit}," + fi + + case $need_lib_prefix in + no) + eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" + ;; + *) + eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" + ;; + esac + echo >> "$output_objdir/$my_dlsyms" "\ + {0, (void *) 0} +}; + +/* This works around a problem in FreeBSD linker */ +#ifdef FREEBSD_WORKAROUND +static const void *lt_preloaded_setup() { + return lt_${my_prefix}_LTX_preloaded_symbols; +} +#endif + +#ifdef __cplusplus +} +#endif\ +" + } # !$opt_dry_run + + pic_flag_for_symtable= + case "$compile_command " in + *" -static "*) ;; + *) + case $host in + # compiling the symbol table file with pic_flag works around + # a FreeBSD bug that causes programs to crash when -lm is + # linked before any other PIC object. But we must not use + # pic_flag when linking with -static. The problem exists in + # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. + *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) + pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; + *-*-hpux*) + pic_flag_for_symtable=" $pic_flag" ;; + *) + $my_pic_p && pic_flag_for_symtable=" $pic_flag" + ;; + esac + ;; + esac + symtab_cflags= + for arg in $LTCFLAGS; do + case $arg in + -pie | -fpie | -fPIE) ;; + *) func_append symtab_cflags " $arg" ;; + esac + done + + # Now compile the dynamic symbol file. + func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' + + # Clean up the generated files. + func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T" "${nlist}I"' + + # Transform the symbol file into the correct name. + symfileobj=$output_objdir/${my_outputname}S.$objext + case $host in + *cygwin* | *mingw* | *cegcc* ) + if test -f "$output_objdir/$my_outputname.def"; then + compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` + finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` + else + compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` + finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` + fi + ;; + *) + compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` + finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` + ;; + esac + ;; + *) + func_fatal_error "unknown suffix for '$my_dlsyms'" + ;; + esac + else + # We keep going just in case the user didn't refer to + # lt_preloaded_symbols. The linker will fail if global_symbol_pipe + # really was required. + + # Nullify the symbol file. + compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"` + finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"` + fi +} + +# func_cygming_gnu_implib_p ARG +# This predicate returns with zero status (TRUE) if +# ARG is a GNU/binutils-style import library. Returns +# with nonzero status (FALSE) otherwise. +func_cygming_gnu_implib_p () +{ + $debug_cmd + + func_to_tool_file "$1" func_convert_file_msys_to_w32 + func_cygming_gnu_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $EGREP ' (_head_[A-Za-z0-9_]+_[ad]l*|[A-Za-z0-9_]+_[ad]l*_iname)$'` + test -n "$func_cygming_gnu_implib_tmp" +} + +# func_cygming_ms_implib_p ARG +# This predicate returns with zero status (TRUE) if +# ARG is an MS-style import library. Returns +# with nonzero status (FALSE) otherwise. +func_cygming_ms_implib_p () +{ + $debug_cmd + + func_to_tool_file "$1" func_convert_file_msys_to_w32 + func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'` + test -n "$func_cygming_ms_implib_tmp" +} + +# func_win32_libid arg +# return the library type of file 'arg' +# +# Need a lot of goo to handle *both* DLLs and import libs +# Has to be a shell function in order to 'eat' the argument +# that is supplied when $file_magic_command is called. +# Despite the name, also deal with 64 bit binaries. +func_win32_libid () +{ + $debug_cmd + + win32_libid_type=unknown + win32_fileres=`file -L $1 2>/dev/null` + case $win32_fileres in + *ar\ archive\ import\ library*) # definitely import + win32_libid_type="x86 archive import" + ;; + *ar\ archive*) # could be an import, or static + # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD. + if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | + $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then + case $nm_interface in + "MS dumpbin") + if func_cygming_ms_implib_p "$1" || + func_cygming_gnu_implib_p "$1" + then + win32_nmres=import + else + win32_nmres= + fi + ;; + *) + func_to_tool_file "$1" func_convert_file_msys_to_w32 + win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" | + $SED -n -e ' + 1,100{ + / I /{ + s|.*|import| + p + q + } + }'` + ;; + esac + case $win32_nmres in + import*) win32_libid_type="x86 archive import";; + *) win32_libid_type="x86 archive static";; + esac + fi + ;; + *DLL*) + win32_libid_type="x86 DLL" + ;; + *executable*) # but shell scripts are "executable" too... + case $win32_fileres in + *MS\ Windows\ PE\ Intel*) + win32_libid_type="x86 DLL" + ;; + esac + ;; + esac + $ECHO "$win32_libid_type" +} + +# func_cygming_dll_for_implib ARG +# +# Platform-specific function to extract the +# name of the DLL associated with the specified +# import library ARG. +# Invoked by eval'ing the libtool variable +# $sharedlib_from_linklib_cmd +# Result is available in the variable +# $sharedlib_from_linklib_result +func_cygming_dll_for_implib () +{ + $debug_cmd + + sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"` +} + +# func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs +# +# The is the core of a fallback implementation of a +# platform-specific function to extract the name of the +# DLL associated with the specified import library LIBNAME. +# +# SECTION_NAME is either .idata$6 or .idata$7, depending +# on the platform and compiler that created the implib. +# +# Echos the name of the DLL associated with the +# specified import library. +func_cygming_dll_for_implib_fallback_core () +{ + $debug_cmd + + match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"` + $OBJDUMP -s --section "$1" "$2" 2>/dev/null | + $SED '/^Contents of section '"$match_literal"':/{ + # Place marker at beginning of archive member dllname section + s/.*/====MARK====/ + p + d + } + # These lines can sometimes be longer than 43 characters, but + # are always uninteresting + /:[ ]*file format pe[i]\{,1\}-/d + /^In archive [^:]*:/d + # Ensure marker is printed + /^====MARK====/p + # Remove all lines with less than 43 characters + /^.\{43\}/!d + # From remaining lines, remove first 43 characters + s/^.\{43\}//' | + $SED -n ' + # Join marker and all lines until next marker into a single line + /^====MARK====/ b para + H + $ b para + b + :para + x + s/\n//g + # Remove the marker + s/^====MARK====// + # Remove trailing dots and whitespace + s/[\. \t]*$// + # Print + /./p' | + # we now have a list, one entry per line, of the stringified + # contents of the appropriate section of all members of the + # archive that possess that section. Heuristic: eliminate + # all those that have a first or second character that is + # a '.' (that is, objdump's representation of an unprintable + # character.) This should work for all archives with less than + # 0x302f exports -- but will fail for DLLs whose name actually + # begins with a literal '.' or a single character followed by + # a '.'. + # + # Of those that remain, print the first one. + $SED -e '/^\./d;/^.\./d;q' +} + +# func_cygming_dll_for_implib_fallback ARG +# Platform-specific function to extract the +# name of the DLL associated with the specified +# import library ARG. +# +# This fallback implementation is for use when $DLLTOOL +# does not support the --identify-strict option. +# Invoked by eval'ing the libtool variable +# $sharedlib_from_linklib_cmd +# Result is available in the variable +# $sharedlib_from_linklib_result +func_cygming_dll_for_implib_fallback () +{ + $debug_cmd + + if func_cygming_gnu_implib_p "$1"; then + # binutils import library + sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"` + elif func_cygming_ms_implib_p "$1"; then + # ms-generated import library + sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"` + else + # unknown + sharedlib_from_linklib_result= + fi +} + + +# func_extract_an_archive dir oldlib +func_extract_an_archive () +{ + $debug_cmd + + f_ex_an_ar_dir=$1; shift + f_ex_an_ar_oldlib=$1 + if test yes = "$lock_old_archive_extraction"; then + lockfile=$f_ex_an_ar_oldlib.lock + until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do + func_echo "Waiting for $lockfile to be removed" + sleep 2 + done + fi + func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \ + 'stat=$?; rm -f "$lockfile"; exit $stat' + if test yes = "$lock_old_archive_extraction"; then + $opt_dry_run || rm -f "$lockfile" + fi + if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then + : + else + func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" + fi +} + + +# func_extract_archives gentop oldlib ... +func_extract_archives () +{ + $debug_cmd + + my_gentop=$1; shift + my_oldlibs=${1+"$@"} + my_oldobjs= + my_xlib= + my_xabs= + my_xdir= + + for my_xlib in $my_oldlibs; do + # Extract the objects. + case $my_xlib in + [\\/]* | [A-Za-z]:[\\/]*) my_xabs=$my_xlib ;; + *) my_xabs=`pwd`"/$my_xlib" ;; + esac + func_basename "$my_xlib" + my_xlib=$func_basename_result + my_xlib_u=$my_xlib + while :; do + case " $extracted_archives " in + *" $my_xlib_u "*) + func_arith $extracted_serial + 1 + extracted_serial=$func_arith_result + my_xlib_u=lt$extracted_serial-$my_xlib ;; + *) break ;; + esac + done + extracted_archives="$extracted_archives $my_xlib_u" + my_xdir=$my_gentop/$my_xlib_u + + func_mkdir_p "$my_xdir" + + case $host in + *-darwin*) + func_verbose "Extracting $my_xabs" + # Do not bother doing anything if just a dry run + $opt_dry_run || { + darwin_orig_dir=`pwd` + cd $my_xdir || exit $? + darwin_archive=$my_xabs + darwin_curdir=`pwd` + func_basename "$darwin_archive" + darwin_base_archive=$func_basename_result + darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` + if test -n "$darwin_arches"; then + darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` + darwin_arch= + func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" + for darwin_arch in $darwin_arches; do + func_mkdir_p "unfat-$$/$darwin_base_archive-$darwin_arch" + $LIPO -thin $darwin_arch -output "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive" "$darwin_archive" + cd "unfat-$$/$darwin_base_archive-$darwin_arch" + func_extract_an_archive "`pwd`" "$darwin_base_archive" + cd "$darwin_curdir" + $RM "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive" + done # $darwin_arches + ## Okay now we've a bunch of thin objects, gotta fatten them up :) + darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$sed_basename" | sort -u` + darwin_file= + darwin_files= + for darwin_file in $darwin_filelist; do + darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP` + $LIPO -create -output "$darwin_file" $darwin_files + done # $darwin_filelist + $RM -rf unfat-$$ + cd "$darwin_orig_dir" + else + cd $darwin_orig_dir + func_extract_an_archive "$my_xdir" "$my_xabs" + fi # $darwin_arches + } # !$opt_dry_run + ;; + *) + func_extract_an_archive "$my_xdir" "$my_xabs" + ;; + esac + my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP` + done + + func_extract_archives_result=$my_oldobjs +} + + +# func_emit_wrapper [arg=no] +# +# Emit a libtool wrapper script on stdout. +# Don't directly open a file because we may want to +# incorporate the script contents within a cygwin/mingw +# wrapper executable. Must ONLY be called from within +# func_mode_link because it depends on a number of variables +# set therein. +# +# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR +# variable will take. If 'yes', then the emitted script +# will assume that the directory where it is stored is +# the $objdir directory. This is a cygwin/mingw-specific +# behavior. +func_emit_wrapper () +{ + func_emit_wrapper_arg1=${1-no} + + $ECHO "\ +#! $SHELL + +# $output - temporary wrapper script for $objdir/$outputname +# Generated by $PROGRAM (GNU $PACKAGE) $VERSION +# +# The $output program cannot be directly executed until all the libtool +# libraries that it depends on are installed. +# +# This wrapper script should never be moved out of the build directory. +# If it is, it will not operate correctly. + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +sed_quote_subst='$sed_quote_subst' + +# Be Bourne compatible +if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which + # is contrary to our usage. Disable this feature. + alias -g '\${1+\"\$@\"}'='\"\$@\"' + setopt NO_GLOB_SUBST +else + case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac +fi +BIN_SH=xpg4; export BIN_SH # for Tru64 +DUALCASE=1; export DUALCASE # for MKS sh + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +relink_command=\"$relink_command\" + +# This environment variable determines our operation mode. +if test \"\$libtool_install_magic\" = \"$magic\"; then + # install mode needs the following variables: + generated_by_libtool_version='$macro_version' + notinst_deplibs='$notinst_deplibs' +else + # When we are sourced in execute mode, \$file and \$ECHO are already set. + if test \"\$libtool_execute_magic\" != \"$magic\"; then + file=\"\$0\"" + + qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"` + $ECHO "\ + +# A function that is used when there is no print builtin or printf. +func_fallback_echo () +{ + eval 'cat <<_LTECHO_EOF +\$1 +_LTECHO_EOF' +} + ECHO=\"$qECHO\" + fi + +# Very basic option parsing. These options are (a) specific to +# the libtool wrapper, (b) are identical between the wrapper +# /script/ and the wrapper /executable/ that is used only on +# windows platforms, and (c) all begin with the string "--lt-" +# (application programs are unlikely to have options that match +# this pattern). +# +# There are only two supported options: --lt-debug and +# --lt-dump-script. There is, deliberately, no --lt-help. +# +# The first argument to this parsing function should be the +# script's $0 value, followed by "$@". +lt_option_debug= +func_parse_lt_options () +{ + lt_script_arg0=\$0 + shift + for lt_opt + do + case \"\$lt_opt\" in + --lt-debug) lt_option_debug=1 ;; + --lt-dump-script) + lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\` + test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=. + lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\` + cat \"\$lt_dump_D/\$lt_dump_F\" + exit 0 + ;; + --lt-*) + \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2 + exit 1 + ;; + esac + done + + # Print the debug banner immediately: + if test -n \"\$lt_option_debug\"; then + echo \"$outputname:$output:\$LINENO: libtool wrapper (GNU $PACKAGE) $VERSION\" 1>&2 + fi +} + +# Used when --lt-debug. Prints its arguments to stdout +# (redirection is the responsibility of the caller) +func_lt_dump_args () +{ + lt_dump_args_N=1; + for lt_arg + do + \$ECHO \"$outputname:$output:\$LINENO: newargv[\$lt_dump_args_N]: \$lt_arg\" + lt_dump_args_N=\`expr \$lt_dump_args_N + 1\` + done +} + +# Core function for launching the target application +func_exec_program_core () +{ +" + case $host in + # Backslashes separate directories on plain windows + *-*-mingw | *-*-os2* | *-cegcc*) + $ECHO "\ + if test -n \"\$lt_option_debug\"; then + \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir\\\\\$program\" 1>&2 + func_lt_dump_args \${1+\"\$@\"} 1>&2 + fi + exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} +" + ;; + + *) + $ECHO "\ + if test -n \"\$lt_option_debug\"; then + \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir/\$program\" 1>&2 + func_lt_dump_args \${1+\"\$@\"} 1>&2 + fi + exec \"\$progdir/\$program\" \${1+\"\$@\"} +" + ;; + esac + $ECHO "\ + \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 + exit 1 +} + +# A function to encapsulate launching the target application +# Strips options in the --lt-* namespace from \$@ and +# launches target application with the remaining arguments. +func_exec_program () +{ + case \" \$* \" in + *\\ --lt-*) + for lt_wr_arg + do + case \$lt_wr_arg in + --lt-*) ;; + *) set x \"\$@\" \"\$lt_wr_arg\"; shift;; + esac + shift + done ;; + esac + func_exec_program_core \${1+\"\$@\"} +} + + # Parse options + func_parse_lt_options \"\$0\" \${1+\"\$@\"} + + # Find the directory that this script lives in. + thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\` + test \"x\$thisdir\" = \"x\$file\" && thisdir=. + + # Follow symbolic links until we get to the real thisdir. + file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\` + while test -n \"\$file\"; do + destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\` + + # If there was a directory component, then change thisdir. + if test \"x\$destdir\" != \"x\$file\"; then + case \"\$destdir\" in + [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; + *) thisdir=\"\$thisdir/\$destdir\" ;; + esac + fi + + file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\` + file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\` + done + + # Usually 'no', except on cygwin/mingw when embedded into + # the cwrapper. + WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1 + if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then + # special case for '.' + if test \"\$thisdir\" = \".\"; then + thisdir=\`pwd\` + fi + # remove .libs from thisdir + case \"\$thisdir\" in + *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;; + $objdir ) thisdir=. ;; + esac + fi + + # Try to get the absolute directory name. + absdir=\`cd \"\$thisdir\" && pwd\` + test -n \"\$absdir\" && thisdir=\"\$absdir\" +" + + if test yes = "$fast_install"; then + $ECHO "\ + program=lt-'$outputname'$exeext + progdir=\"\$thisdir/$objdir\" + + if test ! -f \"\$progdir/\$program\" || + { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | $SED 1q\`; \\ + test \"X\$file\" != \"X\$progdir/\$program\"; }; then + + file=\"\$\$-\$program\" + + if test ! -d \"\$progdir\"; then + $MKDIR \"\$progdir\" + else + $RM \"\$progdir/\$file\" + fi" + + $ECHO "\ + + # relink executable if necessary + if test -n \"\$relink_command\"; then + if relink_command_output=\`eval \$relink_command 2>&1\`; then : + else + \$ECHO \"\$relink_command_output\" >&2 + $RM \"\$progdir/\$file\" + exit 1 + fi + fi + + $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || + { $RM \"\$progdir/\$program\"; + $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } + $RM \"\$progdir/\$file\" + fi" + else + $ECHO "\ + program='$outputname' + progdir=\"\$thisdir/$objdir\" +" + fi + + $ECHO "\ + + if test -f \"\$progdir/\$program\"; then" + + # fixup the dll searchpath if we need to. + # + # Fix the DLL searchpath if we need to. Do this before prepending + # to shlibpath, because on Windows, both are PATH and uninstalled + # libraries must come first. + if test -n "$dllsearchpath"; then + $ECHO "\ + # Add the dll search path components to the executable PATH + PATH=$dllsearchpath:\$PATH +" + fi + + # Export our shlibpath_var if we have one. + if test yes = "$shlibpath_overrides_runpath" && test -n "$shlibpath_var" && test -n "$temp_rpath"; then + $ECHO "\ + # Add our own library path to $shlibpath_var + $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" + + # Some systems cannot cope with colon-terminated $shlibpath_var + # The second colon is a workaround for a bug in BeOS R4 sed + $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\` + + export $shlibpath_var +" + fi + + $ECHO "\ + if test \"\$libtool_execute_magic\" != \"$magic\"; then + # Run the actual program with our arguments. + func_exec_program \${1+\"\$@\"} + fi + else + # The program doesn't exist. + \$ECHO \"\$0: error: '\$progdir/\$program' does not exist\" 1>&2 + \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 + \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 + exit 1 + fi +fi\ +" +} + + +# func_emit_cwrapperexe_src +# emit the source code for a wrapper executable on stdout +# Must ONLY be called from within func_mode_link because +# it depends on a number of variable set therein. +func_emit_cwrapperexe_src () +{ + cat < +#include +#ifdef _MSC_VER +# include +# include +# include +#else +# include +# include +# ifdef __CYGWIN__ +# include +# endif +#endif +#include +#include +#include +#include +#include +#include +#include +#include + +#define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0) + +/* declarations of non-ANSI functions */ +#if defined __MINGW32__ +# ifdef __STRICT_ANSI__ +int _putenv (const char *); +# endif +#elif defined __CYGWIN__ +# ifdef __STRICT_ANSI__ +char *realpath (const char *, char *); +int putenv (char *); +int setenv (const char *, const char *, int); +# endif +/* #elif defined other_platform || defined ... */ +#endif + +/* portability defines, excluding path handling macros */ +#if defined _MSC_VER +# define setmode _setmode +# define stat _stat +# define chmod _chmod +# define getcwd _getcwd +# define putenv _putenv +# define S_IXUSR _S_IEXEC +#elif defined __MINGW32__ +# define setmode _setmode +# define stat _stat +# define chmod _chmod +# define getcwd _getcwd +# define putenv _putenv +#elif defined __CYGWIN__ +# define HAVE_SETENV +# define FOPEN_WB "wb" +/* #elif defined other platforms ... */ +#endif + +#if defined PATH_MAX +# define LT_PATHMAX PATH_MAX +#elif defined MAXPATHLEN +# define LT_PATHMAX MAXPATHLEN +#else +# define LT_PATHMAX 1024 +#endif + +#ifndef S_IXOTH +# define S_IXOTH 0 +#endif +#ifndef S_IXGRP +# define S_IXGRP 0 +#endif + +/* path handling portability macros */ +#ifndef DIR_SEPARATOR +# define DIR_SEPARATOR '/' +# define PATH_SEPARATOR ':' +#endif + +#if defined _WIN32 || defined __MSDOS__ || defined __DJGPP__ || \ + defined __OS2__ +# define HAVE_DOS_BASED_FILE_SYSTEM +# define FOPEN_WB "wb" +# ifndef DIR_SEPARATOR_2 +# define DIR_SEPARATOR_2 '\\' +# endif +# ifndef PATH_SEPARATOR_2 +# define PATH_SEPARATOR_2 ';' +# endif +#endif + +#ifndef DIR_SEPARATOR_2 +# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) +#else /* DIR_SEPARATOR_2 */ +# define IS_DIR_SEPARATOR(ch) \ + (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) +#endif /* DIR_SEPARATOR_2 */ + +#ifndef PATH_SEPARATOR_2 +# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) +#else /* PATH_SEPARATOR_2 */ +# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) +#endif /* PATH_SEPARATOR_2 */ + +#ifndef FOPEN_WB +# define FOPEN_WB "w" +#endif +#ifndef _O_BINARY +# define _O_BINARY 0 +#endif + +#define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) +#define XFREE(stale) do { \ + if (stale) { free (stale); stale = 0; } \ +} while (0) + +#if defined LT_DEBUGWRAPPER +static int lt_debug = 1; +#else +static int lt_debug = 0; +#endif + +const char *program_name = "libtool-wrapper"; /* in case xstrdup fails */ + +void *xmalloc (size_t num); +char *xstrdup (const char *string); +const char *base_name (const char *name); +char *find_executable (const char *wrapper); +char *chase_symlinks (const char *pathspec); +int make_executable (const char *path); +int check_executable (const char *path); +char *strendzap (char *str, const char *pat); +void lt_debugprintf (const char *file, int line, const char *fmt, ...); +void lt_fatal (const char *file, int line, const char *message, ...); +static const char *nonnull (const char *s); +static const char *nonempty (const char *s); +void lt_setenv (const char *name, const char *value); +char *lt_extend_str (const char *orig_value, const char *add, int to_end); +void lt_update_exe_path (const char *name, const char *value); +void lt_update_lib_path (const char *name, const char *value); +char **prepare_spawn (char **argv); +void lt_dump_script (FILE *f); +EOF + + cat <= 0) + && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) + return 1; + else + return 0; +} + +int +make_executable (const char *path) +{ + int rval = 0; + struct stat st; + + lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n", + nonempty (path)); + if ((!path) || (!*path)) + return 0; + + if (stat (path, &st) >= 0) + { + rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); + } + return rval; +} + +/* Searches for the full path of the wrapper. Returns + newly allocated full path name if found, NULL otherwise + Does not chase symlinks, even on platforms that support them. +*/ +char * +find_executable (const char *wrapper) +{ + int has_slash = 0; + const char *p; + const char *p_next; + /* static buffer for getcwd */ + char tmp[LT_PATHMAX + 1]; + size_t tmp_len; + char *concat_name; + + lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n", + nonempty (wrapper)); + + if ((wrapper == NULL) || (*wrapper == '\0')) + return NULL; + + /* Absolute path? */ +#if defined HAVE_DOS_BASED_FILE_SYSTEM + if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') + { + concat_name = xstrdup (wrapper); + if (check_executable (concat_name)) + return concat_name; + XFREE (concat_name); + } + else + { +#endif + if (IS_DIR_SEPARATOR (wrapper[0])) + { + concat_name = xstrdup (wrapper); + if (check_executable (concat_name)) + return concat_name; + XFREE (concat_name); + } +#if defined HAVE_DOS_BASED_FILE_SYSTEM + } +#endif + + for (p = wrapper; *p; p++) + if (*p == '/') + { + has_slash = 1; + break; + } + if (!has_slash) + { + /* no slashes; search PATH */ + const char *path = getenv ("PATH"); + if (path != NULL) + { + for (p = path; *p; p = p_next) + { + const char *q; + size_t p_len; + for (q = p; *q; q++) + if (IS_PATH_SEPARATOR (*q)) + break; + p_len = (size_t) (q - p); + p_next = (*q == '\0' ? q : q + 1); + if (p_len == 0) + { + /* empty path: current directory */ + if (getcwd (tmp, LT_PATHMAX) == NULL) + lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", + nonnull (strerror (errno))); + tmp_len = strlen (tmp); + concat_name = + XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); + memcpy (concat_name, tmp, tmp_len); + concat_name[tmp_len] = '/'; + strcpy (concat_name + tmp_len + 1, wrapper); + } + else + { + concat_name = + XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); + memcpy (concat_name, p, p_len); + concat_name[p_len] = '/'; + strcpy (concat_name + p_len + 1, wrapper); + } + if (check_executable (concat_name)) + return concat_name; + XFREE (concat_name); + } + } + /* not found in PATH; assume curdir */ + } + /* Relative path | not found in path: prepend cwd */ + if (getcwd (tmp, LT_PATHMAX) == NULL) + lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", + nonnull (strerror (errno))); + tmp_len = strlen (tmp); + concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); + memcpy (concat_name, tmp, tmp_len); + concat_name[tmp_len] = '/'; + strcpy (concat_name + tmp_len + 1, wrapper); + + if (check_executable (concat_name)) + return concat_name; + XFREE (concat_name); + return NULL; +} + +char * +chase_symlinks (const char *pathspec) +{ +#ifndef S_ISLNK + return xstrdup (pathspec); +#else + char buf[LT_PATHMAX]; + struct stat s; + char *tmp_pathspec = xstrdup (pathspec); + char *p; + int has_symlinks = 0; + while (strlen (tmp_pathspec) && !has_symlinks) + { + lt_debugprintf (__FILE__, __LINE__, + "checking path component for symlinks: %s\n", + tmp_pathspec); + if (lstat (tmp_pathspec, &s) == 0) + { + if (S_ISLNK (s.st_mode) != 0) + { + has_symlinks = 1; + break; + } + + /* search backwards for last DIR_SEPARATOR */ + p = tmp_pathspec + strlen (tmp_pathspec) - 1; + while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) + p--; + if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) + { + /* no more DIR_SEPARATORS left */ + break; + } + *p = '\0'; + } + else + { + lt_fatal (__FILE__, __LINE__, + "error accessing file \"%s\": %s", + tmp_pathspec, nonnull (strerror (errno))); + } + } + XFREE (tmp_pathspec); + + if (!has_symlinks) + { + return xstrdup (pathspec); + } + + tmp_pathspec = realpath (pathspec, buf); + if (tmp_pathspec == 0) + { + lt_fatal (__FILE__, __LINE__, + "could not follow symlinks for %s", pathspec); + } + return xstrdup (tmp_pathspec); +#endif +} + +char * +strendzap (char *str, const char *pat) +{ + size_t len, patlen; + + assert (str != NULL); + assert (pat != NULL); + + len = strlen (str); + patlen = strlen (pat); + + if (patlen <= len) + { + str += len - patlen; + if (STREQ (str, pat)) + *str = '\0'; + } + return str; +} + +void +lt_debugprintf (const char *file, int line, const char *fmt, ...) +{ + va_list args; + if (lt_debug) + { + (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line); + va_start (args, fmt); + (void) vfprintf (stderr, fmt, args); + va_end (args); + } +} + +static void +lt_error_core (int exit_status, const char *file, + int line, const char *mode, + const char *message, va_list ap) +{ + fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode); + vfprintf (stderr, message, ap); + fprintf (stderr, ".\n"); + + if (exit_status >= 0) + exit (exit_status); +} + +void +lt_fatal (const char *file, int line, const char *message, ...) +{ + va_list ap; + va_start (ap, message); + lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap); + va_end (ap); +} + +static const char * +nonnull (const char *s) +{ + return s ? s : "(null)"; +} + +static const char * +nonempty (const char *s) +{ + return (s && !*s) ? "(empty)" : nonnull (s); +} + +void +lt_setenv (const char *name, const char *value) +{ + lt_debugprintf (__FILE__, __LINE__, + "(lt_setenv) setting '%s' to '%s'\n", + nonnull (name), nonnull (value)); + { +#ifdef HAVE_SETENV + /* always make a copy, for consistency with !HAVE_SETENV */ + char *str = xstrdup (value); + setenv (name, str, 1); +#else + size_t len = strlen (name) + 1 + strlen (value) + 1; + char *str = XMALLOC (char, len); + sprintf (str, "%s=%s", name, value); + if (putenv (str) != EXIT_SUCCESS) + { + XFREE (str); + } +#endif + } +} + +char * +lt_extend_str (const char *orig_value, const char *add, int to_end) +{ + char *new_value; + if (orig_value && *orig_value) + { + size_t orig_value_len = strlen (orig_value); + size_t add_len = strlen (add); + new_value = XMALLOC (char, add_len + orig_value_len + 1); + if (to_end) + { + strcpy (new_value, orig_value); + strcpy (new_value + orig_value_len, add); + } + else + { + strcpy (new_value, add); + strcpy (new_value + add_len, orig_value); + } + } + else + { + new_value = xstrdup (add); + } + return new_value; +} + +void +lt_update_exe_path (const char *name, const char *value) +{ + lt_debugprintf (__FILE__, __LINE__, + "(lt_update_exe_path) modifying '%s' by prepending '%s'\n", + nonnull (name), nonnull (value)); + + if (name && *name && value && *value) + { + char *new_value = lt_extend_str (getenv (name), value, 0); + /* some systems can't cope with a ':'-terminated path #' */ + size_t len = strlen (new_value); + while ((len > 0) && IS_PATH_SEPARATOR (new_value[len-1])) + { + new_value[--len] = '\0'; + } + lt_setenv (name, new_value); + XFREE (new_value); + } +} + +void +lt_update_lib_path (const char *name, const char *value) +{ + lt_debugprintf (__FILE__, __LINE__, + "(lt_update_lib_path) modifying '%s' by prepending '%s'\n", + nonnull (name), nonnull (value)); + + if (name && *name && value && *value) + { + char *new_value = lt_extend_str (getenv (name), value, 0); + lt_setenv (name, new_value); + XFREE (new_value); + } +} + +EOF + case $host_os in + mingw*) + cat <<"EOF" + +/* Prepares an argument vector before calling spawn(). + Note that spawn() does not by itself call the command interpreter + (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") : + ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); + GetVersionEx(&v); + v.dwPlatformId == VER_PLATFORM_WIN32_NT; + }) ? "cmd.exe" : "command.com"). + Instead it simply concatenates the arguments, separated by ' ', and calls + CreateProcess(). We must quote the arguments since Win32 CreateProcess() + interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a + special way: + - Space and tab are interpreted as delimiters. They are not treated as + delimiters if they are surrounded by double quotes: "...". + - Unescaped double quotes are removed from the input. Their only effect is + that within double quotes, space and tab are treated like normal + characters. + - Backslashes not followed by double quotes are not special. + - But 2*n+1 backslashes followed by a double quote become + n backslashes followed by a double quote (n >= 0): + \" -> " + \\\" -> \" + \\\\\" -> \\" + */ +#define SHELL_SPECIAL_CHARS "\"\\ \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" +#define SHELL_SPACE_CHARS " \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" +char ** +prepare_spawn (char **argv) +{ + size_t argc; + char **new_argv; + size_t i; + + /* Count number of arguments. */ + for (argc = 0; argv[argc] != NULL; argc++) + ; + + /* Allocate new argument vector. */ + new_argv = XMALLOC (char *, argc + 1); + + /* Put quoted arguments into the new argument vector. */ + for (i = 0; i < argc; i++) + { + const char *string = argv[i]; + + if (string[0] == '\0') + new_argv[i] = xstrdup ("\"\""); + else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL) + { + int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL); + size_t length; + unsigned int backslashes; + const char *s; + char *quoted_string; + char *p; + + length = 0; + backslashes = 0; + if (quote_around) + length++; + for (s = string; *s != '\0'; s++) + { + char c = *s; + if (c == '"') + length += backslashes + 1; + length++; + if (c == '\\') + backslashes++; + else + backslashes = 0; + } + if (quote_around) + length += backslashes + 1; + + quoted_string = XMALLOC (char, length + 1); + + p = quoted_string; + backslashes = 0; + if (quote_around) + *p++ = '"'; + for (s = string; *s != '\0'; s++) + { + char c = *s; + if (c == '"') + { + unsigned int j; + for (j = backslashes + 1; j > 0; j--) + *p++ = '\\'; + } + *p++ = c; + if (c == '\\') + backslashes++; + else + backslashes = 0; + } + if (quote_around) + { + unsigned int j; + for (j = backslashes; j > 0; j--) + *p++ = '\\'; + *p++ = '"'; + } + *p = '\0'; + + new_argv[i] = quoted_string; + } + else + new_argv[i] = (char *) string; + } + new_argv[argc] = NULL; + + return new_argv; +} +EOF + ;; + esac + + cat <<"EOF" +void lt_dump_script (FILE* f) +{ +EOF + func_emit_wrapper yes | + $SED -n -e ' +s/^\(.\{79\}\)\(..*\)/\1\ +\2/ +h +s/\([\\"]\)/\\\1/g +s/$/\\n/ +s/\([^\n]*\).*/ fputs ("\1", f);/p +g +D' + cat <<"EOF" +} +EOF +} +# end: func_emit_cwrapperexe_src + +# func_win32_import_lib_p ARG +# True if ARG is an import lib, as indicated by $file_magic_cmd +func_win32_import_lib_p () +{ + $debug_cmd + + case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in + *import*) : ;; + *) false ;; + esac +} + +# func_suncc_cstd_abi +# !!ONLY CALL THIS FOR SUN CC AFTER $compile_command IS FULLY EXPANDED!! +# Several compiler flags select an ABI that is incompatible with the +# Cstd library. Avoid specifying it if any are in CXXFLAGS. +func_suncc_cstd_abi () +{ + $debug_cmd + + case " $compile_command " in + *" -compat=g "*|*\ -std=c++[0-9][0-9]\ *|*" -library=stdcxx4 "*|*" -library=stlport4 "*) + suncc_use_cstd_abi=no + ;; + *) + suncc_use_cstd_abi=yes + ;; + esac +} + +# func_mode_link arg... +func_mode_link () +{ + $debug_cmd + + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) + # It is impossible to link a dll without this setting, and + # we shouldn't force the makefile maintainer to figure out + # what system we are compiling for in order to pass an extra + # flag for every libtool invocation. + # allow_undefined=no + + # FIXME: Unfortunately, there are problems with the above when trying + # to make a dll that has undefined symbols, in which case not + # even a static library is built. For now, we need to specify + # -no-undefined on the libtool link line when we can be certain + # that all symbols are satisfied, otherwise we get a static library. + allow_undefined=yes + ;; + *) + allow_undefined=yes + ;; + esac + libtool_args=$nonopt + base_compile="$nonopt $@" + compile_command=$nonopt + finalize_command=$nonopt + + compile_rpath= + finalize_rpath= + compile_shlibpath= + finalize_shlibpath= + convenience= + old_convenience= + deplibs= + old_deplibs= + compiler_flags= + linker_flags= + dllsearchpath= + lib_search_path=`pwd` + inst_prefix_dir= + new_inherited_linker_flags= + + avoid_version=no + bindir= + dlfiles= + dlprefiles= + dlself=no + export_dynamic=no + export_symbols= + export_symbols_regex= + generated= + libobjs= + ltlibs= + module=no + no_install=no + objs= + os2dllname= + non_pic_objects= + precious_files_regex= + prefer_static_libs=no + preload=false + prev= + prevarg= + release= + rpath= + xrpath= + perm_rpath= + temp_rpath= + thread_safe=no + vinfo= + vinfo_number=no + weak_libs= + single_module=$wl-single_module + func_infer_tag $base_compile + + # We need to know -static, to get the right output filenames. + for arg + do + case $arg in + -shared) + test yes != "$build_libtool_libs" \ + && func_fatal_configuration "cannot build a shared library" + build_old_libs=no + break + ;; + -all-static | -static | -static-libtool-libs) + case $arg in + -all-static) + if test yes = "$build_libtool_libs" && test -z "$link_static_flag"; then + func_warning "complete static linking is impossible in this configuration" + fi + if test -n "$link_static_flag"; then + dlopen_self=$dlopen_self_static + fi + prefer_static_libs=yes + ;; + -static) + if test -z "$pic_flag" && test -n "$link_static_flag"; then + dlopen_self=$dlopen_self_static + fi + prefer_static_libs=built + ;; + -static-libtool-libs) + if test -z "$pic_flag" && test -n "$link_static_flag"; then + dlopen_self=$dlopen_self_static + fi + prefer_static_libs=yes + ;; + esac + build_libtool_libs=no + build_old_libs=yes + break + ;; + esac + done + + # See if our shared archives depend on static archives. + test -n "$old_archive_from_new_cmds" && build_old_libs=yes + + # Go through the arguments, transforming them on the way. + while test "$#" -gt 0; do + arg=$1 + shift + func_quote_for_eval "$arg" + qarg=$func_quote_for_eval_unquoted_result + func_append libtool_args " $func_quote_for_eval_result" + + # If the previous option needs an argument, assign it. + if test -n "$prev"; then + case $prev in + output) + func_append compile_command " @OUTPUT@" + func_append finalize_command " @OUTPUT@" + ;; + esac + + case $prev in + bindir) + bindir=$arg + prev= + continue + ;; + dlfiles|dlprefiles) + $preload || { + # Add the symbol object into the linking commands. + func_append compile_command " @SYMFILE@" + func_append finalize_command " @SYMFILE@" + preload=: + } + case $arg in + *.la | *.lo) ;; # We handle these cases below. + force) + if test no = "$dlself"; then + dlself=needless + export_dynamic=yes + fi + prev= + continue + ;; + self) + if test dlprefiles = "$prev"; then + dlself=yes + elif test dlfiles = "$prev" && test yes != "$dlopen_self"; then + dlself=yes + else + dlself=needless + export_dynamic=yes + fi + prev= + continue + ;; + *) + if test dlfiles = "$prev"; then + func_append dlfiles " $arg" + else + func_append dlprefiles " $arg" + fi + prev= + continue + ;; + esac + ;; + expsyms) + export_symbols=$arg + test -f "$arg" \ + || func_fatal_error "symbol file '$arg' does not exist" + prev= + continue + ;; + expsyms_regex) + export_symbols_regex=$arg + prev= + continue + ;; + framework) + case $host in + *-*-darwin*) + case "$deplibs " in + *" $qarg.ltframework "*) ;; + *) func_append deplibs " $qarg.ltframework" # this is fixed later + ;; + esac + ;; + esac + prev= + continue + ;; + inst_prefix) + inst_prefix_dir=$arg + prev= + continue + ;; + mllvm) + # Clang does not use LLVM to link, so we can simply discard any + # '-mllvm $arg' options when doing the link step. + prev= + continue + ;; + objectlist) + if test -f "$arg"; then + save_arg=$arg + moreargs= + for fil in `cat "$save_arg"` + do +# func_append moreargs " $fil" + arg=$fil + # A libtool-controlled object. + + # Check to see that this really is a libtool object. + if func_lalib_unsafe_p "$arg"; then + pic_object= + non_pic_object= + + # Read the .lo file + func_source "$arg" + + if test -z "$pic_object" || + test -z "$non_pic_object" || + test none = "$pic_object" && + test none = "$non_pic_object"; then + func_fatal_error "cannot find name of object for '$arg'" + fi + + # Extract subdirectory from the argument. + func_dirname "$arg" "/" "" + xdir=$func_dirname_result + + if test none != "$pic_object"; then + # Prepend the subdirectory the object is found in. + pic_object=$xdir$pic_object + + if test dlfiles = "$prev"; then + if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then + func_append dlfiles " $pic_object" + prev= + continue + else + # If libtool objects are unsupported, then we need to preload. + prev=dlprefiles + fi + fi + + # CHECK ME: I think I busted this. -Ossama + if test dlprefiles = "$prev"; then + # Preload the old-style object. + func_append dlprefiles " $pic_object" + prev= + fi + + # A PIC object. + func_append libobjs " $pic_object" + arg=$pic_object + fi + + # Non-PIC object. + if test none != "$non_pic_object"; then + # Prepend the subdirectory the object is found in. + non_pic_object=$xdir$non_pic_object + + # A standard non-PIC object + func_append non_pic_objects " $non_pic_object" + if test -z "$pic_object" || test none = "$pic_object"; then + arg=$non_pic_object + fi + else + # If the PIC object exists, use it instead. + # $xdir was prepended to $pic_object above. + non_pic_object=$pic_object + func_append non_pic_objects " $non_pic_object" + fi + else + # Only an error if not doing a dry-run. + if $opt_dry_run; then + # Extract subdirectory from the argument. + func_dirname "$arg" "/" "" + xdir=$func_dirname_result + + func_lo2o "$arg" + pic_object=$xdir$objdir/$func_lo2o_result + non_pic_object=$xdir$func_lo2o_result + func_append libobjs " $pic_object" + func_append non_pic_objects " $non_pic_object" + else + func_fatal_error "'$arg' is not a valid libtool object" + fi + fi + done + else + func_fatal_error "link input file '$arg' does not exist" + fi + arg=$save_arg + prev= + continue + ;; + os2dllname) + os2dllname=$arg + prev= + continue + ;; + precious_regex) + precious_files_regex=$arg + prev= + continue + ;; + release) + release=-$arg + prev= + continue + ;; + rpath | xrpath) + # We need an absolute path. + case $arg in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + func_fatal_error "only absolute run-paths are allowed" + ;; + esac + if test rpath = "$prev"; then + case "$rpath " in + *" $arg "*) ;; + *) func_append rpath " $arg" ;; + esac + else + case "$xrpath " in + *" $arg "*) ;; + *) func_append xrpath " $arg" ;; + esac + fi + prev= + continue + ;; + shrext) + shrext_cmds=$arg + prev= + continue + ;; + weak) + func_append weak_libs " $arg" + prev= + continue + ;; + xcclinker) + func_append linker_flags " $qarg" + func_append compiler_flags " $qarg" + prev= + func_append compile_command " $qarg" + func_append finalize_command " $qarg" + continue + ;; + xcompiler) + func_append compiler_flags " $qarg" + prev= + func_append compile_command " $qarg" + func_append finalize_command " $qarg" + continue + ;; + xlinker) + func_append linker_flags " $qarg" + func_append compiler_flags " $wl$qarg" + prev= + func_append compile_command " $wl$qarg" + func_append finalize_command " $wl$qarg" + continue + ;; + *) + eval "$prev=\"\$arg\"" + prev= + continue + ;; + esac + fi # test -n "$prev" + + prevarg=$arg + + case $arg in + -all-static) + if test -n "$link_static_flag"; then + # See comment for -static flag below, for more details. + func_append compile_command " $link_static_flag" + func_append finalize_command " $link_static_flag" + fi + continue + ;; + + -allow-undefined) + # FIXME: remove this flag sometime in the future. + func_fatal_error "'-allow-undefined' must not be used because it is the default" + ;; + + -avoid-version) + avoid_version=yes + continue + ;; + + -bindir) + prev=bindir + continue + ;; + + -dlopen) + prev=dlfiles + continue + ;; + + -dlpreopen) + prev=dlprefiles + continue + ;; + + -export-dynamic) + export_dynamic=yes + continue + ;; + + -export-symbols | -export-symbols-regex) + if test -n "$export_symbols" || test -n "$export_symbols_regex"; then + func_fatal_error "more than one -exported-symbols argument is not allowed" + fi + if test X-export-symbols = "X$arg"; then + prev=expsyms + else + prev=expsyms_regex + fi + continue + ;; + + -framework) + prev=framework + continue + ;; + + -inst-prefix-dir) + prev=inst_prefix + continue + ;; + + # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* + # so, if we see these flags be careful not to treat them like -L + -L[A-Z][A-Z]*:*) + case $with_gcc/$host in + no/*-*-irix* | /*-*-irix*) + func_append compile_command " $arg" + func_append finalize_command " $arg" + ;; + esac + continue + ;; + + -L*) + func_stripname "-L" '' "$arg" + if test -z "$func_stripname_result"; then + if test "$#" -gt 0; then + func_fatal_error "require no space between '-L' and '$1'" + else + func_fatal_error "need path for '-L' option" + fi + fi + func_resolve_sysroot "$func_stripname_result" + dir=$func_resolve_sysroot_result + # We need an absolute path. + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + absdir=`cd "$dir" && pwd` + test -z "$absdir" && \ + func_fatal_error "cannot determine absolute directory name of '$dir'" + dir=$absdir + ;; + esac + case "$deplibs " in + *" -L$dir "* | *" $arg "*) + # Will only happen for absolute or sysroot arguments + ;; + *) + # Preserve sysroot, but never include relative directories + case $dir in + [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;; + *) func_append deplibs " -L$dir" ;; + esac + func_append lib_search_path " $dir" + ;; + esac + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) + testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'` + case :$dllsearchpath: in + *":$dir:"*) ;; + ::) dllsearchpath=$dir;; + *) func_append dllsearchpath ":$dir";; + esac + case :$dllsearchpath: in + *":$testbindir:"*) ;; + ::) dllsearchpath=$testbindir;; + *) func_append dllsearchpath ":$testbindir";; + esac + ;; + esac + continue + ;; + + -l*) + if test X-lc = "X$arg" || test X-lm = "X$arg"; then + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*) + # These systems don't actually have a C or math library (as such) + continue + ;; + *-*-os2*) + # These systems don't actually have a C library (as such) + test X-lc = "X$arg" && continue + ;; + *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig*) + # Do not include libc due to us having libc/libc_r. + test X-lc = "X$arg" && continue + ;; + *-*-rhapsody* | *-*-darwin1.[012]) + # Rhapsody C and math libraries are in the System framework + func_append deplibs " System.ltframework" + continue + ;; + *-*-sco3.2v5* | *-*-sco5v6*) + # Causes problems with __ctype + test X-lc = "X$arg" && continue + ;; + *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) + # Compiler inserts libc in the correct place for threads to work + test X-lc = "X$arg" && continue + ;; + esac + elif test X-lc_r = "X$arg"; then + case $host in + *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig*) + # Do not include libc_r directly, use -pthread flag. + continue + ;; + esac + fi + func_append deplibs " $arg" + continue + ;; + + -mllvm) + prev=mllvm + continue + ;; + + -module) + module=yes + continue + ;; + + # Tru64 UNIX uses -model [arg] to determine the layout of C++ + # classes, name mangling, and exception handling. + # Darwin uses the -arch flag to determine output architecture. + -model|-arch|-isysroot|--sysroot) + func_append compiler_flags " $arg" + func_append compile_command " $arg" + func_append finalize_command " $arg" + prev=xcompiler + continue + ;; + + -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ + |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) + func_append compiler_flags " $arg" + func_append compile_command " $arg" + func_append finalize_command " $arg" + case "$new_inherited_linker_flags " in + *" $arg "*) ;; + * ) func_append new_inherited_linker_flags " $arg" ;; + esac + continue + ;; + + -multi_module) + single_module=$wl-multi_module + continue + ;; + + -no-fast-install) + fast_install=no + continue + ;; + + -no-install) + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) + # The PATH hackery in wrapper scripts is required on Windows + # and Darwin in order for the loader to find any dlls it needs. + func_warning "'-no-install' is ignored for $host" + func_warning "assuming '-no-fast-install' instead" + fast_install=no + ;; + *) no_install=yes ;; + esac + continue + ;; + + -no-undefined) + allow_undefined=no + continue + ;; + + -objectlist) + prev=objectlist + continue + ;; + + -os2dllname) + prev=os2dllname + continue + ;; + + -o) prev=output ;; + + -precious-files-regex) + prev=precious_regex + continue + ;; + + -release) + prev=release + continue + ;; + + -rpath) + prev=rpath + continue + ;; + + -R) + prev=xrpath + continue + ;; + + -R*) + func_stripname '-R' '' "$arg" + dir=$func_stripname_result + # We need an absolute path. + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) ;; + =*) + func_stripname '=' '' "$dir" + dir=$lt_sysroot$func_stripname_result + ;; + *) + func_fatal_error "only absolute run-paths are allowed" + ;; + esac + case "$xrpath " in + *" $dir "*) ;; + *) func_append xrpath " $dir" ;; + esac + continue + ;; + + -shared) + # The effects of -shared are defined in a previous loop. + continue + ;; + + -shrext) + prev=shrext + continue + ;; + + -static | -static-libtool-libs) + # The effects of -static are defined in a previous loop. + # We used to do the same as -all-static on platforms that + # didn't have a PIC flag, but the assumption that the effects + # would be equivalent was wrong. It would break on at least + # Digital Unix and AIX. + continue + ;; + + -thread-safe) + thread_safe=yes + continue + ;; + + -version-info) + prev=vinfo + continue + ;; + + -version-number) + prev=vinfo + vinfo_number=yes + continue + ;; + + -weak) + prev=weak + continue + ;; + + -Wc,*) + func_stripname '-Wc,' '' "$arg" + args=$func_stripname_result + arg= + save_ifs=$IFS; IFS=, + for flag in $args; do + IFS=$save_ifs + func_quote_for_eval "$flag" + func_append arg " $func_quote_for_eval_result" + func_append compiler_flags " $func_quote_for_eval_result" + done + IFS=$save_ifs + func_stripname ' ' '' "$arg" + arg=$func_stripname_result + ;; + + -Wl,*) + func_stripname '-Wl,' '' "$arg" + args=$func_stripname_result + arg= + save_ifs=$IFS; IFS=, + for flag in $args; do + IFS=$save_ifs + func_quote_for_eval "$flag" + func_append arg " $wl$func_quote_for_eval_result" + func_append compiler_flags " $wl$func_quote_for_eval_result" + func_append linker_flags " $func_quote_for_eval_result" + done + IFS=$save_ifs + func_stripname ' ' '' "$arg" + arg=$func_stripname_result + ;; + + -Xcompiler) + prev=xcompiler + continue + ;; + + -Xlinker) + prev=xlinker + continue + ;; + + -XCClinker) + prev=xcclinker + continue + ;; + + # -msg_* for osf cc + -msg_*) + func_quote_for_eval "$arg" + arg=$func_quote_for_eval_result + ;; + + # Flags to be passed through unchanged, with rationale: + # -64, -mips[0-9] enable 64-bit mode for the SGI compiler + # -r[0-9][0-9]* specify processor for the SGI compiler + # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler + # +DA*, +DD* enable 64-bit mode for the HP compiler + # -q* compiler args for the IBM compiler + # -m*, -t[45]*, -txscale* architecture-specific flags for GCC + # -F/path path to uninstalled frameworks, gcc on darwin + # -p, -pg, --coverage, -fprofile-* profiling flags for GCC + # -fstack-protector* stack protector flags for GCC + # @file GCC response files + # -tp=* Portland pgcc target processor selection + # --sysroot=* for sysroot support + # -O*, -g*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization + # -stdlib=* select c++ std lib with clang + -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ + -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \ + -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-stdlib=*) + func_quote_for_eval "$arg" + arg=$func_quote_for_eval_result + func_append compile_command " $arg" + func_append finalize_command " $arg" + func_append compiler_flags " $arg" + continue + ;; + + -Z*) + if test os2 = "`expr $host : '.*\(os2\)'`"; then + # OS/2 uses -Zxxx to specify OS/2-specific options + compiler_flags="$compiler_flags $arg" + func_append compile_command " $arg" + func_append finalize_command " $arg" + case $arg in + -Zlinker | -Zstack) + prev=xcompiler + ;; + esac + continue + else + # Otherwise treat like 'Some other compiler flag' below + func_quote_for_eval "$arg" + arg=$func_quote_for_eval_result + fi + ;; + + # Some other compiler flag. + -* | +*) + func_quote_for_eval "$arg" + arg=$func_quote_for_eval_result + ;; + + *.$objext) + # A standard object. + func_append objs " $arg" + ;; + + *.lo) + # A libtool-controlled object. + + # Check to see that this really is a libtool object. + if func_lalib_unsafe_p "$arg"; then + pic_object= + non_pic_object= + + # Read the .lo file + func_source "$arg" + + if test -z "$pic_object" || + test -z "$non_pic_object" || + test none = "$pic_object" && + test none = "$non_pic_object"; then + func_fatal_error "cannot find name of object for '$arg'" + fi + + # Extract subdirectory from the argument. + func_dirname "$arg" "/" "" + xdir=$func_dirname_result + + test none = "$pic_object" || { + # Prepend the subdirectory the object is found in. + pic_object=$xdir$pic_object + + if test dlfiles = "$prev"; then + if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then + func_append dlfiles " $pic_object" + prev= + continue + else + # If libtool objects are unsupported, then we need to preload. + prev=dlprefiles + fi + fi + + # CHECK ME: I think I busted this. -Ossama + if test dlprefiles = "$prev"; then + # Preload the old-style object. + func_append dlprefiles " $pic_object" + prev= + fi + + # A PIC object. + func_append libobjs " $pic_object" + arg=$pic_object + } + + # Non-PIC object. + if test none != "$non_pic_object"; then + # Prepend the subdirectory the object is found in. + non_pic_object=$xdir$non_pic_object + + # A standard non-PIC object + func_append non_pic_objects " $non_pic_object" + if test -z "$pic_object" || test none = "$pic_object"; then + arg=$non_pic_object + fi + else + # If the PIC object exists, use it instead. + # $xdir was prepended to $pic_object above. + non_pic_object=$pic_object + func_append non_pic_objects " $non_pic_object" + fi + else + # Only an error if not doing a dry-run. + if $opt_dry_run; then + # Extract subdirectory from the argument. + func_dirname "$arg" "/" "" + xdir=$func_dirname_result + + func_lo2o "$arg" + pic_object=$xdir$objdir/$func_lo2o_result + non_pic_object=$xdir$func_lo2o_result + func_append libobjs " $pic_object" + func_append non_pic_objects " $non_pic_object" + else + func_fatal_error "'$arg' is not a valid libtool object" + fi + fi + ;; + + *.$libext) + # An archive. + func_append deplibs " $arg" + func_append old_deplibs " $arg" + continue + ;; + + *.la) + # A libtool-controlled library. + + func_resolve_sysroot "$arg" + if test dlfiles = "$prev"; then + # This library was specified with -dlopen. + func_append dlfiles " $func_resolve_sysroot_result" + prev= + elif test dlprefiles = "$prev"; then + # The library was specified with -dlpreopen. + func_append dlprefiles " $func_resolve_sysroot_result" + prev= + else + func_append deplibs " $func_resolve_sysroot_result" + fi + continue + ;; + + # Some other compiler argument. + *) + # Unknown arguments in both finalize_command and compile_command need + # to be aesthetically quoted because they are evaled later. + func_quote_for_eval "$arg" + arg=$func_quote_for_eval_result + ;; + esac # arg + + # Now actually substitute the argument into the commands. + if test -n "$arg"; then + func_append compile_command " $arg" + func_append finalize_command " $arg" + fi + done # argument parsing loop + + test -n "$prev" && \ + func_fatal_help "the '$prevarg' option requires an argument" + + if test yes = "$export_dynamic" && test -n "$export_dynamic_flag_spec"; then + eval arg=\"$export_dynamic_flag_spec\" + func_append compile_command " $arg" + func_append finalize_command " $arg" + fi + + oldlibs= + # calculate the name of the file, without its directory + func_basename "$output" + outputname=$func_basename_result + libobjs_save=$libobjs + + if test -n "$shlibpath_var"; then + # get the directories listed in $shlibpath_var + eval shlib_search_path=\`\$ECHO \"\$$shlibpath_var\" \| \$SED \'s/:/ /g\'\` + else + shlib_search_path= + fi + eval sys_lib_search_path=\"$sys_lib_search_path_spec\" + eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" + + # Definition is injected by LT_CONFIG during libtool generation. + func_munge_path_list sys_lib_dlsearch_path "$LT_SYS_LIBRARY_PATH" + + func_dirname "$output" "/" "" + output_objdir=$func_dirname_result$objdir + func_to_tool_file "$output_objdir/" + tool_output_objdir=$func_to_tool_file_result + # Create the object directory. + func_mkdir_p "$output_objdir" + + # Determine the type of output + case $output in + "") + func_fatal_help "you must specify an output file" + ;; + *.$libext) linkmode=oldlib ;; + *.lo | *.$objext) linkmode=obj ;; + *.la) linkmode=lib ;; + *) linkmode=prog ;; # Anything else should be a program. + esac + + specialdeplibs= + + libs= + # Find all interdependent deplibs by searching for libraries + # that are linked more than once (e.g. -la -lb -la) + for deplib in $deplibs; do + if $opt_preserve_dup_deps; then + case "$libs " in + *" $deplib "*) func_append specialdeplibs " $deplib" ;; + esac + fi + func_append libs " $deplib" + done + + if test lib = "$linkmode"; then + libs="$predeps $libs $compiler_lib_search_path $postdeps" + + # Compute libraries that are listed more than once in $predeps + # $postdeps and mark them as special (i.e., whose duplicates are + # not to be eliminated). + pre_post_deps= + if $opt_duplicate_compiler_generated_deps; then + for pre_post_dep in $predeps $postdeps; do + case "$pre_post_deps " in + *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;; + esac + func_append pre_post_deps " $pre_post_dep" + done + fi + pre_post_deps= + fi + + deplibs= + newdependency_libs= + newlib_search_path= + need_relink=no # whether we're linking any uninstalled libtool libraries + notinst_deplibs= # not-installed libtool libraries + notinst_path= # paths that contain not-installed libtool libraries + + case $linkmode in + lib) + passes="conv dlpreopen link" + for file in $dlfiles $dlprefiles; do + case $file in + *.la) ;; + *) + func_fatal_help "libraries can '-dlopen' only libtool libraries: $file" + ;; + esac + done + ;; + prog) + compile_deplibs= + finalize_deplibs= + alldeplibs=false + newdlfiles= + newdlprefiles= + passes="conv scan dlopen dlpreopen link" + ;; + *) passes="conv" + ;; + esac + + for pass in $passes; do + # The preopen pass in lib mode reverses $deplibs; put it back here + # so that -L comes before libs that need it for instance... + if test lib,link = "$linkmode,$pass"; then + ## FIXME: Find the place where the list is rebuilt in the wrong + ## order, and fix it there properly + tmp_deplibs= + for deplib in $deplibs; do + tmp_deplibs="$deplib $tmp_deplibs" + done + deplibs=$tmp_deplibs + fi + + if test lib,link = "$linkmode,$pass" || + test prog,scan = "$linkmode,$pass"; then + libs=$deplibs + deplibs= + fi + if test prog = "$linkmode"; then + case $pass in + dlopen) libs=$dlfiles ;; + dlpreopen) libs=$dlprefiles ;; + link) libs="$deplibs %DEPLIBS% $dependency_libs" ;; + esac + fi + if test lib,dlpreopen = "$linkmode,$pass"; then + # Collect and forward deplibs of preopened libtool libs + for lib in $dlprefiles; do + # Ignore non-libtool-libs + dependency_libs= + func_resolve_sysroot "$lib" + case $lib in + *.la) func_source "$func_resolve_sysroot_result" ;; + esac + + # Collect preopened libtool deplibs, except any this library + # has declared as weak libs + for deplib in $dependency_libs; do + func_basename "$deplib" + deplib_base=$func_basename_result + case " $weak_libs " in + *" $deplib_base "*) ;; + *) func_append deplibs " $deplib" ;; + esac + done + done + libs=$dlprefiles + fi + if test dlopen = "$pass"; then + # Collect dlpreopened libraries + save_deplibs=$deplibs + deplibs= + fi + + for deplib in $libs; do + lib= + found=false + case $deplib in + -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ + |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) + if test prog,link = "$linkmode,$pass"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + func_append compiler_flags " $deplib" + if test lib = "$linkmode"; then + case "$new_inherited_linker_flags " in + *" $deplib "*) ;; + * ) func_append new_inherited_linker_flags " $deplib" ;; + esac + fi + fi + continue + ;; + -l*) + if test lib != "$linkmode" && test prog != "$linkmode"; then + func_warning "'-l' is ignored for archives/objects" + continue + fi + func_stripname '-l' '' "$deplib" + name=$func_stripname_result + if test lib = "$linkmode"; then + searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" + else + searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" + fi + for searchdir in $searchdirs; do + for search_ext in .la $std_shrext .so .a; do + # Search the libtool library + lib=$searchdir/lib$name$search_ext + if test -f "$lib"; then + if test .la = "$search_ext"; then + found=: + else + found=false + fi + break 2 + fi + done + done + if $found; then + # deplib is a libtool library + # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, + # We need to do some special things here, and not later. + if test yes = "$allow_libtool_libs_with_static_runtimes"; then + case " $predeps $postdeps " in + *" $deplib "*) + if func_lalib_p "$lib"; then + library_names= + old_library= + func_source "$lib" + for l in $old_library $library_names; do + ll=$l + done + if test "X$ll" = "X$old_library"; then # only static version available + found=false + func_dirname "$lib" "" "." + ladir=$func_dirname_result + lib=$ladir/$old_library + if test prog,link = "$linkmode,$pass"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + deplibs="$deplib $deplibs" + test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs" + fi + continue + fi + fi + ;; + *) ;; + esac + fi + else + # deplib doesn't seem to be a libtool library + if test prog,link = "$linkmode,$pass"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + deplibs="$deplib $deplibs" + test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs" + fi + continue + fi + ;; # -l + *.ltframework) + if test prog,link = "$linkmode,$pass"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + deplibs="$deplib $deplibs" + if test lib = "$linkmode"; then + case "$new_inherited_linker_flags " in + *" $deplib "*) ;; + * ) func_append new_inherited_linker_flags " $deplib" ;; + esac + fi + fi + continue + ;; + -L*) + case $linkmode in + lib) + deplibs="$deplib $deplibs" + test conv = "$pass" && continue + newdependency_libs="$deplib $newdependency_libs" + func_stripname '-L' '' "$deplib" + func_resolve_sysroot "$func_stripname_result" + func_append newlib_search_path " $func_resolve_sysroot_result" + ;; + prog) + if test conv = "$pass"; then + deplibs="$deplib $deplibs" + continue + fi + if test scan = "$pass"; then + deplibs="$deplib $deplibs" + else + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + fi + func_stripname '-L' '' "$deplib" + func_resolve_sysroot "$func_stripname_result" + func_append newlib_search_path " $func_resolve_sysroot_result" + ;; + *) + func_warning "'-L' is ignored for archives/objects" + ;; + esac # linkmode + continue + ;; # -L + -R*) + if test link = "$pass"; then + func_stripname '-R' '' "$deplib" + func_resolve_sysroot "$func_stripname_result" + dir=$func_resolve_sysroot_result + # Make sure the xrpath contains only unique directories. + case "$xrpath " in + *" $dir "*) ;; + *) func_append xrpath " $dir" ;; + esac + fi + deplibs="$deplib $deplibs" + continue + ;; + *.la) + func_resolve_sysroot "$deplib" + lib=$func_resolve_sysroot_result + ;; + *.$libext) + if test conv = "$pass"; then + deplibs="$deplib $deplibs" + continue + fi + case $linkmode in + lib) + # Linking convenience modules into shared libraries is allowed, + # but linking other static libraries is non-portable. + case " $dlpreconveniencelibs " in + *" $deplib "*) ;; + *) + valid_a_lib=false + case $deplibs_check_method in + match_pattern*) + set dummy $deplibs_check_method; shift + match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` + if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \ + | $EGREP "$match_pattern_regex" > /dev/null; then + valid_a_lib=: + fi + ;; + pass_all) + valid_a_lib=: + ;; + esac + if $valid_a_lib; then + echo + $ECHO "*** Warning: Linking the shared library $output against the" + $ECHO "*** static library $deplib is not portable!" + deplibs="$deplib $deplibs" + else + echo + $ECHO "*** Warning: Trying to link with static lib archive $deplib." + echo "*** I have the capability to make that library automatically link in when" + echo "*** you link to this library. But I can only do this if you have a" + echo "*** shared version of the library, which you do not appear to have" + echo "*** because the file extensions .$libext of this argument makes me believe" + echo "*** that it is just a static archive that I should not use here." + fi + ;; + esac + continue + ;; + prog) + if test link != "$pass"; then + deplibs="$deplib $deplibs" + else + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + fi + continue + ;; + esac # linkmode + ;; # *.$libext + *.lo | *.$objext) + if test conv = "$pass"; then + deplibs="$deplib $deplibs" + elif test prog = "$linkmode"; then + if test dlpreopen = "$pass" || test yes != "$dlopen_support" || test no = "$build_libtool_libs"; then + # If there is no dlopen support or we're linking statically, + # we need to preload. + func_append newdlprefiles " $deplib" + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + func_append newdlfiles " $deplib" + fi + fi + continue + ;; + %DEPLIBS%) + alldeplibs=: + continue + ;; + esac # case $deplib + + $found || test -f "$lib" \ + || func_fatal_error "cannot find the library '$lib' or unhandled argument '$deplib'" + + # Check to see that this really is a libtool archive. + func_lalib_unsafe_p "$lib" \ + || func_fatal_error "'$lib' is not a valid libtool archive" + + func_dirname "$lib" "" "." + ladir=$func_dirname_result + + dlname= + dlopen= + dlpreopen= + libdir= + library_names= + old_library= + inherited_linker_flags= + # If the library was installed with an old release of libtool, + # it will not redefine variables installed, or shouldnotlink + installed=yes + shouldnotlink=no + avoidtemprpath= + + + # Read the .la file + func_source "$lib" + + # Convert "-framework foo" to "foo.ltframework" + if test -n "$inherited_linker_flags"; then + tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'` + for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do + case " $new_inherited_linker_flags " in + *" $tmp_inherited_linker_flag "*) ;; + *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";; + esac + done + fi + dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + if test lib,link = "$linkmode,$pass" || + test prog,scan = "$linkmode,$pass" || + { test prog != "$linkmode" && test lib != "$linkmode"; }; then + test -n "$dlopen" && func_append dlfiles " $dlopen" + test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen" + fi + + if test conv = "$pass"; then + # Only check for convenience libraries + deplibs="$lib $deplibs" + if test -z "$libdir"; then + if test -z "$old_library"; then + func_fatal_error "cannot find name of link library for '$lib'" + fi + # It is a libtool convenience library, so add in its objects. + func_append convenience " $ladir/$objdir/$old_library" + func_append old_convenience " $ladir/$objdir/$old_library" + elif test prog != "$linkmode" && test lib != "$linkmode"; then + func_fatal_error "'$lib' is not a convenience library" + fi + tmp_libs= + for deplib in $dependency_libs; do + deplibs="$deplib $deplibs" + if $opt_preserve_dup_deps; then + case "$tmp_libs " in + *" $deplib "*) func_append specialdeplibs " $deplib" ;; + esac + fi + func_append tmp_libs " $deplib" + done + continue + fi # $pass = conv + + + # Get the name of the library we link against. + linklib= + if test -n "$old_library" && + { test yes = "$prefer_static_libs" || + test built,no = "$prefer_static_libs,$installed"; }; then + linklib=$old_library + else + for l in $old_library $library_names; do + linklib=$l + done + fi + if test -z "$linklib"; then + func_fatal_error "cannot find name of link library for '$lib'" + fi + + # This library was specified with -dlopen. + if test dlopen = "$pass"; then + test -z "$libdir" \ + && func_fatal_error "cannot -dlopen a convenience library: '$lib'" + if test -z "$dlname" || + test yes != "$dlopen_support" || + test no = "$build_libtool_libs" + then + # If there is no dlname, no dlopen support or we're linking + # statically, we need to preload. We also need to preload any + # dependent libraries so libltdl's deplib preloader doesn't + # bomb out in the load deplibs phase. + func_append dlprefiles " $lib $dependency_libs" + else + func_append newdlfiles " $lib" + fi + continue + fi # $pass = dlopen + + # We need an absolute path. + case $ladir in + [\\/]* | [A-Za-z]:[\\/]*) abs_ladir=$ladir ;; + *) + abs_ladir=`cd "$ladir" && pwd` + if test -z "$abs_ladir"; then + func_warning "cannot determine absolute directory name of '$ladir'" + func_warning "passing it literally to the linker, although it might fail" + abs_ladir=$ladir + fi + ;; + esac + func_basename "$lib" + laname=$func_basename_result + + # Find the relevant object directory and library name. + if test yes = "$installed"; then + if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then + func_warning "library '$lib' was moved." + dir=$ladir + absdir=$abs_ladir + libdir=$abs_ladir + else + dir=$lt_sysroot$libdir + absdir=$lt_sysroot$libdir + fi + test yes = "$hardcode_automatic" && avoidtemprpath=yes + else + if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then + dir=$ladir + absdir=$abs_ladir + # Remove this search path later + func_append notinst_path " $abs_ladir" + else + dir=$ladir/$objdir + absdir=$abs_ladir/$objdir + # Remove this search path later + func_append notinst_path " $abs_ladir" + fi + fi # $installed = yes + func_stripname 'lib' '.la' "$laname" + name=$func_stripname_result + + # This library was specified with -dlpreopen. + if test dlpreopen = "$pass"; then + if test -z "$libdir" && test prog = "$linkmode"; then + func_fatal_error "only libraries may -dlpreopen a convenience library: '$lib'" + fi + case $host in + # special handling for platforms with PE-DLLs. + *cygwin* | *mingw* | *cegcc* ) + # Linker will automatically link against shared library if both + # static and shared are present. Therefore, ensure we extract + # symbols from the import library if a shared library is present + # (otherwise, the dlopen module name will be incorrect). We do + # this by putting the import library name into $newdlprefiles. + # We recover the dlopen module name by 'saving' the la file + # name in a special purpose variable, and (later) extracting the + # dlname from the la file. + if test -n "$dlname"; then + func_tr_sh "$dir/$linklib" + eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname" + func_append newdlprefiles " $dir/$linklib" + else + func_append newdlprefiles " $dir/$old_library" + # Keep a list of preopened convenience libraries to check + # that they are being used correctly in the link pass. + test -z "$libdir" && \ + func_append dlpreconveniencelibs " $dir/$old_library" + fi + ;; + * ) + # Prefer using a static library (so that no silly _DYNAMIC symbols + # are required to link). + if test -n "$old_library"; then + func_append newdlprefiles " $dir/$old_library" + # Keep a list of preopened convenience libraries to check + # that they are being used correctly in the link pass. + test -z "$libdir" && \ + func_append dlpreconveniencelibs " $dir/$old_library" + # Otherwise, use the dlname, so that lt_dlopen finds it. + elif test -n "$dlname"; then + func_append newdlprefiles " $dir/$dlname" + else + func_append newdlprefiles " $dir/$linklib" + fi + ;; + esac + fi # $pass = dlpreopen + + if test -z "$libdir"; then + # Link the convenience library + if test lib = "$linkmode"; then + deplibs="$dir/$old_library $deplibs" + elif test prog,link = "$linkmode,$pass"; then + compile_deplibs="$dir/$old_library $compile_deplibs" + finalize_deplibs="$dir/$old_library $finalize_deplibs" + else + deplibs="$lib $deplibs" # used for prog,scan pass + fi + continue + fi + + + if test prog = "$linkmode" && test link != "$pass"; then + func_append newlib_search_path " $ladir" + deplibs="$lib $deplibs" + + linkalldeplibs=false + if test no != "$link_all_deplibs" || test -z "$library_names" || + test no = "$build_libtool_libs"; then + linkalldeplibs=: + fi + + tmp_libs= + for deplib in $dependency_libs; do + case $deplib in + -L*) func_stripname '-L' '' "$deplib" + func_resolve_sysroot "$func_stripname_result" + func_append newlib_search_path " $func_resolve_sysroot_result" + ;; + esac + # Need to link against all dependency_libs? + if $linkalldeplibs; then + deplibs="$deplib $deplibs" + else + # Need to hardcode shared library paths + # or/and link against static libraries + newdependency_libs="$deplib $newdependency_libs" + fi + if $opt_preserve_dup_deps; then + case "$tmp_libs " in + *" $deplib "*) func_append specialdeplibs " $deplib" ;; + esac + fi + func_append tmp_libs " $deplib" + done # for deplib + continue + fi # $linkmode = prog... + + if test prog,link = "$linkmode,$pass"; then + if test -n "$library_names" && + { { test no = "$prefer_static_libs" || + test built,yes = "$prefer_static_libs,$installed"; } || + test -z "$old_library"; }; then + # We need to hardcode the library path + if test -n "$shlibpath_var" && test -z "$avoidtemprpath"; then + # Make sure the rpath contains only unique directories. + case $temp_rpath: in + *"$absdir:"*) ;; + *) func_append temp_rpath "$absdir:" ;; + esac + fi + + # Hardcode the library path. + # Skip directories that are in the system default run-time + # search path. + case " $sys_lib_dlsearch_path " in + *" $absdir "*) ;; + *) + case "$compile_rpath " in + *" $absdir "*) ;; + *) func_append compile_rpath " $absdir" ;; + esac + ;; + esac + case " $sys_lib_dlsearch_path " in + *" $libdir "*) ;; + *) + case "$finalize_rpath " in + *" $libdir "*) ;; + *) func_append finalize_rpath " $libdir" ;; + esac + ;; + esac + fi # $linkmode,$pass = prog,link... + + if $alldeplibs && + { test pass_all = "$deplibs_check_method" || + { test yes = "$build_libtool_libs" && + test -n "$library_names"; }; }; then + # We only need to search for static libraries + continue + fi + fi + + link_static=no # Whether the deplib will be linked statically + use_static_libs=$prefer_static_libs + if test built = "$use_static_libs" && test yes = "$installed"; then + use_static_libs=no + fi + if test -n "$library_names" && + { test no = "$use_static_libs" || test -z "$old_library"; }; then + case $host in + *cygwin* | *mingw* | *cegcc* | *os2*) + # No point in relinking DLLs because paths are not encoded + func_append notinst_deplibs " $lib" + need_relink=no + ;; + *) + if test no = "$installed"; then + func_append notinst_deplibs " $lib" + need_relink=yes + fi + ;; + esac + # This is a shared library + + # Warn about portability, can't link against -module's on some + # systems (darwin). Don't bleat about dlopened modules though! + dlopenmodule= + for dlpremoduletest in $dlprefiles; do + if test "X$dlpremoduletest" = "X$lib"; then + dlopenmodule=$dlpremoduletest + break + fi + done + if test -z "$dlopenmodule" && test yes = "$shouldnotlink" && test link = "$pass"; then + echo + if test prog = "$linkmode"; then + $ECHO "*** Warning: Linking the executable $output against the loadable module" + else + $ECHO "*** Warning: Linking the shared library $output against the loadable module" + fi + $ECHO "*** $linklib is not portable!" + fi + if test lib = "$linkmode" && + test yes = "$hardcode_into_libs"; then + # Hardcode the library path. + # Skip directories that are in the system default run-time + # search path. + case " $sys_lib_dlsearch_path " in + *" $absdir "*) ;; + *) + case "$compile_rpath " in + *" $absdir "*) ;; + *) func_append compile_rpath " $absdir" ;; + esac + ;; + esac + case " $sys_lib_dlsearch_path " in + *" $libdir "*) ;; + *) + case "$finalize_rpath " in + *" $libdir "*) ;; + *) func_append finalize_rpath " $libdir" ;; + esac + ;; + esac + fi + + if test -n "$old_archive_from_expsyms_cmds"; then + # figure out the soname + set dummy $library_names + shift + realname=$1 + shift + libname=`eval "\\$ECHO \"$libname_spec\""` + # use dlname if we got it. it's perfectly good, no? + if test -n "$dlname"; then + soname=$dlname + elif test -n "$soname_spec"; then + # bleh windows + case $host in + *cygwin* | mingw* | *cegcc* | *os2*) + func_arith $current - $age + major=$func_arith_result + versuffix=-$major + ;; + esac + eval soname=\"$soname_spec\" + else + soname=$realname + fi + + # Make a new name for the extract_expsyms_cmds to use + soroot=$soname + func_basename "$soroot" + soname=$func_basename_result + func_stripname 'lib' '.dll' "$soname" + newlib=libimp-$func_stripname_result.a + + # If the library has no export list, then create one now + if test -f "$output_objdir/$soname-def"; then : + else + func_verbose "extracting exported symbol list from '$soname'" + func_execute_cmds "$extract_expsyms_cmds" 'exit $?' + fi + + # Create $newlib + if test -f "$output_objdir/$newlib"; then :; else + func_verbose "generating import library for '$soname'" + func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' + fi + # make sure the library variables are pointing to the new library + dir=$output_objdir + linklib=$newlib + fi # test -n "$old_archive_from_expsyms_cmds" + + if test prog = "$linkmode" || test relink != "$opt_mode"; then + add_shlibpath= + add_dir= + add= + lib_linked=yes + case $hardcode_action in + immediate | unsupported) + if test no = "$hardcode_direct"; then + add=$dir/$linklib + case $host in + *-*-sco3.2v5.0.[024]*) add_dir=-L$dir ;; + *-*-sysv4*uw2*) add_dir=-L$dir ;; + *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ + *-*-unixware7*) add_dir=-L$dir ;; + *-*-darwin* ) + # if the lib is a (non-dlopened) module then we cannot + # link against it, someone is ignoring the earlier warnings + if /usr/bin/file -L $add 2> /dev/null | + $GREP ": [^:]* bundle" >/dev/null; then + if test "X$dlopenmodule" != "X$lib"; then + $ECHO "*** Warning: lib $linklib is a module, not a shared library" + if test -z "$old_library"; then + echo + echo "*** And there doesn't seem to be a static archive available" + echo "*** The link will probably fail, sorry" + else + add=$dir/$old_library + fi + elif test -n "$old_library"; then + add=$dir/$old_library + fi + fi + esac + elif test no = "$hardcode_minus_L"; then + case $host in + *-*-sunos*) add_shlibpath=$dir ;; + esac + add_dir=-L$dir + add=-l$name + elif test no = "$hardcode_shlibpath_var"; then + add_shlibpath=$dir + add=-l$name + else + lib_linked=no + fi + ;; + relink) + if test yes = "$hardcode_direct" && + test no = "$hardcode_direct_absolute"; then + add=$dir/$linklib + elif test yes = "$hardcode_minus_L"; then + add_dir=-L$absdir + # Try looking first in the location we're being installed to. + if test -n "$inst_prefix_dir"; then + case $libdir in + [\\/]*) + func_append add_dir " -L$inst_prefix_dir$libdir" + ;; + esac + fi + add=-l$name + elif test yes = "$hardcode_shlibpath_var"; then + add_shlibpath=$dir + add=-l$name + else + lib_linked=no + fi + ;; + *) lib_linked=no ;; + esac + + if test yes != "$lib_linked"; then + func_fatal_configuration "unsupported hardcode properties" + fi + + if test -n "$add_shlibpath"; then + case :$compile_shlibpath: in + *":$add_shlibpath:"*) ;; + *) func_append compile_shlibpath "$add_shlibpath:" ;; + esac + fi + if test prog = "$linkmode"; then + test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" + test -n "$add" && compile_deplibs="$add $compile_deplibs" + else + test -n "$add_dir" && deplibs="$add_dir $deplibs" + test -n "$add" && deplibs="$add $deplibs" + if test yes != "$hardcode_direct" && + test yes != "$hardcode_minus_L" && + test yes = "$hardcode_shlibpath_var"; then + case :$finalize_shlibpath: in + *":$libdir:"*) ;; + *) func_append finalize_shlibpath "$libdir:" ;; + esac + fi + fi + fi + + if test prog = "$linkmode" || test relink = "$opt_mode"; then + add_shlibpath= + add_dir= + add= + # Finalize command for both is simple: just hardcode it. + if test yes = "$hardcode_direct" && + test no = "$hardcode_direct_absolute"; then + add=$libdir/$linklib + elif test yes = "$hardcode_minus_L"; then + add_dir=-L$libdir + add=-l$name + elif test yes = "$hardcode_shlibpath_var"; then + case :$finalize_shlibpath: in + *":$libdir:"*) ;; + *) func_append finalize_shlibpath "$libdir:" ;; + esac + add=-l$name + elif test yes = "$hardcode_automatic"; then + if test -n "$inst_prefix_dir" && + test -f "$inst_prefix_dir$libdir/$linklib"; then + add=$inst_prefix_dir$libdir/$linklib + else + add=$libdir/$linklib + fi + else + # We cannot seem to hardcode it, guess we'll fake it. + add_dir=-L$libdir + # Try looking first in the location we're being installed to. + if test -n "$inst_prefix_dir"; then + case $libdir in + [\\/]*) + func_append add_dir " -L$inst_prefix_dir$libdir" + ;; + esac + fi + add=-l$name + fi + + if test prog = "$linkmode"; then + test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" + test -n "$add" && finalize_deplibs="$add $finalize_deplibs" + else + test -n "$add_dir" && deplibs="$add_dir $deplibs" + test -n "$add" && deplibs="$add $deplibs" + fi + fi + elif test prog = "$linkmode"; then + # Here we assume that one of hardcode_direct or hardcode_minus_L + # is not unsupported. This is valid on all known static and + # shared platforms. + if test unsupported != "$hardcode_direct"; then + test -n "$old_library" && linklib=$old_library + compile_deplibs="$dir/$linklib $compile_deplibs" + finalize_deplibs="$dir/$linklib $finalize_deplibs" + else + compile_deplibs="-l$name -L$dir $compile_deplibs" + finalize_deplibs="-l$name -L$dir $finalize_deplibs" + fi + elif test yes = "$build_libtool_libs"; then + # Not a shared library + if test pass_all != "$deplibs_check_method"; then + # We're trying link a shared library against a static one + # but the system doesn't support it. + + # Just print a warning and add the library to dependency_libs so + # that the program can be linked against the static library. + echo + $ECHO "*** Warning: This system cannot link to static lib archive $lib." + echo "*** I have the capability to make that library automatically link in when" + echo "*** you link to this library. But I can only do this if you have a" + echo "*** shared version of the library, which you do not appear to have." + if test yes = "$module"; then + echo "*** But as you try to build a module library, libtool will still create " + echo "*** a static module, that should work as long as the dlopening application" + echo "*** is linked with the -dlopen flag to resolve symbols at runtime." + if test -z "$global_symbol_pipe"; then + echo + echo "*** However, this would only work if libtool was able to extract symbol" + echo "*** lists from a program, using 'nm' or equivalent, but libtool could" + echo "*** not find such a program. So, this module is probably useless." + echo "*** 'nm' from GNU binutils and a full rebuild may help." + fi + if test no = "$build_old_libs"; then + build_libtool_libs=module + build_old_libs=yes + else + build_libtool_libs=no + fi + fi + else + deplibs="$dir/$old_library $deplibs" + link_static=yes + fi + fi # link shared/static library? + + if test lib = "$linkmode"; then + if test -n "$dependency_libs" && + { test yes != "$hardcode_into_libs" || + test yes = "$build_old_libs" || + test yes = "$link_static"; }; then + # Extract -R from dependency_libs + temp_deplibs= + for libdir in $dependency_libs; do + case $libdir in + -R*) func_stripname '-R' '' "$libdir" + temp_xrpath=$func_stripname_result + case " $xrpath " in + *" $temp_xrpath "*) ;; + *) func_append xrpath " $temp_xrpath";; + esac;; + *) func_append temp_deplibs " $libdir";; + esac + done + dependency_libs=$temp_deplibs + fi + + func_append newlib_search_path " $absdir" + # Link against this library + test no = "$link_static" && newdependency_libs="$abs_ladir/$laname $newdependency_libs" + # ... and its dependency_libs + tmp_libs= + for deplib in $dependency_libs; do + newdependency_libs="$deplib $newdependency_libs" + case $deplib in + -L*) func_stripname '-L' '' "$deplib" + func_resolve_sysroot "$func_stripname_result";; + *) func_resolve_sysroot "$deplib" ;; + esac + if $opt_preserve_dup_deps; then + case "$tmp_libs " in + *" $func_resolve_sysroot_result "*) + func_append specialdeplibs " $func_resolve_sysroot_result" ;; + esac + fi + func_append tmp_libs " $func_resolve_sysroot_result" + done + + if test no != "$link_all_deplibs"; then + # Add the search paths of all dependency libraries + for deplib in $dependency_libs; do + path= + case $deplib in + -L*) path=$deplib ;; + *.la) + func_resolve_sysroot "$deplib" + deplib=$func_resolve_sysroot_result + func_dirname "$deplib" "" "." + dir=$func_dirname_result + # We need an absolute path. + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) absdir=$dir ;; + *) + absdir=`cd "$dir" && pwd` + if test -z "$absdir"; then + func_warning "cannot determine absolute directory name of '$dir'" + absdir=$dir + fi + ;; + esac + if $GREP "^installed=no" $deplib > /dev/null; then + case $host in + *-*-darwin*) + depdepl= + eval deplibrary_names=`$SED -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` + if test -n "$deplibrary_names"; then + for tmp in $deplibrary_names; do + depdepl=$tmp + done + if test -f "$absdir/$objdir/$depdepl"; then + depdepl=$absdir/$objdir/$depdepl + darwin_install_name=`$OTOOL -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` + if test -z "$darwin_install_name"; then + darwin_install_name=`$OTOOL64 -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` + fi + func_append compiler_flags " $wl-dylib_file $wl$darwin_install_name:$depdepl" + func_append linker_flags " -dylib_file $darwin_install_name:$depdepl" + path= + fi + fi + ;; + *) + path=-L$absdir/$objdir + ;; + esac + else + eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` + test -z "$libdir" && \ + func_fatal_error "'$deplib' is not a valid libtool archive" + test "$absdir" != "$libdir" && \ + func_warning "'$deplib' seems to be moved" + + path=-L$absdir + fi + ;; + esac + case " $deplibs " in + *" $path "*) ;; + *) deplibs="$path $deplibs" ;; + esac + done + fi # link_all_deplibs != no + fi # linkmode = lib + done # for deplib in $libs + if test link = "$pass"; then + if test prog = "$linkmode"; then + compile_deplibs="$new_inherited_linker_flags $compile_deplibs" + finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" + else + compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + fi + fi + dependency_libs=$newdependency_libs + if test dlpreopen = "$pass"; then + # Link the dlpreopened libraries before other libraries + for deplib in $save_deplibs; do + deplibs="$deplib $deplibs" + done + fi + if test dlopen != "$pass"; then + test conv = "$pass" || { + # Make sure lib_search_path contains only unique directories. + lib_search_path= + for dir in $newlib_search_path; do + case "$lib_search_path " in + *" $dir "*) ;; + *) func_append lib_search_path " $dir" ;; + esac + done + newlib_search_path= + } + + if test prog,link = "$linkmode,$pass"; then + vars="compile_deplibs finalize_deplibs" + else + vars=deplibs + fi + for var in $vars dependency_libs; do + # Add libraries to $var in reverse order + eval tmp_libs=\"\$$var\" + new_libs= + for deplib in $tmp_libs; do + # FIXME: Pedantically, this is the right thing to do, so + # that some nasty dependency loop isn't accidentally + # broken: + #new_libs="$deplib $new_libs" + # Pragmatically, this seems to cause very few problems in + # practice: + case $deplib in + -L*) new_libs="$deplib $new_libs" ;; + -R*) ;; + *) + # And here is the reason: when a library appears more + # than once as an explicit dependence of a library, or + # is implicitly linked in more than once by the + # compiler, it is considered special, and multiple + # occurrences thereof are not removed. Compare this + # with having the same library being listed as a + # dependency of multiple other libraries: in this case, + # we know (pedantically, we assume) the library does not + # need to be listed more than once, so we keep only the + # last copy. This is not always right, but it is rare + # enough that we require users that really mean to play + # such unportable linking tricks to link the library + # using -Wl,-lname, so that libtool does not consider it + # for duplicate removal. + case " $specialdeplibs " in + *" $deplib "*) new_libs="$deplib $new_libs" ;; + *) + case " $new_libs " in + *" $deplib "*) ;; + *) new_libs="$deplib $new_libs" ;; + esac + ;; + esac + ;; + esac + done + tmp_libs= + for deplib in $new_libs; do + case $deplib in + -L*) + case " $tmp_libs " in + *" $deplib "*) ;; + *) func_append tmp_libs " $deplib" ;; + esac + ;; + *) func_append tmp_libs " $deplib" ;; + esac + done + eval $var=\"$tmp_libs\" + done # for var + fi + + # Add Sun CC postdeps if required: + test CXX = "$tagname" && { + case $host_os in + linux*) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) # Sun C++ 5.9 + func_suncc_cstd_abi + + if test no != "$suncc_use_cstd_abi"; then + func_append postdeps ' -library=Cstd -library=Crun' + fi + ;; + esac + ;; + + solaris*) + func_cc_basename "$CC" + case $func_cc_basename_result in + CC* | sunCC*) + func_suncc_cstd_abi + + if test no != "$suncc_use_cstd_abi"; then + func_append postdeps ' -library=Cstd -library=Crun' + fi + ;; + esac + ;; + esac + } + + # Last step: remove runtime libs from dependency_libs + # (they stay in deplibs) + tmp_libs= + for i in $dependency_libs; do + case " $predeps $postdeps $compiler_lib_search_path " in + *" $i "*) + i= + ;; + esac + if test -n "$i"; then + func_append tmp_libs " $i" + fi + done + dependency_libs=$tmp_libs + done # for pass + if test prog = "$linkmode"; then + dlfiles=$newdlfiles + fi + if test prog = "$linkmode" || test lib = "$linkmode"; then + dlprefiles=$newdlprefiles + fi + + case $linkmode in + oldlib) + if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then + func_warning "'-dlopen' is ignored for archives" + fi + + case " $deplibs" in + *\ -l* | *\ -L*) + func_warning "'-l' and '-L' are ignored for archives" ;; + esac + + test -n "$rpath" && \ + func_warning "'-rpath' is ignored for archives" + + test -n "$xrpath" && \ + func_warning "'-R' is ignored for archives" + + test -n "$vinfo" && \ + func_warning "'-version-info/-version-number' is ignored for archives" + + test -n "$release" && \ + func_warning "'-release' is ignored for archives" + + test -n "$export_symbols$export_symbols_regex" && \ + func_warning "'-export-symbols' is ignored for archives" + + # Now set the variables for building old libraries. + build_libtool_libs=no + oldlibs=$output + func_append objs "$old_deplibs" + ;; + + lib) + # Make sure we only generate libraries of the form 'libNAME.la'. + case $outputname in + lib*) + func_stripname 'lib' '.la' "$outputname" + name=$func_stripname_result + eval shared_ext=\"$shrext_cmds\" + eval libname=\"$libname_spec\" + ;; + *) + test no = "$module" \ + && func_fatal_help "libtool library '$output' must begin with 'lib'" + + if test no != "$need_lib_prefix"; then + # Add the "lib" prefix for modules if required + func_stripname '' '.la' "$outputname" + name=$func_stripname_result + eval shared_ext=\"$shrext_cmds\" + eval libname=\"$libname_spec\" + else + func_stripname '' '.la' "$outputname" + libname=$func_stripname_result + fi + ;; + esac + + if test -n "$objs"; then + if test pass_all != "$deplibs_check_method"; then + func_fatal_error "cannot build libtool library '$output' from non-libtool objects on this host:$objs" + else + echo + $ECHO "*** Warning: Linking the shared library $output against the non-libtool" + $ECHO "*** objects $objs is not portable!" + func_append libobjs " $objs" + fi + fi + + test no = "$dlself" \ + || func_warning "'-dlopen self' is ignored for libtool libraries" + + set dummy $rpath + shift + test 1 -lt "$#" \ + && func_warning "ignoring multiple '-rpath's for a libtool library" + + install_libdir=$1 + + oldlibs= + if test -z "$rpath"; then + if test yes = "$build_libtool_libs"; then + # Building a libtool convenience library. + # Some compilers have problems with a '.al' extension so + # convenience libraries should have the same extension an + # archive normally would. + oldlibs="$output_objdir/$libname.$libext $oldlibs" + build_libtool_libs=convenience + build_old_libs=yes + fi + + test -n "$vinfo" && \ + func_warning "'-version-info/-version-number' is ignored for convenience libraries" + + test -n "$release" && \ + func_warning "'-release' is ignored for convenience libraries" + else + + # Parse the version information argument. + save_ifs=$IFS; IFS=: + set dummy $vinfo 0 0 0 + shift + IFS=$save_ifs + + test -n "$7" && \ + func_fatal_help "too many parameters to '-version-info'" + + # convert absolute version numbers to libtool ages + # this retains compatibility with .la files and attempts + # to make the code below a bit more comprehensible + + case $vinfo_number in + yes) + number_major=$1 + number_minor=$2 + number_revision=$3 + # + # There are really only two kinds -- those that + # use the current revision as the major version + # and those that subtract age and use age as + # a minor version. But, then there is irix + # that has an extra 1 added just for fun + # + case $version_type in + # correct linux to gnu/linux during the next big refactor + darwin|freebsd-elf|linux|osf|windows|none) + func_arith $number_major + $number_minor + current=$func_arith_result + age=$number_minor + revision=$number_revision + ;; + freebsd-aout|qnx|sunos) + current=$number_major + revision=$number_minor + age=0 + ;; + irix|nonstopux) + func_arith $number_major + $number_minor + current=$func_arith_result + age=$number_minor + revision=$number_minor + lt_irix_increment=no + ;; + esac + ;; + no) + current=$1 + revision=$2 + age=$3 + ;; + esac + + # Check that each of the things are valid numbers. + case $current in + 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; + *) + func_error "CURRENT '$current' must be a nonnegative integer" + func_fatal_error "'$vinfo' is not valid version information" + ;; + esac + + case $revision in + 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; + *) + func_error "REVISION '$revision' must be a nonnegative integer" + func_fatal_error "'$vinfo' is not valid version information" + ;; + esac + + case $age in + 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; + *) + func_error "AGE '$age' must be a nonnegative integer" + func_fatal_error "'$vinfo' is not valid version information" + ;; + esac + + if test "$age" -gt "$current"; then + func_error "AGE '$age' is greater than the current interface number '$current'" + func_fatal_error "'$vinfo' is not valid version information" + fi + + # Calculate the version variables. + major= + versuffix= + verstring= + case $version_type in + none) ;; + + darwin) + # Like Linux, but with the current version available in + # verstring for coding it into the library header + func_arith $current - $age + major=.$func_arith_result + versuffix=$major.$age.$revision + # Darwin ld doesn't like 0 for these options... + func_arith $current + 1 + minor_current=$func_arith_result + xlcverstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision" + verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" + # On Darwin other compilers + case $CC in + nagfor*) + verstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision" + ;; + *) + verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" + ;; + esac + ;; + + freebsd-aout) + major=.$current + versuffix=.$current.$revision + ;; + + freebsd-elf) + func_arith $current - $age + major=.$func_arith_result + versuffix=$major.$age.$revision + ;; + + irix | nonstopux) + if test no = "$lt_irix_increment"; then + func_arith $current - $age + else + func_arith $current - $age + 1 + fi + major=$func_arith_result + + case $version_type in + nonstopux) verstring_prefix=nonstopux ;; + *) verstring_prefix=sgi ;; + esac + verstring=$verstring_prefix$major.$revision + + # Add in all the interfaces that we are compatible with. + loop=$revision + while test 0 -ne "$loop"; do + func_arith $revision - $loop + iface=$func_arith_result + func_arith $loop - 1 + loop=$func_arith_result + verstring=$verstring_prefix$major.$iface:$verstring + done + + # Before this point, $major must not contain '.'. + major=.$major + versuffix=$major.$revision + ;; + + linux) # correct to gnu/linux during the next big refactor + func_arith $current - $age + major=.$func_arith_result + versuffix=$major.$age.$revision + ;; + + osf) + func_arith $current - $age + major=.$func_arith_result + versuffix=.$current.$age.$revision + verstring=$current.$age.$revision + + # Add in all the interfaces that we are compatible with. + loop=$age + while test 0 -ne "$loop"; do + func_arith $current - $loop + iface=$func_arith_result + func_arith $loop - 1 + loop=$func_arith_result + verstring=$verstring:$iface.0 + done + + # Make executables depend on our current version. + func_append verstring ":$current.0" + ;; + + qnx) + major=.$current + versuffix=.$current + ;; + + sco) + major=.$current + versuffix=.$current + ;; + + sunos) + major=.$current + versuffix=.$current.$revision + ;; + + windows) + # Use '-' rather than '.', since we only want one + # extension on DOS 8.3 file systems. + func_arith $current - $age + major=$func_arith_result + versuffix=-$major + ;; + + *) + func_fatal_configuration "unknown library version type '$version_type'" + ;; + esac + + # Clear the version info if we defaulted, and they specified a release. + if test -z "$vinfo" && test -n "$release"; then + major= + case $version_type in + darwin) + # we can't check for "0.0" in archive_cmds due to quoting + # problems, so we reset it completely + verstring= + ;; + *) + verstring=0.0 + ;; + esac + if test no = "$need_version"; then + versuffix= + else + versuffix=.0.0 + fi + fi + + # Remove version info from name if versioning should be avoided + if test yes,no = "$avoid_version,$need_version"; then + major= + versuffix= + verstring= + fi + + # Check to see if the archive will have undefined symbols. + if test yes = "$allow_undefined"; then + if test unsupported = "$allow_undefined_flag"; then + if test yes = "$build_old_libs"; then + func_warning "undefined symbols not allowed in $host shared libraries; building static only" + build_libtool_libs=no + else + func_fatal_error "can't build $host shared library unless -no-undefined is specified" + fi + fi + else + # Don't allow undefined symbols. + allow_undefined_flag=$no_undefined_flag + fi + + fi + + func_generate_dlsyms "$libname" "$libname" : + func_append libobjs " $symfileobj" + test " " = "$libobjs" && libobjs= + + if test relink != "$opt_mode"; then + # Remove our outputs, but don't remove object files since they + # may have been created when compiling PIC objects. + removelist= + tempremovelist=`$ECHO "$output_objdir/*"` + for p in $tempremovelist; do + case $p in + *.$objext | *.gcno) + ;; + $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/$libname$release.*) + if test -n "$precious_files_regex"; then + if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 + then + continue + fi + fi + func_append removelist " $p" + ;; + *) ;; + esac + done + test -n "$removelist" && \ + func_show_eval "${RM}r \$removelist" + fi + + # Now set the variables for building old libraries. + if test yes = "$build_old_libs" && test convenience != "$build_libtool_libs"; then + func_append oldlibs " $output_objdir/$libname.$libext" + + # Transform .lo files to .o files. + oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; $lo2o" | $NL2SP` + fi + + # Eliminate all temporary directories. + #for path in $notinst_path; do + # lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"` + # deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"` + # dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"` + #done + + if test -n "$xrpath"; then + # If the user specified any rpath flags, then add them. + temp_xrpath= + for libdir in $xrpath; do + func_replace_sysroot "$libdir" + func_append temp_xrpath " -R$func_replace_sysroot_result" + case "$finalize_rpath " in + *" $libdir "*) ;; + *) func_append finalize_rpath " $libdir" ;; + esac + done + if test yes != "$hardcode_into_libs" || test yes = "$build_old_libs"; then + dependency_libs="$temp_xrpath $dependency_libs" + fi + fi + + # Make sure dlfiles contains only unique files that won't be dlpreopened + old_dlfiles=$dlfiles + dlfiles= + for lib in $old_dlfiles; do + case " $dlprefiles $dlfiles " in + *" $lib "*) ;; + *) func_append dlfiles " $lib" ;; + esac + done + + # Make sure dlprefiles contains only unique files + old_dlprefiles=$dlprefiles + dlprefiles= + for lib in $old_dlprefiles; do + case "$dlprefiles " in + *" $lib "*) ;; + *) func_append dlprefiles " $lib" ;; + esac + done + + if test yes = "$build_libtool_libs"; then + if test -n "$rpath"; then + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*) + # these systems don't actually have a c library (as such)! + ;; + *-*-rhapsody* | *-*-darwin1.[012]) + # Rhapsody C library is in the System framework + func_append deplibs " System.ltframework" + ;; + *-*-netbsd*) + # Don't link with libc until the a.out ld.so is fixed. + ;; + *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) + # Do not include libc due to us having libc/libc_r. + ;; + *-*-sco3.2v5* | *-*-sco5v6*) + # Causes problems with __ctype + ;; + *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) + # Compiler inserts libc in the correct place for threads to work + ;; + *) + # Add libc to deplibs on all other systems if necessary. + if test yes = "$build_libtool_need_lc"; then + func_append deplibs " -lc" + fi + ;; + esac + fi + + # Transform deplibs into only deplibs that can be linked in shared. + name_save=$name + libname_save=$libname + release_save=$release + versuffix_save=$versuffix + major_save=$major + # I'm not sure if I'm treating the release correctly. I think + # release should show up in the -l (ie -lgmp5) so we don't want to + # add it in twice. Is that correct? + release= + versuffix= + major= + newdeplibs= + droppeddeps=no + case $deplibs_check_method in + pass_all) + # Don't check for shared/static. Everything works. + # This might be a little naive. We might want to check + # whether the library exists or not. But this is on + # osf3 & osf4 and I'm not really sure... Just + # implementing what was already the behavior. + newdeplibs=$deplibs + ;; + test_compile) + # This code stresses the "libraries are programs" paradigm to its + # limits. Maybe even breaks it. We compile a program, linking it + # against the deplibs as a proxy for the library. Then we can check + # whether they linked in statically or dynamically with ldd. + $opt_dry_run || $RM conftest.c + cat > conftest.c </dev/null` + $nocaseglob + else + potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` + fi + for potent_lib in $potential_libs; do + # Follow soft links. + if ls -lLd "$potent_lib" 2>/dev/null | + $GREP " -> " >/dev/null; then + continue + fi + # The statement above tries to avoid entering an + # endless loop below, in case of cyclic links. + # We might still enter an endless loop, since a link + # loop can be closed while we follow links, + # but so what? + potlib=$potent_lib + while test -h "$potlib" 2>/dev/null; do + potliblink=`ls -ld $potlib | $SED 's/.* -> //'` + case $potliblink in + [\\/]* | [A-Za-z]:[\\/]*) potlib=$potliblink;; + *) potlib=`$ECHO "$potlib" | $SED 's|[^/]*$||'`"$potliblink";; + esac + done + if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | + $SED -e 10q | + $EGREP "$file_magic_regex" > /dev/null; then + func_append newdeplibs " $a_deplib" + a_deplib= + break 2 + fi + done + done + fi + if test -n "$a_deplib"; then + droppeddeps=yes + echo + $ECHO "*** Warning: linker path does not have real file for library $a_deplib." + echo "*** I have the capability to make that library automatically link in when" + echo "*** you link to this library. But I can only do this if you have a" + echo "*** shared version of the library, which you do not appear to have" + echo "*** because I did check the linker path looking for a file starting" + if test -z "$potlib"; then + $ECHO "*** with $libname but no candidates were found. (...for file magic test)" + else + $ECHO "*** with $libname and none of the candidates passed a file format test" + $ECHO "*** using a file magic. Last file checked: $potlib" + fi + fi + ;; + *) + # Add a -L argument. + func_append newdeplibs " $a_deplib" + ;; + esac + done # Gone through all deplibs. + ;; + match_pattern*) + set dummy $deplibs_check_method; shift + match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` + for a_deplib in $deplibs; do + case $a_deplib in + -l*) + func_stripname -l '' "$a_deplib" + name=$func_stripname_result + if test yes = "$allow_libtool_libs_with_static_runtimes"; then + case " $predeps $postdeps " in + *" $a_deplib "*) + func_append newdeplibs " $a_deplib" + a_deplib= + ;; + esac + fi + if test -n "$a_deplib"; then + libname=`eval "\\$ECHO \"$libname_spec\""` + for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do + potential_libs=`ls $i/$libname[.-]* 2>/dev/null` + for potent_lib in $potential_libs; do + potlib=$potent_lib # see symlink-check above in file_magic test + if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \ + $EGREP "$match_pattern_regex" > /dev/null; then + func_append newdeplibs " $a_deplib" + a_deplib= + break 2 + fi + done + done + fi + if test -n "$a_deplib"; then + droppeddeps=yes + echo + $ECHO "*** Warning: linker path does not have real file for library $a_deplib." + echo "*** I have the capability to make that library automatically link in when" + echo "*** you link to this library. But I can only do this if you have a" + echo "*** shared version of the library, which you do not appear to have" + echo "*** because I did check the linker path looking for a file starting" + if test -z "$potlib"; then + $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" + else + $ECHO "*** with $libname and none of the candidates passed a file format test" + $ECHO "*** using a regex pattern. Last file checked: $potlib" + fi + fi + ;; + *) + # Add a -L argument. + func_append newdeplibs " $a_deplib" + ;; + esac + done # Gone through all deplibs. + ;; + none | unknown | *) + newdeplibs= + tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'` + if test yes = "$allow_libtool_libs_with_static_runtimes"; then + for i in $predeps $postdeps; do + # can't use Xsed below, because $i might contain '/' + tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s|$i||"` + done + fi + case $tmp_deplibs in + *[!\ \ ]*) + echo + if test none = "$deplibs_check_method"; then + echo "*** Warning: inter-library dependencies are not supported in this platform." + else + echo "*** Warning: inter-library dependencies are not known to be supported." + fi + echo "*** All declared inter-library dependencies are being dropped." + droppeddeps=yes + ;; + esac + ;; + esac + versuffix=$versuffix_save + major=$major_save + release=$release_save + libname=$libname_save + name=$name_save + + case $host in + *-*-rhapsody* | *-*-darwin1.[012]) + # On Rhapsody replace the C library with the System framework + newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'` + ;; + esac + + if test yes = "$droppeddeps"; then + if test yes = "$module"; then + echo + echo "*** Warning: libtool could not satisfy all declared inter-library" + $ECHO "*** dependencies of module $libname. Therefore, libtool will create" + echo "*** a static module, that should work as long as the dlopening" + echo "*** application is linked with the -dlopen flag." + if test -z "$global_symbol_pipe"; then + echo + echo "*** However, this would only work if libtool was able to extract symbol" + echo "*** lists from a program, using 'nm' or equivalent, but libtool could" + echo "*** not find such a program. So, this module is probably useless." + echo "*** 'nm' from GNU binutils and a full rebuild may help." + fi + if test no = "$build_old_libs"; then + oldlibs=$output_objdir/$libname.$libext + build_libtool_libs=module + build_old_libs=yes + else + build_libtool_libs=no + fi + else + echo "*** The inter-library dependencies that have been dropped here will be" + echo "*** automatically added whenever a program is linked with this library" + echo "*** or is declared to -dlopen it." + + if test no = "$allow_undefined"; then + echo + echo "*** Since this library must not contain undefined symbols," + echo "*** because either the platform does not support them or" + echo "*** it was explicitly requested with -no-undefined," + echo "*** libtool will only create a static version of it." + if test no = "$build_old_libs"; then + oldlibs=$output_objdir/$libname.$libext + build_libtool_libs=module + build_old_libs=yes + else + build_libtool_libs=no + fi + fi + fi + fi + # Done checking deplibs! + deplibs=$newdeplibs + fi + # Time to change all our "foo.ltframework" stuff back to "-framework foo" + case $host in + *-*-darwin*) + newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + ;; + esac + + # move library search paths that coincide with paths to not yet + # installed libraries to the beginning of the library search list + new_libs= + for path in $notinst_path; do + case " $new_libs " in + *" -L$path/$objdir "*) ;; + *) + case " $deplibs " in + *" -L$path/$objdir "*) + func_append new_libs " -L$path/$objdir" ;; + esac + ;; + esac + done + for deplib in $deplibs; do + case $deplib in + -L*) + case " $new_libs " in + *" $deplib "*) ;; + *) func_append new_libs " $deplib" ;; + esac + ;; + *) func_append new_libs " $deplib" ;; + esac + done + deplibs=$new_libs + + # All the library-specific variables (install_libdir is set above). + library_names= + old_library= + dlname= + + # Test again, we may have decided not to build it any more + if test yes = "$build_libtool_libs"; then + # Remove $wl instances when linking with ld. + # FIXME: should test the right _cmds variable. + case $archive_cmds in + *\$LD\ *) wl= ;; + esac + if test yes = "$hardcode_into_libs"; then + # Hardcode the library paths + hardcode_libdirs= + dep_rpath= + rpath=$finalize_rpath + test relink = "$opt_mode" || rpath=$compile_rpath$rpath + for libdir in $rpath; do + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + func_replace_sysroot "$libdir" + libdir=$func_replace_sysroot_result + if test -z "$hardcode_libdirs"; then + hardcode_libdirs=$libdir + else + # Just accumulate the unique libdirs. + case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + func_append dep_rpath " $flag" + fi + elif test -n "$runpath_var"; then + case "$perm_rpath " in + *" $libdir "*) ;; + *) func_append perm_rpath " $libdir" ;; + esac + fi + done + # Substitute the hardcoded libdirs into the rpath. + if test -n "$hardcode_libdir_separator" && + test -n "$hardcode_libdirs"; then + libdir=$hardcode_libdirs + eval "dep_rpath=\"$hardcode_libdir_flag_spec\"" + fi + if test -n "$runpath_var" && test -n "$perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $perm_rpath; do + func_append rpath "$dir:" + done + eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" + fi + test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" + fi + + shlibpath=$finalize_shlibpath + test relink = "$opt_mode" || shlibpath=$compile_shlibpath$shlibpath + if test -n "$shlibpath"; then + eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" + fi + + # Get the real and link names of the library. + eval shared_ext=\"$shrext_cmds\" + eval library_names=\"$library_names_spec\" + set dummy $library_names + shift + realname=$1 + shift + + if test -n "$soname_spec"; then + eval soname=\"$soname_spec\" + else + soname=$realname + fi + if test -z "$dlname"; then + dlname=$soname + fi + + lib=$output_objdir/$realname + linknames= + for link + do + func_append linknames " $link" + done + + # Use standard objects if they are pic + test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP` + test "X$libobjs" = "X " && libobjs= + + delfiles= + if test -n "$export_symbols" && test -n "$include_expsyms"; then + $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" + export_symbols=$output_objdir/$libname.uexp + func_append delfiles " $export_symbols" + fi + + orig_export_symbols= + case $host_os in + cygwin* | mingw* | cegcc*) + if test -n "$export_symbols" && test -z "$export_symbols_regex"; then + # exporting using user supplied symfile + func_dll_def_p "$export_symbols" || { + # and it's NOT already a .def file. Must figure out + # which of the given symbols are data symbols and tag + # them as such. So, trigger use of export_symbols_cmds. + # export_symbols gets reassigned inside the "prepare + # the list of exported symbols" if statement, so the + # include_expsyms logic still works. + orig_export_symbols=$export_symbols + export_symbols= + always_export_symbols=yes + } + fi + ;; + esac + + # Prepare the list of exported symbols + if test -z "$export_symbols"; then + if test yes = "$always_export_symbols" || test -n "$export_symbols_regex"; then + func_verbose "generating symbol list for '$libname.la'" + export_symbols=$output_objdir/$libname.exp + $opt_dry_run || $RM $export_symbols + cmds=$export_symbols_cmds + save_ifs=$IFS; IFS='~' + for cmd1 in $cmds; do + IFS=$save_ifs + # Take the normal branch if the nm_file_list_spec branch + # doesn't work or if tool conversion is not needed. + case $nm_file_list_spec~$to_tool_file_cmd in + *~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*) + try_normal_branch=yes + eval cmd=\"$cmd1\" + func_len " $cmd" + len=$func_len_result + ;; + *) + try_normal_branch=no + ;; + esac + if test yes = "$try_normal_branch" \ + && { test "$len" -lt "$max_cmd_len" \ + || test "$max_cmd_len" -le -1; } + then + func_show_eval "$cmd" 'exit $?' + skipped_export=false + elif test -n "$nm_file_list_spec"; then + func_basename "$output" + output_la=$func_basename_result + save_libobjs=$libobjs + save_output=$output + output=$output_objdir/$output_la.nm + func_to_tool_file "$output" + libobjs=$nm_file_list_spec$func_to_tool_file_result + func_append delfiles " $output" + func_verbose "creating $NM input file list: $output" + for obj in $save_libobjs; do + func_to_tool_file "$obj" + $ECHO "$func_to_tool_file_result" + done > "$output" + eval cmd=\"$cmd1\" + func_show_eval "$cmd" 'exit $?' + output=$save_output + libobjs=$save_libobjs + skipped_export=false + else + # The command line is too long to execute in one step. + func_verbose "using reloadable object file for export list..." + skipped_export=: + # Break out early, otherwise skipped_export may be + # set to false by a later but shorter cmd. + break + fi + done + IFS=$save_ifs + if test -n "$export_symbols_regex" && test : != "$skipped_export"; then + func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' + func_show_eval '$MV "${export_symbols}T" "$export_symbols"' + fi + fi + fi + + if test -n "$export_symbols" && test -n "$include_expsyms"; then + tmp_export_symbols=$export_symbols + test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols + $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' + fi + + if test : != "$skipped_export" && test -n "$orig_export_symbols"; then + # The given exports_symbols file has to be filtered, so filter it. + func_verbose "filter symbol list for '$libname.la' to tag DATA exports" + # FIXME: $output_objdir/$libname.filter potentially contains lots of + # 's' commands, which not all seds can handle. GNU sed should be fine + # though. Also, the filter scales superlinearly with the number of + # global variables. join(1) would be nice here, but unfortunately + # isn't a blessed tool. + $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter + func_append delfiles " $export_symbols $output_objdir/$libname.filter" + export_symbols=$output_objdir/$libname.def + $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols + fi + + tmp_deplibs= + for test_deplib in $deplibs; do + case " $convenience " in + *" $test_deplib "*) ;; + *) + func_append tmp_deplibs " $test_deplib" + ;; + esac + done + deplibs=$tmp_deplibs + + if test -n "$convenience"; then + if test -n "$whole_archive_flag_spec" && + test yes = "$compiler_needs_object" && + test -z "$libobjs"; then + # extract the archives, so we have objects to list. + # TODO: could optimize this to just extract one archive. + whole_archive_flag_spec= + fi + if test -n "$whole_archive_flag_spec"; then + save_libobjs=$libobjs + eval libobjs=\"\$libobjs $whole_archive_flag_spec\" + test "X$libobjs" = "X " && libobjs= + else + gentop=$output_objdir/${outputname}x + func_append generated " $gentop" + + func_extract_archives $gentop $convenience + func_append libobjs " $func_extract_archives_result" + test "X$libobjs" = "X " && libobjs= + fi + fi + + if test yes = "$thread_safe" && test -n "$thread_safe_flag_spec"; then + eval flag=\"$thread_safe_flag_spec\" + func_append linker_flags " $flag" + fi + + # Make a backup of the uninstalled library when relinking + if test relink = "$opt_mode"; then + $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? + fi + + # Do each of the archive commands. + if test yes = "$module" && test -n "$module_cmds"; then + if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then + eval test_cmds=\"$module_expsym_cmds\" + cmds=$module_expsym_cmds + else + eval test_cmds=\"$module_cmds\" + cmds=$module_cmds + fi + else + if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then + eval test_cmds=\"$archive_expsym_cmds\" + cmds=$archive_expsym_cmds + else + eval test_cmds=\"$archive_cmds\" + cmds=$archive_cmds + fi + fi + + if test : != "$skipped_export" && + func_len " $test_cmds" && + len=$func_len_result && + test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then + : + else + # The command line is too long to link in one step, link piecewise + # or, if using GNU ld and skipped_export is not :, use a linker + # script. + + # Save the value of $output and $libobjs because we want to + # use them later. If we have whole_archive_flag_spec, we + # want to use save_libobjs as it was before + # whole_archive_flag_spec was expanded, because we can't + # assume the linker understands whole_archive_flag_spec. + # This may have to be revisited, in case too many + # convenience libraries get linked in and end up exceeding + # the spec. + if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then + save_libobjs=$libobjs + fi + save_output=$output + func_basename "$output" + output_la=$func_basename_result + + # Clear the reloadable object creation command queue and + # initialize k to one. + test_cmds= + concat_cmds= + objlist= + last_robj= + k=1 + + if test -n "$save_libobjs" && test : != "$skipped_export" && test yes = "$with_gnu_ld"; then + output=$output_objdir/$output_la.lnkscript + func_verbose "creating GNU ld script: $output" + echo 'INPUT (' > $output + for obj in $save_libobjs + do + func_to_tool_file "$obj" + $ECHO "$func_to_tool_file_result" >> $output + done + echo ')' >> $output + func_append delfiles " $output" + func_to_tool_file "$output" + output=$func_to_tool_file_result + elif test -n "$save_libobjs" && test : != "$skipped_export" && test -n "$file_list_spec"; then + output=$output_objdir/$output_la.lnk + func_verbose "creating linker input file list: $output" + : > $output + set x $save_libobjs + shift + firstobj= + if test yes = "$compiler_needs_object"; then + firstobj="$1 " + shift + fi + for obj + do + func_to_tool_file "$obj" + $ECHO "$func_to_tool_file_result" >> $output + done + func_append delfiles " $output" + func_to_tool_file "$output" + output=$firstobj\"$file_list_spec$func_to_tool_file_result\" + else + if test -n "$save_libobjs"; then + func_verbose "creating reloadable object files..." + output=$output_objdir/$output_la-$k.$objext + eval test_cmds=\"$reload_cmds\" + func_len " $test_cmds" + len0=$func_len_result + len=$len0 + + # Loop over the list of objects to be linked. + for obj in $save_libobjs + do + func_len " $obj" + func_arith $len + $func_len_result + len=$func_arith_result + if test -z "$objlist" || + test "$len" -lt "$max_cmd_len"; then + func_append objlist " $obj" + else + # The command $test_cmds is almost too long, add a + # command to the queue. + if test 1 -eq "$k"; then + # The first file doesn't have a previous command to add. + reload_objs=$objlist + eval concat_cmds=\"$reload_cmds\" + else + # All subsequent reloadable object files will link in + # the last one created. + reload_objs="$objlist $last_robj" + eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\" + fi + last_robj=$output_objdir/$output_la-$k.$objext + func_arith $k + 1 + k=$func_arith_result + output=$output_objdir/$output_la-$k.$objext + objlist=" $obj" + func_len " $last_robj" + func_arith $len0 + $func_len_result + len=$func_arith_result + fi + done + # Handle the remaining objects by creating one last + # reloadable object file. All subsequent reloadable object + # files will link in the last one created. + test -z "$concat_cmds" || concat_cmds=$concat_cmds~ + reload_objs="$objlist $last_robj" + eval concat_cmds=\"\$concat_cmds$reload_cmds\" + if test -n "$last_robj"; then + eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" + fi + func_append delfiles " $output" + + else + output= + fi + + ${skipped_export-false} && { + func_verbose "generating symbol list for '$libname.la'" + export_symbols=$output_objdir/$libname.exp + $opt_dry_run || $RM $export_symbols + libobjs=$output + # Append the command to create the export file. + test -z "$concat_cmds" || concat_cmds=$concat_cmds~ + eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" + if test -n "$last_robj"; then + eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" + fi + } + + test -n "$save_libobjs" && + func_verbose "creating a temporary reloadable object file: $output" + + # Loop through the commands generated above and execute them. + save_ifs=$IFS; IFS='~' + for cmd in $concat_cmds; do + IFS=$save_ifs + $opt_quiet || { + func_quote_for_expand "$cmd" + eval "func_echo $func_quote_for_expand_result" + } + $opt_dry_run || eval "$cmd" || { + lt_exit=$? + + # Restore the uninstalled library and exit + if test relink = "$opt_mode"; then + ( cd "$output_objdir" && \ + $RM "${realname}T" && \ + $MV "${realname}U" "$realname" ) + fi + + exit $lt_exit + } + done + IFS=$save_ifs + + if test -n "$export_symbols_regex" && ${skipped_export-false}; then + func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' + func_show_eval '$MV "${export_symbols}T" "$export_symbols"' + fi + fi + + ${skipped_export-false} && { + if test -n "$export_symbols" && test -n "$include_expsyms"; then + tmp_export_symbols=$export_symbols + test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols + $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' + fi + + if test -n "$orig_export_symbols"; then + # The given exports_symbols file has to be filtered, so filter it. + func_verbose "filter symbol list for '$libname.la' to tag DATA exports" + # FIXME: $output_objdir/$libname.filter potentially contains lots of + # 's' commands, which not all seds can handle. GNU sed should be fine + # though. Also, the filter scales superlinearly with the number of + # global variables. join(1) would be nice here, but unfortunately + # isn't a blessed tool. + $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter + func_append delfiles " $export_symbols $output_objdir/$libname.filter" + export_symbols=$output_objdir/$libname.def + $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols + fi + } + + libobjs=$output + # Restore the value of output. + output=$save_output + + if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then + eval libobjs=\"\$libobjs $whole_archive_flag_spec\" + test "X$libobjs" = "X " && libobjs= + fi + # Expand the library linking commands again to reset the + # value of $libobjs for piecewise linking. + + # Do each of the archive commands. + if test yes = "$module" && test -n "$module_cmds"; then + if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then + cmds=$module_expsym_cmds + else + cmds=$module_cmds + fi + else + if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then + cmds=$archive_expsym_cmds + else + cmds=$archive_cmds + fi + fi + fi + + if test -n "$delfiles"; then + # Append the command to remove temporary files to $cmds. + eval cmds=\"\$cmds~\$RM $delfiles\" + fi + + # Add any objects from preloaded convenience libraries + if test -n "$dlprefiles"; then + gentop=$output_objdir/${outputname}x + func_append generated " $gentop" + + func_extract_archives $gentop $dlprefiles + func_append libobjs " $func_extract_archives_result" + test "X$libobjs" = "X " && libobjs= + fi + + save_ifs=$IFS; IFS='~' + for cmd in $cmds; do + IFS=$sp$nl + eval cmd=\"$cmd\" + IFS=$save_ifs + $opt_quiet || { + func_quote_for_expand "$cmd" + eval "func_echo $func_quote_for_expand_result" + } + $opt_dry_run || eval "$cmd" || { + lt_exit=$? + + # Restore the uninstalled library and exit + if test relink = "$opt_mode"; then + ( cd "$output_objdir" && \ + $RM "${realname}T" && \ + $MV "${realname}U" "$realname" ) + fi + + exit $lt_exit + } + done + IFS=$save_ifs + + # Restore the uninstalled library and exit + if test relink = "$opt_mode"; then + $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? + + if test -n "$convenience"; then + if test -z "$whole_archive_flag_spec"; then + func_show_eval '${RM}r "$gentop"' + fi + fi + + exit $EXIT_SUCCESS + fi + + # Create links to the real library. + for linkname in $linknames; do + if test "$realname" != "$linkname"; then + func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' + fi + done + + # If -module or -export-dynamic was specified, set the dlname. + if test yes = "$module" || test yes = "$export_dynamic"; then + # On all known operating systems, these are identical. + dlname=$soname + fi + fi + ;; + + obj) + if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then + func_warning "'-dlopen' is ignored for objects" + fi + + case " $deplibs" in + *\ -l* | *\ -L*) + func_warning "'-l' and '-L' are ignored for objects" ;; + esac + + test -n "$rpath" && \ + func_warning "'-rpath' is ignored for objects" + + test -n "$xrpath" && \ + func_warning "'-R' is ignored for objects" + + test -n "$vinfo" && \ + func_warning "'-version-info' is ignored for objects" + + test -n "$release" && \ + func_warning "'-release' is ignored for objects" + + case $output in + *.lo) + test -n "$objs$old_deplibs" && \ + func_fatal_error "cannot build library object '$output' from non-libtool objects" + + libobj=$output + func_lo2o "$libobj" + obj=$func_lo2o_result + ;; + *) + libobj= + obj=$output + ;; + esac + + # Delete the old objects. + $opt_dry_run || $RM $obj $libobj + + # Objects from convenience libraries. This assumes + # single-version convenience libraries. Whenever we create + # different ones for PIC/non-PIC, this we'll have to duplicate + # the extraction. + reload_conv_objs= + gentop= + # if reload_cmds runs $LD directly, get rid of -Wl from + # whole_archive_flag_spec and hope we can get by with turning comma + # into space. + case $reload_cmds in + *\$LD[\ \$]*) wl= ;; + esac + if test -n "$convenience"; then + if test -n "$whole_archive_flag_spec"; then + eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" + test -n "$wl" || tmp_whole_archive_flags=`$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'` + reload_conv_objs=$reload_objs\ $tmp_whole_archive_flags + else + gentop=$output_objdir/${obj}x + func_append generated " $gentop" + + func_extract_archives $gentop $convenience + reload_conv_objs="$reload_objs $func_extract_archives_result" + fi + fi + + # If we're not building shared, we need to use non_pic_objs + test yes = "$build_libtool_libs" || libobjs=$non_pic_objects + + # Create the old-style object. + reload_objs=$objs$old_deplibs' '`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; /\.lib$/d; $lo2o" | $NL2SP`' '$reload_conv_objs + + output=$obj + func_execute_cmds "$reload_cmds" 'exit $?' + + # Exit if we aren't doing a library object file. + if test -z "$libobj"; then + if test -n "$gentop"; then + func_show_eval '${RM}r "$gentop"' + fi + + exit $EXIT_SUCCESS + fi + + test yes = "$build_libtool_libs" || { + if test -n "$gentop"; then + func_show_eval '${RM}r "$gentop"' + fi + + # Create an invalid libtool object if no PIC, so that we don't + # accidentally link it into a program. + # $show "echo timestamp > $libobj" + # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? + exit $EXIT_SUCCESS + } + + if test -n "$pic_flag" || test default != "$pic_mode"; then + # Only do commands if we really have different PIC objects. + reload_objs="$libobjs $reload_conv_objs" + output=$libobj + func_execute_cmds "$reload_cmds" 'exit $?' + fi + + if test -n "$gentop"; then + func_show_eval '${RM}r "$gentop"' + fi + + exit $EXIT_SUCCESS + ;; + + prog) + case $host in + *cygwin*) func_stripname '' '.exe' "$output" + output=$func_stripname_result.exe;; + esac + test -n "$vinfo" && \ + func_warning "'-version-info' is ignored for programs" + + test -n "$release" && \ + func_warning "'-release' is ignored for programs" + + $preload \ + && test unknown,unknown,unknown = "$dlopen_support,$dlopen_self,$dlopen_self_static" \ + && func_warning "'LT_INIT([dlopen])' not used. Assuming no dlopen support." + + case $host in + *-*-rhapsody* | *-*-darwin1.[012]) + # On Rhapsody replace the C library is the System framework + compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'` + finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'` + ;; + esac + + case $host in + *-*-darwin*) + # Don't allow lazy linking, it breaks C++ global constructors + # But is supposedly fixed on 10.4 or later (yay!). + if test CXX = "$tagname"; then + case ${MACOSX_DEPLOYMENT_TARGET-10.0} in + 10.[0123]) + func_append compile_command " $wl-bind_at_load" + func_append finalize_command " $wl-bind_at_load" + ;; + esac + fi + # Time to change all our "foo.ltframework" stuff back to "-framework foo" + compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` + ;; + esac + + + # move library search paths that coincide with paths to not yet + # installed libraries to the beginning of the library search list + new_libs= + for path in $notinst_path; do + case " $new_libs " in + *" -L$path/$objdir "*) ;; + *) + case " $compile_deplibs " in + *" -L$path/$objdir "*) + func_append new_libs " -L$path/$objdir" ;; + esac + ;; + esac + done + for deplib in $compile_deplibs; do + case $deplib in + -L*) + case " $new_libs " in + *" $deplib "*) ;; + *) func_append new_libs " $deplib" ;; + esac + ;; + *) func_append new_libs " $deplib" ;; + esac + done + compile_deplibs=$new_libs + + + func_append compile_command " $compile_deplibs" + func_append finalize_command " $finalize_deplibs" + + if test -n "$rpath$xrpath"; then + # If the user specified any rpath flags, then add them. + for libdir in $rpath $xrpath; do + # This is the magic to use -rpath. + case "$finalize_rpath " in + *" $libdir "*) ;; + *) func_append finalize_rpath " $libdir" ;; + esac + done + fi + + # Now hardcode the library paths + rpath= + hardcode_libdirs= + for libdir in $compile_rpath $finalize_rpath; do + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + if test -z "$hardcode_libdirs"; then + hardcode_libdirs=$libdir + else + # Just accumulate the unique libdirs. + case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + func_append rpath " $flag" + fi + elif test -n "$runpath_var"; then + case "$perm_rpath " in + *" $libdir "*) ;; + *) func_append perm_rpath " $libdir" ;; + esac + fi + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) + testbindir=`$ECHO "$libdir" | $SED -e 's*/lib$*/bin*'` + case :$dllsearchpath: in + *":$libdir:"*) ;; + ::) dllsearchpath=$libdir;; + *) func_append dllsearchpath ":$libdir";; + esac + case :$dllsearchpath: in + *":$testbindir:"*) ;; + ::) dllsearchpath=$testbindir;; + *) func_append dllsearchpath ":$testbindir";; + esac + ;; + esac + done + # Substitute the hardcoded libdirs into the rpath. + if test -n "$hardcode_libdir_separator" && + test -n "$hardcode_libdirs"; then + libdir=$hardcode_libdirs + eval rpath=\" $hardcode_libdir_flag_spec\" + fi + compile_rpath=$rpath + + rpath= + hardcode_libdirs= + for libdir in $finalize_rpath; do + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + if test -z "$hardcode_libdirs"; then + hardcode_libdirs=$libdir + else + # Just accumulate the unique libdirs. + case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + func_append rpath " $flag" + fi + elif test -n "$runpath_var"; then + case "$finalize_perm_rpath " in + *" $libdir "*) ;; + *) func_append finalize_perm_rpath " $libdir" ;; + esac + fi + done + # Substitute the hardcoded libdirs into the rpath. + if test -n "$hardcode_libdir_separator" && + test -n "$hardcode_libdirs"; then + libdir=$hardcode_libdirs + eval rpath=\" $hardcode_libdir_flag_spec\" + fi + finalize_rpath=$rpath + + if test -n "$libobjs" && test yes = "$build_old_libs"; then + # Transform all the library objects into standard objects. + compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP` + finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP` + fi + + func_generate_dlsyms "$outputname" "@PROGRAM@" false + + # template prelinking step + if test -n "$prelink_cmds"; then + func_execute_cmds "$prelink_cmds" 'exit $?' + fi + + wrappers_required=: + case $host in + *cegcc* | *mingw32ce*) + # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway. + wrappers_required=false + ;; + *cygwin* | *mingw* ) + test yes = "$build_libtool_libs" || wrappers_required=false + ;; + *) + if test no = "$need_relink" || test yes != "$build_libtool_libs"; then + wrappers_required=false + fi + ;; + esac + $wrappers_required || { + # Replace the output file specification. + compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'` + link_command=$compile_command$compile_rpath + + # We have no uninstalled library dependencies, so finalize right now. + exit_status=0 + func_show_eval "$link_command" 'exit_status=$?' + + if test -n "$postlink_cmds"; then + func_to_tool_file "$output" + postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` + func_execute_cmds "$postlink_cmds" 'exit $?' + fi + + # Delete the generated files. + if test -f "$output_objdir/${outputname}S.$objext"; then + func_show_eval '$RM "$output_objdir/${outputname}S.$objext"' + fi + + exit $exit_status + } + + if test -n "$compile_shlibpath$finalize_shlibpath"; then + compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" + fi + if test -n "$finalize_shlibpath"; then + finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" + fi + + compile_var= + finalize_var= + if test -n "$runpath_var"; then + if test -n "$perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $perm_rpath; do + func_append rpath "$dir:" + done + compile_var="$runpath_var=\"$rpath\$$runpath_var\" " + fi + if test -n "$finalize_perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $finalize_perm_rpath; do + func_append rpath "$dir:" + done + finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " + fi + fi + + if test yes = "$no_install"; then + # We don't need to create a wrapper script. + link_command=$compile_var$compile_command$compile_rpath + # Replace the output file specification. + link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'` + # Delete the old output file. + $opt_dry_run || $RM $output + # Link the executable and exit + func_show_eval "$link_command" 'exit $?' + + if test -n "$postlink_cmds"; then + func_to_tool_file "$output" + postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` + func_execute_cmds "$postlink_cmds" 'exit $?' + fi + + exit $EXIT_SUCCESS + fi + + case $hardcode_action,$fast_install in + relink,*) + # Fast installation is not supported + link_command=$compile_var$compile_command$compile_rpath + relink_command=$finalize_var$finalize_command$finalize_rpath + + func_warning "this platform does not like uninstalled shared libraries" + func_warning "'$output' will be relinked during installation" + ;; + *,yes) + link_command=$finalize_var$compile_command$finalize_rpath + relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'` + ;; + *,no) + link_command=$compile_var$compile_command$compile_rpath + relink_command=$finalize_var$finalize_command$finalize_rpath + ;; + *,needless) + link_command=$finalize_var$compile_command$finalize_rpath + relink_command= + ;; + esac + + # Replace the output file specification. + link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` + + # Delete the old output files. + $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname + + func_show_eval "$link_command" 'exit $?' + + if test -n "$postlink_cmds"; then + func_to_tool_file "$output_objdir/$outputname" + postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` + func_execute_cmds "$postlink_cmds" 'exit $?' + fi + + # Now create the wrapper script. + func_verbose "creating $output" + + # Quote the relink command for shipping. + if test -n "$relink_command"; then + # Preserve any variables that may affect compiler behavior + for var in $variables_saved_for_relink; do + if eval test -z \"\${$var+set}\"; then + relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" + elif eval var_value=\$$var; test -z "$var_value"; then + relink_command="$var=; export $var; $relink_command" + else + func_quote_for_eval "$var_value" + relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" + fi + done + relink_command="(cd `pwd`; $relink_command)" + relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` + fi + + # Only actually do things if not in dry run mode. + $opt_dry_run || { + # win32 will think the script is a binary if it has + # a .exe suffix, so we strip it off here. + case $output in + *.exe) func_stripname '' '.exe' "$output" + output=$func_stripname_result ;; + esac + # test for cygwin because mv fails w/o .exe extensions + case $host in + *cygwin*) + exeext=.exe + func_stripname '' '.exe' "$outputname" + outputname=$func_stripname_result ;; + *) exeext= ;; + esac + case $host in + *cygwin* | *mingw* ) + func_dirname_and_basename "$output" "" "." + output_name=$func_basename_result + output_path=$func_dirname_result + cwrappersource=$output_path/$objdir/lt-$output_name.c + cwrapper=$output_path/$output_name.exe + $RM $cwrappersource $cwrapper + trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 + + func_emit_cwrapperexe_src > $cwrappersource + + # The wrapper executable is built using the $host compiler, + # because it contains $host paths and files. If cross- + # compiling, it, like the target executable, must be + # executed on the $host or under an emulation environment. + $opt_dry_run || { + $LTCC $LTCFLAGS -o $cwrapper $cwrappersource + $STRIP $cwrapper + } + + # Now, create the wrapper script for func_source use: + func_ltwrapper_scriptname $cwrapper + $RM $func_ltwrapper_scriptname_result + trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 + $opt_dry_run || { + # note: this script will not be executed, so do not chmod. + if test "x$build" = "x$host"; then + $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result + else + func_emit_wrapper no > $func_ltwrapper_scriptname_result + fi + } + ;; + * ) + $RM $output + trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 + + func_emit_wrapper no > $output + chmod +x $output + ;; + esac + } + exit $EXIT_SUCCESS + ;; + esac + + # See if we need to build an old-fashioned archive. + for oldlib in $oldlibs; do + + case $build_libtool_libs in + convenience) + oldobjs="$libobjs_save $symfileobj" + addlibs=$convenience + build_libtool_libs=no + ;; + module) + oldobjs=$libobjs_save + addlibs=$old_convenience + build_libtool_libs=no + ;; + *) + oldobjs="$old_deplibs $non_pic_objects" + $preload && test -f "$symfileobj" \ + && func_append oldobjs " $symfileobj" + addlibs=$old_convenience + ;; + esac + + if test -n "$addlibs"; then + gentop=$output_objdir/${outputname}x + func_append generated " $gentop" + + func_extract_archives $gentop $addlibs + func_append oldobjs " $func_extract_archives_result" + fi + + # Do each command in the archive commands. + if test -n "$old_archive_from_new_cmds" && test yes = "$build_libtool_libs"; then + cmds=$old_archive_from_new_cmds + else + + # Add any objects from preloaded convenience libraries + if test -n "$dlprefiles"; then + gentop=$output_objdir/${outputname}x + func_append generated " $gentop" + + func_extract_archives $gentop $dlprefiles + func_append oldobjs " $func_extract_archives_result" + fi + + # POSIX demands no paths to be encoded in archives. We have + # to avoid creating archives with duplicate basenames if we + # might have to extract them afterwards, e.g., when creating a + # static archive out of a convenience library, or when linking + # the entirety of a libtool archive into another (currently + # not supported by libtool). + if (for obj in $oldobjs + do + func_basename "$obj" + $ECHO "$func_basename_result" + done | sort | sort -uc >/dev/null 2>&1); then + : + else + echo "copying selected object files to avoid basename conflicts..." + gentop=$output_objdir/${outputname}x + func_append generated " $gentop" + func_mkdir_p "$gentop" + save_oldobjs=$oldobjs + oldobjs= + counter=1 + for obj in $save_oldobjs + do + func_basename "$obj" + objbase=$func_basename_result + case " $oldobjs " in + " ") oldobjs=$obj ;; + *[\ /]"$objbase "*) + while :; do + # Make sure we don't pick an alternate name that also + # overlaps. + newobj=lt$counter-$objbase + func_arith $counter + 1 + counter=$func_arith_result + case " $oldobjs " in + *[\ /]"$newobj "*) ;; + *) if test ! -f "$gentop/$newobj"; then break; fi ;; + esac + done + func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" + func_append oldobjs " $gentop/$newobj" + ;; + *) func_append oldobjs " $obj" ;; + esac + done + fi + func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 + tool_oldlib=$func_to_tool_file_result + eval cmds=\"$old_archive_cmds\" + + func_len " $cmds" + len=$func_len_result + if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then + cmds=$old_archive_cmds + elif test -n "$archiver_list_spec"; then + func_verbose "using command file archive linking..." + for obj in $oldobjs + do + func_to_tool_file "$obj" + $ECHO "$func_to_tool_file_result" + done > $output_objdir/$libname.libcmd + func_to_tool_file "$output_objdir/$libname.libcmd" + oldobjs=" $archiver_list_spec$func_to_tool_file_result" + cmds=$old_archive_cmds + else + # the command line is too long to link in one step, link in parts + func_verbose "using piecewise archive linking..." + save_RANLIB=$RANLIB + RANLIB=: + objlist= + concat_cmds= + save_oldobjs=$oldobjs + oldobjs= + # Is there a better way of finding the last object in the list? + for obj in $save_oldobjs + do + last_oldobj=$obj + done + eval test_cmds=\"$old_archive_cmds\" + func_len " $test_cmds" + len0=$func_len_result + len=$len0 + for obj in $save_oldobjs + do + func_len " $obj" + func_arith $len + $func_len_result + len=$func_arith_result + func_append objlist " $obj" + if test "$len" -lt "$max_cmd_len"; then + : + else + # the above command should be used before it gets too long + oldobjs=$objlist + if test "$obj" = "$last_oldobj"; then + RANLIB=$save_RANLIB + fi + test -z "$concat_cmds" || concat_cmds=$concat_cmds~ + eval concat_cmds=\"\$concat_cmds$old_archive_cmds\" + objlist= + len=$len0 + fi + done + RANLIB=$save_RANLIB + oldobjs=$objlist + if test -z "$oldobjs"; then + eval cmds=\"\$concat_cmds\" + else + eval cmds=\"\$concat_cmds~\$old_archive_cmds\" + fi + fi + fi + func_execute_cmds "$cmds" 'exit $?' + done + + test -n "$generated" && \ + func_show_eval "${RM}r$generated" + + # Now create the libtool archive. + case $output in + *.la) + old_library= + test yes = "$build_old_libs" && old_library=$libname.$libext + func_verbose "creating $output" + + # Preserve any variables that may affect compiler behavior + for var in $variables_saved_for_relink; do + if eval test -z \"\${$var+set}\"; then + relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" + elif eval var_value=\$$var; test -z "$var_value"; then + relink_command="$var=; export $var; $relink_command" + else + func_quote_for_eval "$var_value" + relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" + fi + done + # Quote the link command for shipping. + relink_command="(cd `pwd`; $SHELL \"$progpath\" $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" + relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` + if test yes = "$hardcode_automatic"; then + relink_command= + fi + + # Only create the output if not a dry run. + $opt_dry_run || { + for installed in no yes; do + if test yes = "$installed"; then + if test -z "$install_libdir"; then + break + fi + output=$output_objdir/${outputname}i + # Replace all uninstalled libtool libraries with the installed ones + newdependency_libs= + for deplib in $dependency_libs; do + case $deplib in + *.la) + func_basename "$deplib" + name=$func_basename_result + func_resolve_sysroot "$deplib" + eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result` + test -z "$libdir" && \ + func_fatal_error "'$deplib' is not a valid libtool archive" + func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name" + ;; + -L*) + func_stripname -L '' "$deplib" + func_replace_sysroot "$func_stripname_result" + func_append newdependency_libs " -L$func_replace_sysroot_result" + ;; + -R*) + func_stripname -R '' "$deplib" + func_replace_sysroot "$func_stripname_result" + func_append newdependency_libs " -R$func_replace_sysroot_result" + ;; + *) func_append newdependency_libs " $deplib" ;; + esac + done + dependency_libs=$newdependency_libs + newdlfiles= + + for lib in $dlfiles; do + case $lib in + *.la) + func_basename "$lib" + name=$func_basename_result + eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib` + test -z "$libdir" && \ + func_fatal_error "'$lib' is not a valid libtool archive" + func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name" + ;; + *) func_append newdlfiles " $lib" ;; + esac + done + dlfiles=$newdlfiles + newdlprefiles= + for lib in $dlprefiles; do + case $lib in + *.la) + # Only pass preopened files to the pseudo-archive (for + # eventual linking with the app. that links it) if we + # didn't already link the preopened objects directly into + # the library: + func_basename "$lib" + name=$func_basename_result + eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib` + test -z "$libdir" && \ + func_fatal_error "'$lib' is not a valid libtool archive" + func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name" + ;; + esac + done + dlprefiles=$newdlprefiles + else + newdlfiles= + for lib in $dlfiles; do + case $lib in + [\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;; + *) abs=`pwd`"/$lib" ;; + esac + func_append newdlfiles " $abs" + done + dlfiles=$newdlfiles + newdlprefiles= + for lib in $dlprefiles; do + case $lib in + [\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;; + *) abs=`pwd`"/$lib" ;; + esac + func_append newdlprefiles " $abs" + done + dlprefiles=$newdlprefiles + fi + $RM $output + # place dlname in correct position for cygwin + # In fact, it would be nice if we could use this code for all target + # systems that can't hard-code library paths into their executables + # and that have no shared library path variable independent of PATH, + # but it turns out we can't easily determine that from inspecting + # libtool variables, so we have to hard-code the OSs to which it + # applies here; at the moment, that means platforms that use the PE + # object format with DLL files. See the long comment at the top of + # tests/bindir.at for full details. + tdlname=$dlname + case $host,$output,$installed,$module,$dlname in + *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) + # If a -bindir argument was supplied, place the dll there. + if test -n "$bindir"; then + func_relative_path "$install_libdir" "$bindir" + tdlname=$func_relative_path_result/$dlname + else + # Otherwise fall back on heuristic. + tdlname=../bin/$dlname + fi + ;; + esac + $ECHO > $output "\ +# $outputname - a libtool library file +# Generated by $PROGRAM (GNU $PACKAGE) $VERSION +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# The name that we can dlopen(3). +dlname='$tdlname' + +# Names of this library. +library_names='$library_names' + +# The name of the static archive. +old_library='$old_library' + +# Linker flags that cannot go in dependency_libs. +inherited_linker_flags='$new_inherited_linker_flags' + +# Libraries that this one depends upon. +dependency_libs='$dependency_libs' + +# Names of additional weak libraries provided by this library +weak_library_names='$weak_libs' + +# Version information for $libname. +current=$current +age=$age +revision=$revision + +# Is this an already installed library? +installed=$installed + +# Should we warn about portability when linking against -modules? +shouldnotlink=$module + +# Files to dlopen/dlpreopen +dlopen='$dlfiles' +dlpreopen='$dlprefiles' + +# Directory that this library needs to be installed in: +libdir='$install_libdir'" + if test no,yes = "$installed,$need_relink"; then + $ECHO >> $output "\ +relink_command=\"$relink_command\"" + fi + done + } + + # Do a symbolic link so that the libtool archive can be found in + # LD_LIBRARY_PATH before the program is installed. + func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' + ;; + esac + exit $EXIT_SUCCESS +} + +if test link = "$opt_mode" || test relink = "$opt_mode"; then + func_mode_link ${1+"$@"} +fi + + +# func_mode_uninstall arg... +func_mode_uninstall () +{ + $debug_cmd + + RM=$nonopt + files= + rmforce=false + exit_status=0 + + # This variable tells wrapper scripts just to set variables rather + # than running their programs. + libtool_install_magic=$magic + + for arg + do + case $arg in + -f) func_append RM " $arg"; rmforce=: ;; + -*) func_append RM " $arg" ;; + *) func_append files " $arg" ;; + esac + done + + test -z "$RM" && \ + func_fatal_help "you must specify an RM program" + + rmdirs= + + for file in $files; do + func_dirname "$file" "" "." + dir=$func_dirname_result + if test . = "$dir"; then + odir=$objdir + else + odir=$dir/$objdir + fi + func_basename "$file" + name=$func_basename_result + test uninstall = "$opt_mode" && odir=$dir + + # Remember odir for removal later, being careful to avoid duplicates + if test clean = "$opt_mode"; then + case " $rmdirs " in + *" $odir "*) ;; + *) func_append rmdirs " $odir" ;; + esac + fi + + # Don't error if the file doesn't exist and rm -f was used. + if { test -L "$file"; } >/dev/null 2>&1 || + { test -h "$file"; } >/dev/null 2>&1 || + test -f "$file"; then + : + elif test -d "$file"; then + exit_status=1 + continue + elif $rmforce; then + continue + fi + + rmfiles=$file + + case $name in + *.la) + # Possibly a libtool archive, so verify it. + if func_lalib_p "$file"; then + func_source $dir/$name + + # Delete the libtool libraries and symlinks. + for n in $library_names; do + func_append rmfiles " $odir/$n" + done + test -n "$old_library" && func_append rmfiles " $odir/$old_library" + + case $opt_mode in + clean) + case " $library_names " in + *" $dlname "*) ;; + *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;; + esac + test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i" + ;; + uninstall) + if test -n "$library_names"; then + # Do each command in the postuninstall commands. + func_execute_cmds "$postuninstall_cmds" '$rmforce || exit_status=1' + fi + + if test -n "$old_library"; then + # Do each command in the old_postuninstall commands. + func_execute_cmds "$old_postuninstall_cmds" '$rmforce || exit_status=1' + fi + # FIXME: should reinstall the best remaining shared library. + ;; + esac + fi + ;; + + *.lo) + # Possibly a libtool object, so verify it. + if func_lalib_p "$file"; then + + # Read the .lo file + func_source $dir/$name + + # Add PIC object to the list of files to remove. + if test -n "$pic_object" && test none != "$pic_object"; then + func_append rmfiles " $dir/$pic_object" + fi + + # Add non-PIC object to the list of files to remove. + if test -n "$non_pic_object" && test none != "$non_pic_object"; then + func_append rmfiles " $dir/$non_pic_object" + fi + fi + ;; + + *) + if test clean = "$opt_mode"; then + noexename=$name + case $file in + *.exe) + func_stripname '' '.exe' "$file" + file=$func_stripname_result + func_stripname '' '.exe' "$name" + noexename=$func_stripname_result + # $file with .exe has already been added to rmfiles, + # add $file without .exe + func_append rmfiles " $file" + ;; + esac + # Do a test to see if this is a libtool program. + if func_ltwrapper_p "$file"; then + if func_ltwrapper_executable_p "$file"; then + func_ltwrapper_scriptname "$file" + relink_command= + func_source $func_ltwrapper_scriptname_result + func_append rmfiles " $func_ltwrapper_scriptname_result" + else + relink_command= + func_source $dir/$noexename + fi + + # note $name still contains .exe if it was in $file originally + # as does the version of $file that was added into $rmfiles + func_append rmfiles " $odir/$name $odir/${name}S.$objext" + if test yes = "$fast_install" && test -n "$relink_command"; then + func_append rmfiles " $odir/lt-$name" + fi + if test "X$noexename" != "X$name"; then + func_append rmfiles " $odir/lt-$noexename.c" + fi + fi + fi + ;; + esac + func_show_eval "$RM $rmfiles" 'exit_status=1' + done + + # Try to remove the $objdir's in the directories where we deleted files + for dir in $rmdirs; do + if test -d "$dir"; then + func_show_eval "rmdir $dir >/dev/null 2>&1" + fi + done + + exit $exit_status +} + +if test uninstall = "$opt_mode" || test clean = "$opt_mode"; then + func_mode_uninstall ${1+"$@"} +fi + +test -z "$opt_mode" && { + help=$generic_help + func_fatal_help "you must specify a MODE" +} + +test -z "$exec_cmd" && \ + func_fatal_help "invalid operation mode '$opt_mode'" + +if test -n "$exec_cmd"; then + eval exec "$exec_cmd" + exit $EXIT_FAILURE +fi + +exit $exit_status + + +# The TAGs below are defined such that we never get into a situation +# where we disable both kinds of libraries. Given conflicting +# choices, we go for a static library, that is the most portable, +# since we can't tell whether shared libraries were disabled because +# the user asked for that or because the platform doesn't support +# them. This is particularly important on AIX, because we don't +# support having both static and shared libraries enabled at the same +# time on that platform, so we default to a shared-only configuration. +# If a disable-shared tag is given, we'll fallback to a static-only +# configuration. But we'll never go from static-only to shared-only. + +# ### BEGIN LIBTOOL TAG CONFIG: disable-shared +build_libtool_libs=no +build_old_libs=yes +# ### END LIBTOOL TAG CONFIG: disable-shared + +# ### BEGIN LIBTOOL TAG CONFIG: disable-static +build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` +# ### END LIBTOOL TAG CONFIG: disable-static + +# Local Variables: +# mode:shell-script +# sh-indentation:2 +# End: diff --git a/m4/libtool.m4 b/m4/libtool.m4 new file mode 100644 index 0000000..a644432 --- /dev/null +++ b/m4/libtool.m4 @@ -0,0 +1,8372 @@ +# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- +# +# Copyright (C) 1996-2001, 2003-2015 Free Software Foundation, Inc. +# Written by Gordon Matzigkeit, 1996 +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +m4_define([_LT_COPYING], [dnl +# Copyright (C) 2014 Free Software Foundation, Inc. +# This is free software; see the source for copying conditions. There is NO +# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +# GNU Libtool is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of of the License, or +# (at your option) any later version. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program or library that is built +# using GNU Libtool, you may include this file under the same +# distribution terms that you use for the rest of that program. +# +# GNU Libtool is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +]) + +# serial 58 LT_INIT + + +# LT_PREREQ(VERSION) +# ------------------ +# Complain and exit if this libtool version is less that VERSION. +m4_defun([LT_PREREQ], +[m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1, + [m4_default([$3], + [m4_fatal([Libtool version $1 or higher is required], + 63)])], + [$2])]) + + +# _LT_CHECK_BUILDDIR +# ------------------ +# Complain if the absolute build directory name contains unusual characters +m4_defun([_LT_CHECK_BUILDDIR], +[case `pwd` in + *\ * | *\ *) + AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;; +esac +]) + + +# LT_INIT([OPTIONS]) +# ------------------ +AC_DEFUN([LT_INIT], +[AC_PREREQ([2.62])dnl We use AC_PATH_PROGS_FEATURE_CHECK +AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl +AC_BEFORE([$0], [LT_LANG])dnl +AC_BEFORE([$0], [LT_OUTPUT])dnl +AC_BEFORE([$0], [LTDL_INIT])dnl +m4_require([_LT_CHECK_BUILDDIR])dnl + +dnl Autoconf doesn't catch unexpanded LT_ macros by default: +m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl +m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl +dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4 +dnl unless we require an AC_DEFUNed macro: +AC_REQUIRE([LTOPTIONS_VERSION])dnl +AC_REQUIRE([LTSUGAR_VERSION])dnl +AC_REQUIRE([LTVERSION_VERSION])dnl +AC_REQUIRE([LTOBSOLETE_VERSION])dnl +m4_require([_LT_PROG_LTMAIN])dnl + +_LT_SHELL_INIT([SHELL=${CONFIG_SHELL-/bin/sh}]) + +dnl Parse OPTIONS +_LT_SET_OPTIONS([$0], [$1]) + +# This can be used to rebuild libtool when needed +LIBTOOL_DEPS=$ltmain + +# Always use our own libtool. +LIBTOOL='$(SHELL) $(top_builddir)/libtool' +AC_SUBST(LIBTOOL)dnl + +_LT_SETUP + +# Only expand once: +m4_define([LT_INIT]) +])# LT_INIT + +# Old names: +AU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT]) +AU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_PROG_LIBTOOL], []) +dnl AC_DEFUN([AM_PROG_LIBTOOL], []) + + +# _LT_PREPARE_CC_BASENAME +# ----------------------- +m4_defun([_LT_PREPARE_CC_BASENAME], [ +# Calculate cc_basename. Skip known compiler wrappers and cross-prefix. +func_cc_basename () +{ + for cc_temp in @S|@*""; do + case $cc_temp in + compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;; + distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;; + \-*) ;; + *) break;; + esac + done + func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` +} +])# _LT_PREPARE_CC_BASENAME + + +# _LT_CC_BASENAME(CC) +# ------------------- +# It would be clearer to call AC_REQUIREs from _LT_PREPARE_CC_BASENAME, +# but that macro is also expanded into generated libtool script, which +# arranges for $SED and $ECHO to be set by different means. +m4_defun([_LT_CC_BASENAME], +[m4_require([_LT_PREPARE_CC_BASENAME])dnl +AC_REQUIRE([_LT_DECL_SED])dnl +AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl +func_cc_basename $1 +cc_basename=$func_cc_basename_result +]) + + +# _LT_FILEUTILS_DEFAULTS +# ---------------------- +# It is okay to use these file commands and assume they have been set +# sensibly after 'm4_require([_LT_FILEUTILS_DEFAULTS])'. +m4_defun([_LT_FILEUTILS_DEFAULTS], +[: ${CP="cp -f"} +: ${MV="mv -f"} +: ${RM="rm -f"} +])# _LT_FILEUTILS_DEFAULTS + + +# _LT_SETUP +# --------- +m4_defun([_LT_SETUP], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_CANONICAL_BUILD])dnl +AC_REQUIRE([_LT_PREPARE_SED_QUOTE_VARS])dnl +AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl + +_LT_DECL([], [PATH_SEPARATOR], [1], [The PATH separator for the build system])dnl +dnl +_LT_DECL([], [host_alias], [0], [The host system])dnl +_LT_DECL([], [host], [0])dnl +_LT_DECL([], [host_os], [0])dnl +dnl +_LT_DECL([], [build_alias], [0], [The build system])dnl +_LT_DECL([], [build], [0])dnl +_LT_DECL([], [build_os], [0])dnl +dnl +AC_REQUIRE([AC_PROG_CC])dnl +AC_REQUIRE([LT_PATH_LD])dnl +AC_REQUIRE([LT_PATH_NM])dnl +dnl +AC_REQUIRE([AC_PROG_LN_S])dnl +test -z "$LN_S" && LN_S="ln -s" +_LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl +dnl +AC_REQUIRE([LT_CMD_MAX_LEN])dnl +_LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl +_LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl +dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_CHECK_SHELL_FEATURES])dnl +m4_require([_LT_PATH_CONVERSION_FUNCTIONS])dnl +m4_require([_LT_CMD_RELOAD])dnl +m4_require([_LT_CHECK_MAGIC_METHOD])dnl +m4_require([_LT_CHECK_SHAREDLIB_FROM_LINKLIB])dnl +m4_require([_LT_CMD_OLD_ARCHIVE])dnl +m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl +m4_require([_LT_WITH_SYSROOT])dnl +m4_require([_LT_CMD_TRUNCATE])dnl + +_LT_CONFIG_LIBTOOL_INIT([ +# See if we are running on zsh, and set the options that allow our +# commands through without removal of \ escapes INIT. +if test -n "\${ZSH_VERSION+set}"; then + setopt NO_GLOB_SUBST +fi +]) +if test -n "${ZSH_VERSION+set}"; then + setopt NO_GLOB_SUBST +fi + +_LT_CHECK_OBJDIR + +m4_require([_LT_TAG_COMPILER])dnl + +case $host_os in +aix3*) + # AIX sometimes has problems with the GCC collect2 program. For some + # reason, if we set the COLLECT_NAMES environment variable, the problems + # vanish in a puff of smoke. + if test set != "${COLLECT_NAMES+set}"; then + COLLECT_NAMES= + export COLLECT_NAMES + fi + ;; +esac + +# Global variables: +ofile=libtool +can_build_shared=yes + +# All known linkers require a '.a' archive for static linking (except MSVC, +# which needs '.lib'). +libext=a + +with_gnu_ld=$lt_cv_prog_gnu_ld + +old_CC=$CC +old_CFLAGS=$CFLAGS + +# Set sane defaults for various variables +test -z "$CC" && CC=cc +test -z "$LTCC" && LTCC=$CC +test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS +test -z "$LD" && LD=ld +test -z "$ac_objext" && ac_objext=o + +_LT_CC_BASENAME([$compiler]) + +# Only perform the check for file, if the check method requires it +test -z "$MAGIC_CMD" && MAGIC_CMD=file +case $deplibs_check_method in +file_magic*) + if test "$file_magic_cmd" = '$MAGIC_CMD'; then + _LT_PATH_MAGIC + fi + ;; +esac + +# Use C for the default configuration in the libtool script +LT_SUPPORTED_TAG([CC]) +_LT_LANG_C_CONFIG +_LT_LANG_DEFAULT_CONFIG +_LT_CONFIG_COMMANDS +])# _LT_SETUP + + +# _LT_PREPARE_SED_QUOTE_VARS +# -------------------------- +# Define a few sed substitution that help us do robust quoting. +m4_defun([_LT_PREPARE_SED_QUOTE_VARS], +[# Backslashify metacharacters that are still active within +# double-quoted strings. +sed_quote_subst='s/\([["`$\\]]\)/\\\1/g' + +# Same as above, but do not quote variable references. +double_quote_subst='s/\([["`\\]]\)/\\\1/g' + +# Sed substitution to delay expansion of an escaped shell variable in a +# double_quote_subst'ed string. +delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' + +# Sed substitution to delay expansion of an escaped single quote. +delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' + +# Sed substitution to avoid accidental globbing in evaled expressions +no_glob_subst='s/\*/\\\*/g' +]) + +# _LT_PROG_LTMAIN +# --------------- +# Note that this code is called both from 'configure', and 'config.status' +# now that we use AC_CONFIG_COMMANDS to generate libtool. Notably, +# 'config.status' has no value for ac_aux_dir unless we are using Automake, +# so we pass a copy along to make sure it has a sensible value anyway. +m4_defun([_LT_PROG_LTMAIN], +[m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl +_LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir']) +ltmain=$ac_aux_dir/ltmain.sh +])# _LT_PROG_LTMAIN + + +## ------------------------------------- ## +## Accumulate code for creating libtool. ## +## ------------------------------------- ## + +# So that we can recreate a full libtool script including additional +# tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS +# in macros and then make a single call at the end using the 'libtool' +# label. + + +# _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS]) +# ---------------------------------------- +# Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later. +m4_define([_LT_CONFIG_LIBTOOL_INIT], +[m4_ifval([$1], + [m4_append([_LT_OUTPUT_LIBTOOL_INIT], + [$1 +])])]) + +# Initialize. +m4_define([_LT_OUTPUT_LIBTOOL_INIT]) + + +# _LT_CONFIG_LIBTOOL([COMMANDS]) +# ------------------------------ +# Register COMMANDS to be passed to AC_CONFIG_COMMANDS later. +m4_define([_LT_CONFIG_LIBTOOL], +[m4_ifval([$1], + [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS], + [$1 +])])]) + +# Initialize. +m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS]) + + +# _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS]) +# ----------------------------------------------------- +m4_defun([_LT_CONFIG_SAVE_COMMANDS], +[_LT_CONFIG_LIBTOOL([$1]) +_LT_CONFIG_LIBTOOL_INIT([$2]) +]) + + +# _LT_FORMAT_COMMENT([COMMENT]) +# ----------------------------- +# Add leading comment marks to the start of each line, and a trailing +# full-stop to the whole comment if one is not present already. +m4_define([_LT_FORMAT_COMMENT], +[m4_ifval([$1], [ +m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])], + [['`$\]], [\\\&])]m4_bmatch([$1], [[!?.]$], [], [.]) +)]) + + + +## ------------------------ ## +## FIXME: Eliminate VARNAME ## +## ------------------------ ## + + +# _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?]) +# ------------------------------------------------------------------- +# CONFIGNAME is the name given to the value in the libtool script. +# VARNAME is the (base) name used in the configure script. +# VALUE may be 0, 1 or 2 for a computed quote escaped value based on +# VARNAME. Any other value will be used directly. +m4_define([_LT_DECL], +[lt_if_append_uniq([lt_decl_varnames], [$2], [, ], + [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name], + [m4_ifval([$1], [$1], [$2])]) + lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3]) + m4_ifval([$4], + [lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])]) + lt_dict_add_subkey([lt_decl_dict], [$2], + [tagged?], [m4_ifval([$5], [yes], [no])])]) +]) + + +# _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION]) +# -------------------------------------------------------- +m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])]) + + +# lt_decl_tag_varnames([SEPARATOR], [VARNAME1...]) +# ------------------------------------------------ +m4_define([lt_decl_tag_varnames], +[_lt_decl_filter([tagged?], [yes], $@)]) + + +# _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..]) +# --------------------------------------------------------- +m4_define([_lt_decl_filter], +[m4_case([$#], + [0], [m4_fatal([$0: too few arguments: $#])], + [1], [m4_fatal([$0: too few arguments: $#: $1])], + [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)], + [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)], + [lt_dict_filter([lt_decl_dict], $@)])[]dnl +]) + + +# lt_decl_quote_varnames([SEPARATOR], [VARNAME1...]) +# -------------------------------------------------- +m4_define([lt_decl_quote_varnames], +[_lt_decl_filter([value], [1], $@)]) + + +# lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...]) +# --------------------------------------------------- +m4_define([lt_decl_dquote_varnames], +[_lt_decl_filter([value], [2], $@)]) + + +# lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...]) +# --------------------------------------------------- +m4_define([lt_decl_varnames_tagged], +[m4_assert([$# <= 2])dnl +_$0(m4_quote(m4_default([$1], [[, ]])), + m4_ifval([$2], [[$2]], [m4_dquote(lt_decl_tag_varnames)]), + m4_split(m4_normalize(m4_quote(_LT_TAGS)), [ ]))]) +m4_define([_lt_decl_varnames_tagged], +[m4_ifval([$3], [lt_combine([$1], [$2], [_], $3)])]) + + +# lt_decl_all_varnames([SEPARATOR], [VARNAME1...]) +# ------------------------------------------------ +m4_define([lt_decl_all_varnames], +[_$0(m4_quote(m4_default([$1], [[, ]])), + m4_if([$2], [], + m4_quote(lt_decl_varnames), + m4_quote(m4_shift($@))))[]dnl +]) +m4_define([_lt_decl_all_varnames], +[lt_join($@, lt_decl_varnames_tagged([$1], + lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl +]) + + +# _LT_CONFIG_STATUS_DECLARE([VARNAME]) +# ------------------------------------ +# Quote a variable value, and forward it to 'config.status' so that its +# declaration there will have the same value as in 'configure'. VARNAME +# must have a single quote delimited value for this to work. +m4_define([_LT_CONFIG_STATUS_DECLARE], +[$1='`$ECHO "$][$1" | $SED "$delay_single_quote_subst"`']) + + +# _LT_CONFIG_STATUS_DECLARATIONS +# ------------------------------ +# We delimit libtool config variables with single quotes, so when +# we write them to config.status, we have to be sure to quote all +# embedded single quotes properly. In configure, this macro expands +# each variable declared with _LT_DECL (and _LT_TAGDECL) into: +# +# ='`$ECHO "$" | $SED "$delay_single_quote_subst"`' +m4_defun([_LT_CONFIG_STATUS_DECLARATIONS], +[m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames), + [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])]) + + +# _LT_LIBTOOL_TAGS +# ---------------- +# Output comment and list of tags supported by the script +m4_defun([_LT_LIBTOOL_TAGS], +[_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl +available_tags='_LT_TAGS'dnl +]) + + +# _LT_LIBTOOL_DECLARE(VARNAME, [TAG]) +# ----------------------------------- +# Extract the dictionary values for VARNAME (optionally with TAG) and +# expand to a commented shell variable setting: +# +# # Some comment about what VAR is for. +# visible_name=$lt_internal_name +m4_define([_LT_LIBTOOL_DECLARE], +[_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], + [description])))[]dnl +m4_pushdef([_libtool_name], + m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl +m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])), + [0], [_libtool_name=[$]$1], + [1], [_libtool_name=$lt_[]$1], + [2], [_libtool_name=$lt_[]$1], + [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl +m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl +]) + + +# _LT_LIBTOOL_CONFIG_VARS +# ----------------------- +# Produce commented declarations of non-tagged libtool config variables +# suitable for insertion in the LIBTOOL CONFIG section of the 'libtool' +# script. Tagged libtool config variables (even for the LIBTOOL CONFIG +# section) are produced by _LT_LIBTOOL_TAG_VARS. +m4_defun([_LT_LIBTOOL_CONFIG_VARS], +[m4_foreach([_lt_var], + m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)), + [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])]) + + +# _LT_LIBTOOL_TAG_VARS(TAG) +# ------------------------- +m4_define([_LT_LIBTOOL_TAG_VARS], +[m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames), + [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])]) + + +# _LT_TAGVAR(VARNAME, [TAGNAME]) +# ------------------------------ +m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])]) + + +# _LT_CONFIG_COMMANDS +# ------------------- +# Send accumulated output to $CONFIG_STATUS. Thanks to the lists of +# variables for single and double quote escaping we saved from calls +# to _LT_DECL, we can put quote escaped variables declarations +# into 'config.status', and then the shell code to quote escape them in +# for loops in 'config.status'. Finally, any additional code accumulated +# from calls to _LT_CONFIG_LIBTOOL_INIT is expanded. +m4_defun([_LT_CONFIG_COMMANDS], +[AC_PROVIDE_IFELSE([LT_OUTPUT], + dnl If the libtool generation code has been placed in $CONFIG_LT, + dnl instead of duplicating it all over again into config.status, + dnl then we will have config.status run $CONFIG_LT later, so it + dnl needs to know what name is stored there: + [AC_CONFIG_COMMANDS([libtool], + [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])], + dnl If the libtool generation code is destined for config.status, + dnl expand the accumulated commands and init code now: + [AC_CONFIG_COMMANDS([libtool], + [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])]) +])#_LT_CONFIG_COMMANDS + + +# Initialize. +m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT], +[ + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +sed_quote_subst='$sed_quote_subst' +double_quote_subst='$double_quote_subst' +delay_variable_subst='$delay_variable_subst' +_LT_CONFIG_STATUS_DECLARATIONS +LTCC='$LTCC' +LTCFLAGS='$LTCFLAGS' +compiler='$compiler_DEFAULT' + +# A function that is used when there is no print builtin or printf. +func_fallback_echo () +{ + eval 'cat <<_LTECHO_EOF +\$[]1 +_LTECHO_EOF' +} + +# Quote evaled strings. +for var in lt_decl_all_varnames([[ \ +]], lt_decl_quote_varnames); do + case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in + *[[\\\\\\\`\\"\\\$]]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +# Double-quote double-evaled strings. +for var in lt_decl_all_varnames([[ \ +]], lt_decl_dquote_varnames); do + case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in + *[[\\\\\\\`\\"\\\$]]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +_LT_OUTPUT_LIBTOOL_INIT +]) + +# _LT_GENERATED_FILE_INIT(FILE, [COMMENT]) +# ------------------------------------ +# Generate a child script FILE with all initialization necessary to +# reuse the environment learned by the parent script, and make the +# file executable. If COMMENT is supplied, it is inserted after the +# '#!' sequence but before initialization text begins. After this +# macro, additional text can be appended to FILE to form the body of +# the child script. The macro ends with non-zero status if the +# file could not be fully written (such as if the disk is full). +m4_ifdef([AS_INIT_GENERATED], +[m4_defun([_LT_GENERATED_FILE_INIT],[AS_INIT_GENERATED($@)])], +[m4_defun([_LT_GENERATED_FILE_INIT], +[m4_require([AS_PREPARE])]dnl +[m4_pushdef([AS_MESSAGE_LOG_FD])]dnl +[lt_write_fail=0 +cat >$1 <<_ASEOF || lt_write_fail=1 +#! $SHELL +# Generated by $as_me. +$2 +SHELL=\${CONFIG_SHELL-$SHELL} +export SHELL +_ASEOF +cat >>$1 <<\_ASEOF || lt_write_fail=1 +AS_SHELL_SANITIZE +_AS_PREPARE +exec AS_MESSAGE_FD>&1 +_ASEOF +test 0 = "$lt_write_fail" && chmod +x $1[]dnl +m4_popdef([AS_MESSAGE_LOG_FD])])])# _LT_GENERATED_FILE_INIT + +# LT_OUTPUT +# --------- +# This macro allows early generation of the libtool script (before +# AC_OUTPUT is called), incase it is used in configure for compilation +# tests. +AC_DEFUN([LT_OUTPUT], +[: ${CONFIG_LT=./config.lt} +AC_MSG_NOTICE([creating $CONFIG_LT]) +_LT_GENERATED_FILE_INIT(["$CONFIG_LT"], +[# Run this file to recreate a libtool stub with the current configuration.]) + +cat >>"$CONFIG_LT" <<\_LTEOF +lt_cl_silent=false +exec AS_MESSAGE_LOG_FD>>config.log +{ + echo + AS_BOX([Running $as_me.]) +} >&AS_MESSAGE_LOG_FD + +lt_cl_help="\ +'$as_me' creates a local libtool stub from the current configuration, +for use in further configure time tests before the real libtool is +generated. + +Usage: $[0] [[OPTIONS]] + + -h, --help print this help, then exit + -V, --version print version number, then exit + -q, --quiet do not print progress messages + -d, --debug don't remove temporary files + +Report bugs to ." + +lt_cl_version="\ +m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl +m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION]) +configured by $[0], generated by m4_PACKAGE_STRING. + +Copyright (C) 2011 Free Software Foundation, Inc. +This config.lt script is free software; the Free Software Foundation +gives unlimited permision to copy, distribute and modify it." + +while test 0 != $[#] +do + case $[1] in + --version | --v* | -V ) + echo "$lt_cl_version"; exit 0 ;; + --help | --h* | -h ) + echo "$lt_cl_help"; exit 0 ;; + --debug | --d* | -d ) + debug=: ;; + --quiet | --q* | --silent | --s* | -q ) + lt_cl_silent=: ;; + + -*) AC_MSG_ERROR([unrecognized option: $[1] +Try '$[0] --help' for more information.]) ;; + + *) AC_MSG_ERROR([unrecognized argument: $[1] +Try '$[0] --help' for more information.]) ;; + esac + shift +done + +if $lt_cl_silent; then + exec AS_MESSAGE_FD>/dev/null +fi +_LTEOF + +cat >>"$CONFIG_LT" <<_LTEOF +_LT_OUTPUT_LIBTOOL_COMMANDS_INIT +_LTEOF + +cat >>"$CONFIG_LT" <<\_LTEOF +AC_MSG_NOTICE([creating $ofile]) +_LT_OUTPUT_LIBTOOL_COMMANDS +AS_EXIT(0) +_LTEOF +chmod +x "$CONFIG_LT" + +# configure is writing to config.log, but config.lt does its own redirection, +# appending to config.log, which fails on DOS, as config.log is still kept +# open by configure. Here we exec the FD to /dev/null, effectively closing +# config.log, so it can be properly (re)opened and appended to by config.lt. +lt_cl_success=: +test yes = "$silent" && + lt_config_lt_args="$lt_config_lt_args --quiet" +exec AS_MESSAGE_LOG_FD>/dev/null +$SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false +exec AS_MESSAGE_LOG_FD>>config.log +$lt_cl_success || AS_EXIT(1) +])# LT_OUTPUT + + +# _LT_CONFIG(TAG) +# --------------- +# If TAG is the built-in tag, create an initial libtool script with a +# default configuration from the untagged config vars. Otherwise add code +# to config.status for appending the configuration named by TAG from the +# matching tagged config vars. +m4_defun([_LT_CONFIG], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +_LT_CONFIG_SAVE_COMMANDS([ + m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl + m4_if(_LT_TAG, [C], [ + # See if we are running on zsh, and set the options that allow our + # commands through without removal of \ escapes. + if test -n "${ZSH_VERSION+set}"; then + setopt NO_GLOB_SUBST + fi + + cfgfile=${ofile}T + trap "$RM \"$cfgfile\"; exit 1" 1 2 15 + $RM "$cfgfile" + + cat <<_LT_EOF >> "$cfgfile" +#! $SHELL +# Generated automatically by $as_me ($PACKAGE) $VERSION +# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: +# NOTE: Changes made to this file will be lost: look at ltmain.sh. + +# Provide generalized library-building support services. +# Written by Gordon Matzigkeit, 1996 + +_LT_COPYING +_LT_LIBTOOL_TAGS + +# Configured defaults for sys_lib_dlsearch_path munging. +: \${LT_SYS_LIBRARY_PATH="$configure_time_lt_sys_library_path"} + +# ### BEGIN LIBTOOL CONFIG +_LT_LIBTOOL_CONFIG_VARS +_LT_LIBTOOL_TAG_VARS +# ### END LIBTOOL CONFIG + +_LT_EOF + + cat <<'_LT_EOF' >> "$cfgfile" + +# ### BEGIN FUNCTIONS SHARED WITH CONFIGURE + +_LT_PREPARE_MUNGE_PATH_LIST +_LT_PREPARE_CC_BASENAME + +# ### END FUNCTIONS SHARED WITH CONFIGURE + +_LT_EOF + + case $host_os in + aix3*) + cat <<\_LT_EOF >> "$cfgfile" +# AIX sometimes has problems with the GCC collect2 program. For some +# reason, if we set the COLLECT_NAMES environment variable, the problems +# vanish in a puff of smoke. +if test set != "${COLLECT_NAMES+set}"; then + COLLECT_NAMES= + export COLLECT_NAMES +fi +_LT_EOF + ;; + esac + + _LT_PROG_LTMAIN + + # We use sed instead of cat because bash on DJGPP gets confused if + # if finds mixed CR/LF and LF-only lines. Since sed operates in + # text mode, it properly converts lines to CR/LF. This bash problem + # is reportedly fixed, but why not run on old versions too? + sed '$q' "$ltmain" >> "$cfgfile" \ + || (rm -f "$cfgfile"; exit 1) + + mv -f "$cfgfile" "$ofile" || + (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") + chmod +x "$ofile" +], +[cat <<_LT_EOF >> "$ofile" + +dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded +dnl in a comment (ie after a #). +# ### BEGIN LIBTOOL TAG CONFIG: $1 +_LT_LIBTOOL_TAG_VARS(_LT_TAG) +# ### END LIBTOOL TAG CONFIG: $1 +_LT_EOF +])dnl /m4_if +], +[m4_if([$1], [], [ + PACKAGE='$PACKAGE' + VERSION='$VERSION' + RM='$RM' + ofile='$ofile'], []) +])dnl /_LT_CONFIG_SAVE_COMMANDS +])# _LT_CONFIG + + +# LT_SUPPORTED_TAG(TAG) +# --------------------- +# Trace this macro to discover what tags are supported by the libtool +# --tag option, using: +# autoconf --trace 'LT_SUPPORTED_TAG:$1' +AC_DEFUN([LT_SUPPORTED_TAG], []) + + +# C support is built-in for now +m4_define([_LT_LANG_C_enabled], []) +m4_define([_LT_TAGS], []) + + +# LT_LANG(LANG) +# ------------- +# Enable libtool support for the given language if not already enabled. +AC_DEFUN([LT_LANG], +[AC_BEFORE([$0], [LT_OUTPUT])dnl +m4_case([$1], + [C], [_LT_LANG(C)], + [C++], [_LT_LANG(CXX)], + [Go], [_LT_LANG(GO)], + [Java], [_LT_LANG(GCJ)], + [Fortran 77], [_LT_LANG(F77)], + [Fortran], [_LT_LANG(FC)], + [Windows Resource], [_LT_LANG(RC)], + [m4_ifdef([_LT_LANG_]$1[_CONFIG], + [_LT_LANG($1)], + [m4_fatal([$0: unsupported language: "$1"])])])dnl +])# LT_LANG + + +# _LT_LANG(LANGNAME) +# ------------------ +m4_defun([_LT_LANG], +[m4_ifdef([_LT_LANG_]$1[_enabled], [], + [LT_SUPPORTED_TAG([$1])dnl + m4_append([_LT_TAGS], [$1 ])dnl + m4_define([_LT_LANG_]$1[_enabled], [])dnl + _LT_LANG_$1_CONFIG($1)])dnl +])# _LT_LANG + + +m4_ifndef([AC_PROG_GO], [ +############################################################ +# NOTE: This macro has been submitted for inclusion into # +# GNU Autoconf as AC_PROG_GO. When it is available in # +# a released version of Autoconf we should remove this # +# macro and use it instead. # +############################################################ +m4_defun([AC_PROG_GO], +[AC_LANG_PUSH(Go)dnl +AC_ARG_VAR([GOC], [Go compiler command])dnl +AC_ARG_VAR([GOFLAGS], [Go compiler flags])dnl +_AC_ARG_VAR_LDFLAGS()dnl +AC_CHECK_TOOL(GOC, gccgo) +if test -z "$GOC"; then + if test -n "$ac_tool_prefix"; then + AC_CHECK_PROG(GOC, [${ac_tool_prefix}gccgo], [${ac_tool_prefix}gccgo]) + fi +fi +if test -z "$GOC"; then + AC_CHECK_PROG(GOC, gccgo, gccgo, false) +fi +])#m4_defun +])#m4_ifndef + + +# _LT_LANG_DEFAULT_CONFIG +# ----------------------- +m4_defun([_LT_LANG_DEFAULT_CONFIG], +[AC_PROVIDE_IFELSE([AC_PROG_CXX], + [LT_LANG(CXX)], + [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])]) + +AC_PROVIDE_IFELSE([AC_PROG_F77], + [LT_LANG(F77)], + [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])]) + +AC_PROVIDE_IFELSE([AC_PROG_FC], + [LT_LANG(FC)], + [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])]) + +dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal +dnl pulling things in needlessly. +AC_PROVIDE_IFELSE([AC_PROG_GCJ], + [LT_LANG(GCJ)], + [AC_PROVIDE_IFELSE([A][M_PROG_GCJ], + [LT_LANG(GCJ)], + [AC_PROVIDE_IFELSE([LT_PROG_GCJ], + [LT_LANG(GCJ)], + [m4_ifdef([AC_PROG_GCJ], + [m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])]) + m4_ifdef([A][M_PROG_GCJ], + [m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])]) + m4_ifdef([LT_PROG_GCJ], + [m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])]) + +AC_PROVIDE_IFELSE([AC_PROG_GO], + [LT_LANG(GO)], + [m4_define([AC_PROG_GO], defn([AC_PROG_GO])[LT_LANG(GO)])]) + +AC_PROVIDE_IFELSE([LT_PROG_RC], + [LT_LANG(RC)], + [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])]) +])# _LT_LANG_DEFAULT_CONFIG + +# Obsolete macros: +AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)]) +AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)]) +AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)]) +AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)]) +AU_DEFUN([AC_LIBTOOL_RC], [LT_LANG(Windows Resource)]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_CXX], []) +dnl AC_DEFUN([AC_LIBTOOL_F77], []) +dnl AC_DEFUN([AC_LIBTOOL_FC], []) +dnl AC_DEFUN([AC_LIBTOOL_GCJ], []) +dnl AC_DEFUN([AC_LIBTOOL_RC], []) + + +# _LT_TAG_COMPILER +# ---------------- +m4_defun([_LT_TAG_COMPILER], +[AC_REQUIRE([AC_PROG_CC])dnl + +_LT_DECL([LTCC], [CC], [1], [A C compiler])dnl +_LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl +_LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl +_LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC +])# _LT_TAG_COMPILER + + +# _LT_COMPILER_BOILERPLATE +# ------------------------ +# Check for compiler boilerplate output or warnings with +# the simple compiler test code. +m4_defun([_LT_COMPILER_BOILERPLATE], +[m4_require([_LT_DECL_SED])dnl +ac_outfile=conftest.$ac_objext +echo "$lt_simple_compile_test_code" >conftest.$ac_ext +eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_compiler_boilerplate=`cat conftest.err` +$RM conftest* +])# _LT_COMPILER_BOILERPLATE + + +# _LT_LINKER_BOILERPLATE +# ---------------------- +# Check for linker boilerplate output or warnings with +# the simple link test code. +m4_defun([_LT_LINKER_BOILERPLATE], +[m4_require([_LT_DECL_SED])dnl +ac_outfile=conftest.$ac_objext +echo "$lt_simple_link_test_code" >conftest.$ac_ext +eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_linker_boilerplate=`cat conftest.err` +$RM -r conftest* +])# _LT_LINKER_BOILERPLATE + +# _LT_REQUIRED_DARWIN_CHECKS +# ------------------------- +m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[ + case $host_os in + rhapsody* | darwin*) + AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:]) + AC_CHECK_TOOL([NMEDIT], [nmedit], [:]) + AC_CHECK_TOOL([LIPO], [lipo], [:]) + AC_CHECK_TOOL([OTOOL], [otool], [:]) + AC_CHECK_TOOL([OTOOL64], [otool64], [:]) + _LT_DECL([], [DSYMUTIL], [1], + [Tool to manipulate archived DWARF debug symbol files on Mac OS X]) + _LT_DECL([], [NMEDIT], [1], + [Tool to change global to local symbols on Mac OS X]) + _LT_DECL([], [LIPO], [1], + [Tool to manipulate fat objects and archives on Mac OS X]) + _LT_DECL([], [OTOOL], [1], + [ldd/readelf like tool for Mach-O binaries on Mac OS X]) + _LT_DECL([], [OTOOL64], [1], + [ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4]) + + AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod], + [lt_cv_apple_cc_single_mod=no + if test -z "$LT_MULTI_MODULE"; then + # By default we will add the -single_module flag. You can override + # by either setting the environment variable LT_MULTI_MODULE + # non-empty at configure time, or by adding -multi_module to the + # link flags. + rm -rf libconftest.dylib* + echo "int foo(void){return 1;}" > conftest.c + echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ +-dynamiclib -Wl,-single_module conftest.c" >&AS_MESSAGE_LOG_FD + $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ + -dynamiclib -Wl,-single_module conftest.c 2>conftest.err + _lt_result=$? + # If there is a non-empty error log, and "single_module" + # appears in it, assume the flag caused a linker warning + if test -s conftest.err && $GREP single_module conftest.err; then + cat conftest.err >&AS_MESSAGE_LOG_FD + # Otherwise, if the output was created with a 0 exit code from + # the compiler, it worked. + elif test -f libconftest.dylib && test 0 = "$_lt_result"; then + lt_cv_apple_cc_single_mod=yes + else + cat conftest.err >&AS_MESSAGE_LOG_FD + fi + rm -rf libconftest.dylib* + rm -f conftest.* + fi]) + + AC_CACHE_CHECK([for -exported_symbols_list linker flag], + [lt_cv_ld_exported_symbols_list], + [lt_cv_ld_exported_symbols_list=no + save_LDFLAGS=$LDFLAGS + echo "_main" > conftest.sym + LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" + AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], + [lt_cv_ld_exported_symbols_list=yes], + [lt_cv_ld_exported_symbols_list=no]) + LDFLAGS=$save_LDFLAGS + ]) + + AC_CACHE_CHECK([for -force_load linker flag],[lt_cv_ld_force_load], + [lt_cv_ld_force_load=no + cat > conftest.c << _LT_EOF +int forced_loaded() { return 2;} +_LT_EOF + echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&AS_MESSAGE_LOG_FD + $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&AS_MESSAGE_LOG_FD + echo "$AR cru libconftest.a conftest.o" >&AS_MESSAGE_LOG_FD + $AR cru libconftest.a conftest.o 2>&AS_MESSAGE_LOG_FD + echo "$RANLIB libconftest.a" >&AS_MESSAGE_LOG_FD + $RANLIB libconftest.a 2>&AS_MESSAGE_LOG_FD + cat > conftest.c << _LT_EOF +int main() { return 0;} +_LT_EOF + echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&AS_MESSAGE_LOG_FD + $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err + _lt_result=$? + if test -s conftest.err && $GREP force_load conftest.err; then + cat conftest.err >&AS_MESSAGE_LOG_FD + elif test -f conftest && test 0 = "$_lt_result" && $GREP forced_load conftest >/dev/null 2>&1; then + lt_cv_ld_force_load=yes + else + cat conftest.err >&AS_MESSAGE_LOG_FD + fi + rm -f conftest.err libconftest.a conftest conftest.c + rm -rf conftest.dSYM + ]) + case $host_os in + rhapsody* | darwin1.[[012]]) + _lt_dar_allow_undefined='$wl-undefined ${wl}suppress' ;; + darwin1.*) + _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; + darwin*) # darwin 5.x on + # if running on 10.5 or later, the deployment target defaults + # to the OS version, if on x86, and 10.4, the deployment + # target defaults to 10.4. Don't you love it? + case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in + 10.0,*86*-darwin8*|10.0,*-darwin[[91]]*) + _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; + 10.[[012]][[,.]]*) + _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; + 10.*) + _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; + esac + ;; + esac + if test yes = "$lt_cv_apple_cc_single_mod"; then + _lt_dar_single_mod='$single_module' + fi + if test yes = "$lt_cv_ld_exported_symbols_list"; then + _lt_dar_export_syms=' $wl-exported_symbols_list,$output_objdir/$libname-symbols.expsym' + else + _lt_dar_export_syms='~$NMEDIT -s $output_objdir/$libname-symbols.expsym $lib' + fi + if test : != "$DSYMUTIL" && test no = "$lt_cv_ld_force_load"; then + _lt_dsymutil='~$DSYMUTIL $lib || :' + else + _lt_dsymutil= + fi + ;; + esac +]) + + +# _LT_DARWIN_LINKER_FEATURES([TAG]) +# --------------------------------- +# Checks for linker and compiler features on darwin +m4_defun([_LT_DARWIN_LINKER_FEATURES], +[ + m4_require([_LT_REQUIRED_DARWIN_CHECKS]) + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_automatic, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported + if test yes = "$lt_cv_ld_force_load"; then + _LT_TAGVAR(whole_archive_flag_spec, $1)='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience $wl-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' + m4_case([$1], [F77], [_LT_TAGVAR(compiler_needs_object, $1)=yes], + [FC], [_LT_TAGVAR(compiler_needs_object, $1)=yes]) + else + _LT_TAGVAR(whole_archive_flag_spec, $1)='' + fi + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(allow_undefined_flag, $1)=$_lt_dar_allow_undefined + case $cc_basename in + ifort*|nagfor*) _lt_dar_can_shared=yes ;; + *) _lt_dar_can_shared=$GCC ;; + esac + if test yes = "$_lt_dar_can_shared"; then + output_verbose_link_cmd=func_echo_all + _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dsymutil" + _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dsymutil" + _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil" + _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil" + m4_if([$1], [CXX], +[ if test yes != "$lt_cv_apple_cc_single_mod"; then + _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dsymutil" + _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dar_export_syms$_lt_dsymutil" + fi +],[]) + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi +]) + +# _LT_SYS_MODULE_PATH_AIX([TAGNAME]) +# ---------------------------------- +# Links a minimal program and checks the executable +# for the system default hardcoded library path. In most cases, +# this is /usr/lib:/lib, but when the MPI compilers are used +# the location of the communication and MPI libs are included too. +# If we don't find anything, use the default library path according +# to the aix ld manual. +# Store the results from the different compilers for each TAGNAME. +# Allow to override them for all tags through lt_cv_aix_libpath. +m4_defun([_LT_SYS_MODULE_PATH_AIX], +[m4_require([_LT_DECL_SED])dnl +if test set = "${lt_cv_aix_libpath+set}"; then + aix_libpath=$lt_cv_aix_libpath +else + AC_CACHE_VAL([_LT_TAGVAR([lt_cv_aix_libpath_], [$1])], + [AC_LINK_IFELSE([AC_LANG_PROGRAM],[ + lt_aix_libpath_sed='[ + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\([^ ]*\) *$/\1/ + p + } + }]' + _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + # Check for a 64-bit object if we didn't find anything. + if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then + _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + fi],[]) + if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then + _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=/usr/lib:/lib + fi + ]) + aix_libpath=$_LT_TAGVAR([lt_cv_aix_libpath_], [$1]) +fi +])# _LT_SYS_MODULE_PATH_AIX + + +# _LT_SHELL_INIT(ARG) +# ------------------- +m4_define([_LT_SHELL_INIT], +[m4_divert_text([M4SH-INIT], [$1 +])])# _LT_SHELL_INIT + + + +# _LT_PROG_ECHO_BACKSLASH +# ----------------------- +# Find how we can fake an echo command that does not interpret backslash. +# In particular, with Autoconf 2.60 or later we add some code to the start +# of the generated configure script that will find a shell with a builtin +# printf (that we can use as an echo command). +m4_defun([_LT_PROG_ECHO_BACKSLASH], +[ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO +ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO + +AC_MSG_CHECKING([how to print strings]) +# Test print first, because it will be a builtin if present. +if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ + test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then + ECHO='print -r --' +elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then + ECHO='printf %s\n' +else + # Use this function as a fallback that always works. + func_fallback_echo () + { + eval 'cat <<_LTECHO_EOF +$[]1 +_LTECHO_EOF' + } + ECHO='func_fallback_echo' +fi + +# func_echo_all arg... +# Invoke $ECHO with all args, space-separated. +func_echo_all () +{ + $ECHO "$*" +} + +case $ECHO in + printf*) AC_MSG_RESULT([printf]) ;; + print*) AC_MSG_RESULT([print -r]) ;; + *) AC_MSG_RESULT([cat]) ;; +esac + +m4_ifdef([_AS_DETECT_SUGGESTED], +[_AS_DETECT_SUGGESTED([ + test -n "${ZSH_VERSION+set}${BASH_VERSION+set}" || ( + ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' + ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO + ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO + PATH=/empty FPATH=/empty; export PATH FPATH + test "X`printf %s $ECHO`" = "X$ECHO" \ + || test "X`print -r -- $ECHO`" = "X$ECHO" )])]) + +_LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts]) +_LT_DECL([], [ECHO], [1], [An echo program that protects backslashes]) +])# _LT_PROG_ECHO_BACKSLASH + + +# _LT_WITH_SYSROOT +# ---------------- +AC_DEFUN([_LT_WITH_SYSROOT], +[AC_MSG_CHECKING([for sysroot]) +AC_ARG_WITH([sysroot], +[AS_HELP_STRING([--with-sysroot@<:@=DIR@:>@], + [Search for dependent libraries within DIR (or the compiler's sysroot + if not specified).])], +[], [with_sysroot=no]) + +dnl lt_sysroot will always be passed unquoted. We quote it here +dnl in case the user passed a directory name. +lt_sysroot= +case $with_sysroot in #( + yes) + if test yes = "$GCC"; then + lt_sysroot=`$CC --print-sysroot 2>/dev/null` + fi + ;; #( + /*) + lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` + ;; #( + no|'') + ;; #( + *) + AC_MSG_RESULT([$with_sysroot]) + AC_MSG_ERROR([The sysroot must be an absolute path.]) + ;; +esac + + AC_MSG_RESULT([${lt_sysroot:-no}]) +_LT_DECL([], [lt_sysroot], [0], [The root where to search for ]dnl +[dependent libraries, and where our libraries should be installed.])]) + +# _LT_ENABLE_LOCK +# --------------- +m4_defun([_LT_ENABLE_LOCK], +[AC_ARG_ENABLE([libtool-lock], + [AS_HELP_STRING([--disable-libtool-lock], + [avoid locking (might break parallel builds)])]) +test no = "$enable_libtool_lock" || enable_libtool_lock=yes + +# Some flags need to be propagated to the compiler or linker for good +# libtool support. +case $host in +ia64-*-hpux*) + # Find out what ABI is being produced by ac_compile, and set mode + # options accordingly. + echo 'int i;' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + case `/usr/bin/file conftest.$ac_objext` in + *ELF-32*) + HPUX_IA64_MODE=32 + ;; + *ELF-64*) + HPUX_IA64_MODE=64 + ;; + esac + fi + rm -rf conftest* + ;; +*-*-irix6*) + # Find out what ABI is being produced by ac_compile, and set linker + # options accordingly. + echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + if test yes = "$lt_cv_prog_gnu_ld"; then + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -melf32bsmip" + ;; + *N32*) + LD="${LD-ld} -melf32bmipn32" + ;; + *64-bit*) + LD="${LD-ld} -melf64bmip" + ;; + esac + else + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -32" + ;; + *N32*) + LD="${LD-ld} -n32" + ;; + *64-bit*) + LD="${LD-ld} -64" + ;; + esac + fi + fi + rm -rf conftest* + ;; + +mips64*-*linux*) + # Find out what ABI is being produced by ac_compile, and set linker + # options accordingly. + echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + emul=elf + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + emul="${emul}32" + ;; + *64-bit*) + emul="${emul}64" + ;; + esac + case `/usr/bin/file conftest.$ac_objext` in + *MSB*) + emul="${emul}btsmip" + ;; + *LSB*) + emul="${emul}ltsmip" + ;; + esac + case `/usr/bin/file conftest.$ac_objext` in + *N32*) + emul="${emul}n32" + ;; + esac + LD="${LD-ld} -m $emul" + fi + rm -rf conftest* + ;; + +x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \ +s390*-*linux*|s390*-*tpf*|sparc*-*linux*) + # Find out what ABI is being produced by ac_compile, and set linker + # options accordingly. Note that the listed cases only cover the + # situations where additional linker options are needed (such as when + # doing 32-bit compilation for a host where ld defaults to 64-bit, or + # vice versa); the common cases where no linker options are needed do + # not appear in the list. + echo 'int i;' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + case `/usr/bin/file conftest.o` in + *32-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_i386_fbsd" + ;; + x86_64-*linux*) + case `/usr/bin/file conftest.o` in + *x86-64*) + LD="${LD-ld} -m elf32_x86_64" + ;; + *) + LD="${LD-ld} -m elf_i386" + ;; + esac + ;; + powerpc64le-*linux*) + LD="${LD-ld} -m elf32lppclinux" + ;; + powerpc64-*linux*) + LD="${LD-ld} -m elf32ppclinux" + ;; + s390x-*linux*) + LD="${LD-ld} -m elf_s390" + ;; + sparc64-*linux*) + LD="${LD-ld} -m elf32_sparc" + ;; + esac + ;; + *64-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_x86_64_fbsd" + ;; + x86_64-*linux*) + LD="${LD-ld} -m elf_x86_64" + ;; + powerpcle-*linux*) + LD="${LD-ld} -m elf64lppc" + ;; + powerpc-*linux*) + LD="${LD-ld} -m elf64ppc" + ;; + s390*-*linux*|s390*-*tpf*) + LD="${LD-ld} -m elf64_s390" + ;; + sparc*-*linux*) + LD="${LD-ld} -m elf64_sparc" + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; + +*-*-sco3.2v5*) + # On SCO OpenServer 5, we need -belf to get full-featured binaries. + SAVE_CFLAGS=$CFLAGS + CFLAGS="$CFLAGS -belf" + AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf, + [AC_LANG_PUSH(C) + AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no]) + AC_LANG_POP]) + if test yes != "$lt_cv_cc_needs_belf"; then + # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf + CFLAGS=$SAVE_CFLAGS + fi + ;; +*-*solaris*) + # Find out what ABI is being produced by ac_compile, and set linker + # options accordingly. + echo 'int i;' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + case `/usr/bin/file conftest.o` in + *64-bit*) + case $lt_cv_prog_gnu_ld in + yes*) + case $host in + i?86-*-solaris*|x86_64-*-solaris*) + LD="${LD-ld} -m elf_x86_64" + ;; + sparc*-*-solaris*) + LD="${LD-ld} -m elf64_sparc" + ;; + esac + # GNU ld 2.21 introduced _sol2 emulations. Use them if available. + if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then + LD=${LD-ld}_sol2 + fi + ;; + *) + if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then + LD="${LD-ld} -64" + fi + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; +esac + +need_locks=$enable_libtool_lock +])# _LT_ENABLE_LOCK + + +# _LT_PROG_AR +# ----------- +m4_defun([_LT_PROG_AR], +[AC_CHECK_TOOLS(AR, [ar], false) +: ${AR=ar} +: ${AR_FLAGS=cru} +_LT_DECL([], [AR], [1], [The archiver]) +_LT_DECL([], [AR_FLAGS], [1], [Flags to create an archive]) + +AC_CACHE_CHECK([for archiver @FILE support], [lt_cv_ar_at_file], + [lt_cv_ar_at_file=no + AC_COMPILE_IFELSE([AC_LANG_PROGRAM], + [echo conftest.$ac_objext > conftest.lst + lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&AS_MESSAGE_LOG_FD' + AC_TRY_EVAL([lt_ar_try]) + if test 0 -eq "$ac_status"; then + # Ensure the archiver fails upon bogus file names. + rm -f conftest.$ac_objext libconftest.a + AC_TRY_EVAL([lt_ar_try]) + if test 0 -ne "$ac_status"; then + lt_cv_ar_at_file=@ + fi + fi + rm -f conftest.* libconftest.a + ]) + ]) + +if test no = "$lt_cv_ar_at_file"; then + archiver_list_spec= +else + archiver_list_spec=$lt_cv_ar_at_file +fi +_LT_DECL([], [archiver_list_spec], [1], + [How to feed a file listing to the archiver]) +])# _LT_PROG_AR + + +# _LT_CMD_OLD_ARCHIVE +# ------------------- +m4_defun([_LT_CMD_OLD_ARCHIVE], +[_LT_PROG_AR + +AC_CHECK_TOOL(STRIP, strip, :) +test -z "$STRIP" && STRIP=: +_LT_DECL([], [STRIP], [1], [A symbol stripping program]) + +AC_CHECK_TOOL(RANLIB, ranlib, :) +test -z "$RANLIB" && RANLIB=: +_LT_DECL([], [RANLIB], [1], + [Commands used to install an old-style archive]) + +# Determine commands to create old-style static archives. +old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' +old_postinstall_cmds='chmod 644 $oldlib' +old_postuninstall_cmds= + +if test -n "$RANLIB"; then + case $host_os in + bitrig* | openbsd*) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" + ;; + *) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" + ;; + esac + old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" +fi + +case $host_os in + darwin*) + lock_old_archive_extraction=yes ;; + *) + lock_old_archive_extraction=no ;; +esac +_LT_DECL([], [old_postinstall_cmds], [2]) +_LT_DECL([], [old_postuninstall_cmds], [2]) +_LT_TAGDECL([], [old_archive_cmds], [2], + [Commands used to build an old-style archive]) +_LT_DECL([], [lock_old_archive_extraction], [0], + [Whether to use a lock for old archive extraction]) +])# _LT_CMD_OLD_ARCHIVE + + +# _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, +# [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE]) +# ---------------------------------------------------------------- +# Check whether the given compiler option works +AC_DEFUN([_LT_COMPILER_OPTION], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_SED])dnl +AC_CACHE_CHECK([$1], [$2], + [$2=no + m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4]) + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$3" ## exclude from sc_useless_quotes_in_assignment + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -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:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&AS_MESSAGE_LOG_FD + echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD + 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. + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + $2=yes + fi + fi + $RM conftest* +]) + +if test yes = "[$]$2"; then + m4_if([$5], , :, [$5]) +else + m4_if([$6], , :, [$6]) +fi +])# _LT_COMPILER_OPTION + +# Old name: +AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], []) + + +# _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, +# [ACTION-SUCCESS], [ACTION-FAILURE]) +# ---------------------------------------------------- +# Check whether the given linker option works +AC_DEFUN([_LT_LINKER_OPTION], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_SED])dnl +AC_CACHE_CHECK([$1], [$2], + [$2=no + save_LDFLAGS=$LDFLAGS + LDFLAGS="$LDFLAGS $3" + echo "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&AS_MESSAGE_LOG_FD + $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + $2=yes + fi + else + $2=yes + fi + fi + $RM -r conftest* + LDFLAGS=$save_LDFLAGS +]) + +if test yes = "[$]$2"; then + m4_if([$4], , :, [$4]) +else + m4_if([$5], , :, [$5]) +fi +])# _LT_LINKER_OPTION + +# Old name: +AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], []) + + +# LT_CMD_MAX_LEN +#--------------- +AC_DEFUN([LT_CMD_MAX_LEN], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +# find the maximum length of command line arguments +AC_MSG_CHECKING([the maximum length of command line arguments]) +AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl + i=0 + teststring=ABCD + + case $build_os in + msdosdjgpp*) + # On DJGPP, this test can blow up pretty badly due to problems in libc + # (any single argument exceeding 2000 bytes causes a buffer overrun + # during glob expansion). Even if it were fixed, the result of this + # check would be larger than it should be. + lt_cv_sys_max_cmd_len=12288; # 12K is about right + ;; + + gnu*) + # Under GNU Hurd, this test is not required because there is + # no limit to the length of command line arguments. + # Libtool will interpret -1 as no limit whatsoever + lt_cv_sys_max_cmd_len=-1; + ;; + + cygwin* | mingw* | cegcc*) + # On Win9x/ME, this test blows up -- it succeeds, but takes + # about 5 minutes as the teststring grows exponentially. + # Worse, since 9x/ME are not pre-emptively multitasking, + # you end up with a "frozen" computer, even though with patience + # the test eventually succeeds (with a max line length of 256k). + # Instead, let's just punt: use the minimum linelength reported by + # all of the supported platforms: 8192 (on NT/2K/XP). + lt_cv_sys_max_cmd_len=8192; + ;; + + mint*) + # On MiNT this can take a long time and run out of memory. + lt_cv_sys_max_cmd_len=8192; + ;; + + amigaos*) + # On AmigaOS with pdksh, this test takes hours, literally. + # So we just punt and use a minimum line length of 8192. + lt_cv_sys_max_cmd_len=8192; + ;; + + bitrig* | darwin* | dragonfly* | freebsd* | netbsd* | openbsd*) + # This has been around since 386BSD, at least. Likely further. + if test -x /sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` + elif test -x /usr/sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` + else + lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs + fi + # And add a safety zone + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + ;; + + interix*) + # We know the value 262144 and hardcode it with a safety zone (like BSD) + lt_cv_sys_max_cmd_len=196608 + ;; + + os2*) + # The test takes a long time on OS/2. + lt_cv_sys_max_cmd_len=8192 + ;; + + osf*) + # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure + # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not + # nice to cause kernel panics so lets avoid the loop below. + # First set a reasonable default. + lt_cv_sys_max_cmd_len=16384 + # + if test -x /sbin/sysconfig; then + case `/sbin/sysconfig -q proc exec_disable_arg_limit` in + *1*) lt_cv_sys_max_cmd_len=-1 ;; + esac + fi + ;; + sco3.2v5*) + lt_cv_sys_max_cmd_len=102400 + ;; + sysv5* | sco5v6* | sysv4.2uw2*) + kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` + if test -n "$kargmax"; then + lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[ ]]//'` + else + lt_cv_sys_max_cmd_len=32768 + fi + ;; + *) + lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` + if test -n "$lt_cv_sys_max_cmd_len" && \ + test undefined != "$lt_cv_sys_max_cmd_len"; then + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + else + # Make teststring a little bigger before we do anything with it. + # a 1K string should be a reasonable start. + for i in 1 2 3 4 5 6 7 8; do + teststring=$teststring$teststring + done + SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} + # If test is not a shell built-in, we'll probably end up computing a + # maximum length that is only half of the actual maximum length, but + # we can't tell. + while { test X`env echo "$teststring$teststring" 2>/dev/null` \ + = "X$teststring$teststring"; } >/dev/null 2>&1 && + test 17 != "$i" # 1/2 MB should be enough + do + i=`expr $i + 1` + teststring=$teststring$teststring + done + # Only check the string length outside the loop. + lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` + teststring= + # Add a significant safety factor because C++ compilers can tack on + # massive amounts of additional arguments before passing them to the + # linker. It appears as though 1/2 is a usable value. + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` + fi + ;; + esac +]) +if test -n "$lt_cv_sys_max_cmd_len"; then + AC_MSG_RESULT($lt_cv_sys_max_cmd_len) +else + AC_MSG_RESULT(none) +fi +max_cmd_len=$lt_cv_sys_max_cmd_len +_LT_DECL([], [max_cmd_len], [0], + [What is the maximum length of a command?]) +])# LT_CMD_MAX_LEN + +# Old name: +AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], []) + + +# _LT_HEADER_DLFCN +# ---------------- +m4_defun([_LT_HEADER_DLFCN], +[AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl +])# _LT_HEADER_DLFCN + + +# _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE, +# ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING) +# ---------------------------------------------------------------- +m4_defun([_LT_TRY_DLOPEN_SELF], +[m4_require([_LT_HEADER_DLFCN])dnl +if test yes = "$cross_compiling"; then : + [$4] +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext <<_LT_EOF +[#line $LINENO "configure" +#include "confdefs.h" + +#if HAVE_DLFCN_H +#include +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +/* When -fvisibility=hidden is used, assume the code has been annotated + correspondingly for the symbols needed. */ +#if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) +int fnord () __attribute__((visibility("default"))); +#endif + +int fnord () { return 42; } +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else + { + if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + else puts (dlerror ()); + } + /* dlclose (self); */ + } + else + puts (dlerror ()); + + return status; +}] +_LT_EOF + if AC_TRY_EVAL(ac_link) && test -s "conftest$ac_exeext" 2>/dev/null; then + (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) $1 ;; + x$lt_dlneed_uscore) $2 ;; + x$lt_dlunknown|x*) $3 ;; + esac + else : + # compilation failed + $3 + fi +fi +rm -fr conftest* +])# _LT_TRY_DLOPEN_SELF + + +# LT_SYS_DLOPEN_SELF +# ------------------ +AC_DEFUN([LT_SYS_DLOPEN_SELF], +[m4_require([_LT_HEADER_DLFCN])dnl +if test yes != "$enable_dlopen"; then + enable_dlopen=unknown + enable_dlopen_self=unknown + enable_dlopen_self_static=unknown +else + lt_cv_dlopen=no + lt_cv_dlopen_libs= + + case $host_os in + beos*) + lt_cv_dlopen=load_add_on + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ;; + + mingw* | pw32* | cegcc*) + lt_cv_dlopen=LoadLibrary + lt_cv_dlopen_libs= + ;; + + cygwin*) + lt_cv_dlopen=dlopen + lt_cv_dlopen_libs= + ;; + + darwin*) + # if libdl is installed we need to link against it + AC_CHECK_LIB([dl], [dlopen], + [lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl],[ + lt_cv_dlopen=dyld + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ]) + ;; + + tpf*) + # Don't try to run any link tests for TPF. We know it's impossible + # because TPF is a cross-compiler, and we know how we open DSOs. + lt_cv_dlopen=dlopen + lt_cv_dlopen_libs= + lt_cv_dlopen_self=no + ;; + + *) + AC_CHECK_FUNC([shl_load], + [lt_cv_dlopen=shl_load], + [AC_CHECK_LIB([dld], [shl_load], + [lt_cv_dlopen=shl_load lt_cv_dlopen_libs=-ldld], + [AC_CHECK_FUNC([dlopen], + [lt_cv_dlopen=dlopen], + [AC_CHECK_LIB([dl], [dlopen], + [lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl], + [AC_CHECK_LIB([svld], [dlopen], + [lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-lsvld], + [AC_CHECK_LIB([dld], [dld_link], + [lt_cv_dlopen=dld_link lt_cv_dlopen_libs=-ldld]) + ]) + ]) + ]) + ]) + ]) + ;; + esac + + if test no = "$lt_cv_dlopen"; then + enable_dlopen=no + else + enable_dlopen=yes + fi + + case $lt_cv_dlopen in + dlopen) + save_CPPFLAGS=$CPPFLAGS + test yes = "$ac_cv_header_dlfcn_h" && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" + + save_LDFLAGS=$LDFLAGS + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" + + save_LIBS=$LIBS + LIBS="$lt_cv_dlopen_libs $LIBS" + + AC_CACHE_CHECK([whether a program can dlopen itself], + lt_cv_dlopen_self, [dnl + _LT_TRY_DLOPEN_SELF( + lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes, + lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross) + ]) + + if test yes = "$lt_cv_dlopen_self"; then + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" + AC_CACHE_CHECK([whether a statically linked program can dlopen itself], + lt_cv_dlopen_self_static, [dnl + _LT_TRY_DLOPEN_SELF( + lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes, + lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross) + ]) + fi + + CPPFLAGS=$save_CPPFLAGS + LDFLAGS=$save_LDFLAGS + LIBS=$save_LIBS + ;; + esac + + case $lt_cv_dlopen_self in + yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; + *) enable_dlopen_self=unknown ;; + esac + + case $lt_cv_dlopen_self_static in + yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; + *) enable_dlopen_self_static=unknown ;; + esac +fi +_LT_DECL([dlopen_support], [enable_dlopen], [0], + [Whether dlopen is supported]) +_LT_DECL([dlopen_self], [enable_dlopen_self], [0], + [Whether dlopen of programs is supported]) +_LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0], + [Whether dlopen of statically linked programs is supported]) +])# LT_SYS_DLOPEN_SELF + +# Old name: +AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], []) + + +# _LT_COMPILER_C_O([TAGNAME]) +# --------------------------- +# Check to see if options -c and -o are simultaneously supported by compiler. +# This macro does not hard code the compiler like AC_PROG_CC_C_O. +m4_defun([_LT_COMPILER_C_O], +[m4_require([_LT_DECL_SED])dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_TAG_COMPILER])dnl +AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext], + [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)], + [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -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:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&AS_MESSAGE_LOG_FD + echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes + fi + fi + chmod u+w . 2>&AS_MESSAGE_LOG_FD + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* +]) +_LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1], + [Does compiler simultaneously support -c and -o options?]) +])# _LT_COMPILER_C_O + + +# _LT_COMPILER_FILE_LOCKS([TAGNAME]) +# ---------------------------------- +# Check to see if we can do hard links to lock some files if needed +m4_defun([_LT_COMPILER_FILE_LOCKS], +[m4_require([_LT_ENABLE_LOCK])dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +_LT_COMPILER_C_O([$1]) + +hard_links=nottested +if test no = "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" && test no != "$need_locks"; then + # do not overwrite the value of need_locks provided by the user + AC_MSG_CHECKING([if we can lock with hard links]) + hard_links=yes + $RM conftest* + ln conftest.a conftest.b 2>/dev/null && hard_links=no + touch conftest.a + ln conftest.a conftest.b 2>&5 || hard_links=no + ln conftest.a conftest.b 2>/dev/null && hard_links=no + AC_MSG_RESULT([$hard_links]) + if test no = "$hard_links"; then + AC_MSG_WARN(['$CC' does not support '-c -o', so 'make -j' may be unsafe]) + need_locks=warn + fi +else + need_locks=no +fi +_LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?]) +])# _LT_COMPILER_FILE_LOCKS + + +# _LT_CHECK_OBJDIR +# ---------------- +m4_defun([_LT_CHECK_OBJDIR], +[AC_CACHE_CHECK([for objdir], [lt_cv_objdir], +[rm -f .libs 2>/dev/null +mkdir .libs 2>/dev/null +if test -d .libs; then + lt_cv_objdir=.libs +else + # MS-DOS does not allow filenames that begin with a dot. + lt_cv_objdir=_libs +fi +rmdir .libs 2>/dev/null]) +objdir=$lt_cv_objdir +_LT_DECL([], [objdir], [0], + [The name of the directory that contains temporary libtool files])dnl +m4_pattern_allow([LT_OBJDIR])dnl +AC_DEFINE_UNQUOTED([LT_OBJDIR], "$lt_cv_objdir/", + [Define to the sub-directory where libtool stores uninstalled libraries.]) +])# _LT_CHECK_OBJDIR + + +# _LT_LINKER_HARDCODE_LIBPATH([TAGNAME]) +# -------------------------------------- +# Check hardcoding attributes. +m4_defun([_LT_LINKER_HARDCODE_LIBPATH], +[AC_MSG_CHECKING([how to hardcode library paths into programs]) +_LT_TAGVAR(hardcode_action, $1)= +if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" || + test -n "$_LT_TAGVAR(runpath_var, $1)" || + test yes = "$_LT_TAGVAR(hardcode_automatic, $1)"; then + + # We can hardcode non-existent directories. + if test no != "$_LT_TAGVAR(hardcode_direct, $1)" && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test no != "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" && + test no != "$_LT_TAGVAR(hardcode_minus_L, $1)"; then + # Linking always hardcodes the temporary library directory. + _LT_TAGVAR(hardcode_action, $1)=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + _LT_TAGVAR(hardcode_action, $1)=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + _LT_TAGVAR(hardcode_action, $1)=unsupported +fi +AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)]) + +if test relink = "$_LT_TAGVAR(hardcode_action, $1)" || + test yes = "$_LT_TAGVAR(inherit_rpath, $1)"; then + # Fast installation is not supported + enable_fast_install=no +elif test yes = "$shlibpath_overrides_runpath" || + test no = "$enable_shared"; then + # Fast installation is not necessary + enable_fast_install=needless +fi +_LT_TAGDECL([], [hardcode_action], [0], + [How to hardcode a shared library path into an executable]) +])# _LT_LINKER_HARDCODE_LIBPATH + + +# _LT_CMD_STRIPLIB +# ---------------- +m4_defun([_LT_CMD_STRIPLIB], +[m4_require([_LT_DECL_EGREP]) +striplib= +old_striplib= +AC_MSG_CHECKING([whether stripping libraries is possible]) +if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then + test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" + test -z "$striplib" && striplib="$STRIP --strip-unneeded" + AC_MSG_RESULT([yes]) +else +# FIXME - insert some real tests, host_os isn't really good enough + case $host_os in + darwin*) + if test -n "$STRIP"; then + striplib="$STRIP -x" + old_striplib="$STRIP -S" + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + fi + ;; + *) + AC_MSG_RESULT([no]) + ;; + esac +fi +_LT_DECL([], [old_striplib], [1], [Commands to strip libraries]) +_LT_DECL([], [striplib], [1]) +])# _LT_CMD_STRIPLIB + + +# _LT_PREPARE_MUNGE_PATH_LIST +# --------------------------- +# Make sure func_munge_path_list() is defined correctly. +m4_defun([_LT_PREPARE_MUNGE_PATH_LIST], +[[# func_munge_path_list VARIABLE PATH +# ----------------------------------- +# VARIABLE is name of variable containing _space_ separated list of +# directories to be munged by the contents of PATH, which is string +# having a format: +# "DIR[:DIR]:" +# string "DIR[ DIR]" will be prepended to VARIABLE +# ":DIR[:DIR]" +# string "DIR[ DIR]" will be appended to VARIABLE +# "DIRP[:DIRP]::[DIRA:]DIRA" +# string "DIRP[ DIRP]" will be prepended to VARIABLE and string +# "DIRA[ DIRA]" will be appended to VARIABLE +# "DIR[:DIR]" +# VARIABLE will be replaced by "DIR[ DIR]" +func_munge_path_list () +{ + case x@S|@2 in + x) + ;; + *:) + eval @S|@1=\"`$ECHO @S|@2 | $SED 's/:/ /g'` \@S|@@S|@1\" + ;; + x:*) + eval @S|@1=\"\@S|@@S|@1 `$ECHO @S|@2 | $SED 's/:/ /g'`\" + ;; + *::*) + eval @S|@1=\"\@S|@@S|@1\ `$ECHO @S|@2 | $SED -e 's/.*:://' -e 's/:/ /g'`\" + eval @S|@1=\"`$ECHO @S|@2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \@S|@@S|@1\" + ;; + *) + eval @S|@1=\"`$ECHO @S|@2 | $SED 's/:/ /g'`\" + ;; + esac +} +]])# _LT_PREPARE_PATH_LIST + + +# _LT_SYS_DYNAMIC_LINKER([TAG]) +# ----------------------------- +# PORTME Fill in your ld.so characteristics +m4_defun([_LT_SYS_DYNAMIC_LINKER], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_OBJDUMP])dnl +m4_require([_LT_DECL_SED])dnl +m4_require([_LT_CHECK_SHELL_FEATURES])dnl +m4_require([_LT_PREPARE_MUNGE_PATH_LIST])dnl +AC_MSG_CHECKING([dynamic linker characteristics]) +m4_if([$1], + [], [ +if test yes = "$GCC"; then + case $host_os in + darwin*) lt_awk_arg='/^libraries:/,/LR/' ;; + *) lt_awk_arg='/^libraries:/' ;; + esac + case $host_os in + mingw* | cegcc*) lt_sed_strip_eq='s|=\([[A-Za-z]]:\)|\1|g' ;; + *) lt_sed_strip_eq='s|=/|/|g' ;; + esac + lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` + case $lt_search_path_spec in + *\;*) + # if the path contains ";" then we assume it to be the separator + # otherwise default to the standard path separator (i.e. ":") - it is + # assumed that no part of a normal pathname contains ";" but that should + # okay in the real world where ";" in dirpaths is itself problematic. + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` + ;; + *) + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` + ;; + esac + # Ok, now we have the path, separated by spaces, we can step through it + # and add multilib dir if necessary... + lt_tmp_lt_search_path_spec= + lt_multi_os_dir=/`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` + # ...but if some path component already ends with the multilib dir we assume + # that all is fine and trust -print-search-dirs as is (GCC 4.2? or newer). + case "$lt_multi_os_dir; $lt_search_path_spec " in + "/; "* | "/.; "* | "/./; "* | *"$lt_multi_os_dir "* | *"$lt_multi_os_dir/ "*) + lt_multi_os_dir= + ;; + esac + for lt_sys_path in $lt_search_path_spec; do + if test -d "$lt_sys_path$lt_multi_os_dir"; then + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path$lt_multi_os_dir" + elif test -n "$lt_multi_os_dir"; then + test -d "$lt_sys_path" && \ + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" + fi + done + lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' +BEGIN {RS = " "; FS = "/|\n";} { + lt_foo = ""; + lt_count = 0; + for (lt_i = NF; lt_i > 0; lt_i--) { + if ($lt_i != "" && $lt_i != ".") { + if ($lt_i == "..") { + lt_count++; + } else { + if (lt_count == 0) { + lt_foo = "/" $lt_i lt_foo; + } else { + lt_count--; + } + } + } + } + if (lt_foo != "") { lt_freq[[lt_foo]]++; } + if (lt_freq[[lt_foo]] == 1) { print lt_foo; } +}'` + # AWK program above erroneously prepends '/' to C:/dos/paths + # for these hosts. + case $host_os in + mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ + $SED 's|/\([[A-Za-z]]:\)|\1|g'` ;; + esac + sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` +else + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" +fi]) +library_names_spec= +libname_spec='lib$name' +soname_spec= +shrext_cmds=.so +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +shlibpath_overrides_runpath=unknown +version_type=none +dynamic_linker="$host_os ld.so" +sys_lib_dlsearch_path_spec="/lib /usr/lib" +need_lib_prefix=unknown +hardcode_into_libs=no + +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +need_version=unknown + +AC_ARG_VAR([LT_SYS_LIBRARY_PATH], +[User-defined run-time library search path.]) + +case $host_os in +aix3*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$release$shared_ext$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX 3 has no versioning support, so we append a major version to the name. + soname_spec='$libname$release$shared_ext$major' + ;; + +aix[[4-9]]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + hardcode_into_libs=yes + if test ia64 = "$host_cpu"; then + # AIX 5 supports IA64 + library_names_spec='$libname$release$shared_ext$major $libname$release$shared_ext$versuffix $libname$shared_ext' + shlibpath_var=LD_LIBRARY_PATH + else + # With GCC up to 2.95.x, collect2 would create an import file + # for dependence libraries. The import file would start with + # the line '#! .'. This would cause the generated library to + # depend on '.', always an invalid library. This was fixed in + # development snapshots of GCC prior to 3.0. + case $host_os in + aix4 | aix4.[[01]] | aix4.[[01]].*) + if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' + echo ' yes ' + echo '#endif'; } | $CC -E - | $GREP yes > /dev/null; then + : + else + can_build_shared=no + fi + ;; + esac + # Using Import Files as archive members, it is possible to support + # filename-based versioning of shared library archives on AIX. While + # this would work for both with and without runtime linking, it will + # prevent static linking of such archives. So we do filename-based + # shared library versioning with .so extension only, which is used + # when both runtime linking and shared linking is enabled. + # Unfortunately, runtime linking may impact performance, so we do + # not want this to be the default eventually. Also, we use the + # versioned .so libs for executables only if there is the -brtl + # linker flag in LDFLAGS as well, or --with-aix-soname=svr4 only. + # To allow for filename-based versioning support, we need to create + # libNAME.so.V as an archive file, containing: + # *) an Import File, referring to the versioned filename of the + # archive as well as the shared archive member, telling the + # bitwidth (32 or 64) of that shared object, and providing the + # list of exported symbols of that shared object, eventually + # decorated with the 'weak' keyword + # *) the shared object with the F_LOADONLY flag set, to really avoid + # it being seen by the linker. + # At run time we better use the real file rather than another symlink, + # but for link time we create the symlink libNAME.so -> libNAME.so.V + + case $with_aix_soname,$aix_use_runtimelinking in + # AIX (on Power*) has no versioning support, so currently we cannot hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + aix,yes) # traditional libtool + dynamic_linker='AIX unversionable lib.so' + # If using run time linking (on AIX 4.2 or later) use lib.so + # instead of lib.a to let people know that these are not + # typical AIX shared libraries. + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + ;; + aix,no) # traditional AIX only + dynamic_linker='AIX lib.a[(]lib.so.V[)]' + # We preserve .a as extension for shared libraries through AIX4.2 + # and later when we are not doing run time linking. + library_names_spec='$libname$release.a $libname.a' + soname_spec='$libname$release$shared_ext$major' + ;; + svr4,*) # full svr4 only + dynamic_linker="AIX lib.so.V[(]$shared_archive_member_spec.o[)]" + library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' + # We do not specify a path in Import Files, so LIBPATH fires. + shlibpath_overrides_runpath=yes + ;; + *,yes) # both, prefer svr4 + dynamic_linker="AIX lib.so.V[(]$shared_archive_member_spec.o[)], lib.a[(]lib.so.V[)]" + library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' + # unpreferred sharedlib libNAME.a needs extra handling + postinstall_cmds='test -n "$linkname" || linkname="$realname"~func_stripname "" ".so" "$linkname"~$install_shared_prog "$dir/$func_stripname_result.$libext" "$destdir/$func_stripname_result.$libext"~test -z "$tstripme" || test -z "$striplib" || $striplib "$destdir/$func_stripname_result.$libext"' + postuninstall_cmds='for n in $library_names $old_library; do :; done~func_stripname "" ".so" "$n"~test "$func_stripname_result" = "$n" || func_append rmfiles " $odir/$func_stripname_result.$libext"' + # We do not specify a path in Import Files, so LIBPATH fires. + shlibpath_overrides_runpath=yes + ;; + *,no) # both, prefer aix + dynamic_linker="AIX lib.a[(]lib.so.V[)], lib.so.V[(]$shared_archive_member_spec.o[)]" + library_names_spec='$libname$release.a $libname.a' + soname_spec='$libname$release$shared_ext$major' + # unpreferred sharedlib libNAME.so.V and symlink libNAME.so need extra handling + postinstall_cmds='test -z "$dlname" || $install_shared_prog $dir/$dlname $destdir/$dlname~test -z "$tstripme" || test -z "$striplib" || $striplib $destdir/$dlname~test -n "$linkname" || linkname=$realname~func_stripname "" ".a" "$linkname"~(cd "$destdir" && $LN_S -f $dlname $func_stripname_result.so)' + postuninstall_cmds='test -z "$dlname" || func_append rmfiles " $odir/$dlname"~for n in $old_library $library_names; do :; done~func_stripname "" ".a" "$n"~func_append rmfiles " $odir/$func_stripname_result.so"' + ;; + esac + shlibpath_var=LIBPATH + fi + ;; + +amigaos*) + case $host_cpu in + powerpc) + # Since July 2007 AmigaOS4 officially supports .so libraries. + # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + ;; + m68k) + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' + ;; + esac + ;; + +beos*) + library_names_spec='$libname$shared_ext' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; + +bsdi[[45]]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" + sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" + # the default ld.so.conf also contains /usr/contrib/lib and + # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow + # libtool to hard-code these into programs + ;; + +cygwin* | mingw* | pw32* | cegcc*) + version_type=windows + shrext_cmds=.dll + need_version=no + need_lib_prefix=no + + case $GCC,$cc_basename in + yes,*) + # gcc + library_names_spec='$libname.dll.a' + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \$file`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname~ + if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then + eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; + fi' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + + case $host_os in + cygwin*) + # Cygwin DLLs use 'cyg' prefix rather than 'lib' + soname_spec='`echo $libname | sed -e 's/^lib/cyg/'``echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext' +m4_if([$1], [],[ + sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"]) + ;; + mingw* | cegcc*) + # MinGW DLLs use traditional 'lib' prefix + soname_spec='$libname`echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext' + ;; + pw32*) + # pw32 DLLs use 'pw' prefix rather than 'lib' + library_names_spec='`echo $libname | sed -e 's/^lib/pw/'``echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext' + ;; + esac + dynamic_linker='Win32 ld.exe' + ;; + + *,cl*) + # Native MSVC + libname_spec='$name' + soname_spec='$libname`echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext' + library_names_spec='$libname.dll.lib' + + case $build_os in + mingw*) + sys_lib_search_path_spec= + lt_save_ifs=$IFS + IFS=';' + for lt_path in $LIB + do + IFS=$lt_save_ifs + # Let DOS variable expansion print the short 8.3 style file name. + lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` + sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" + done + IFS=$lt_save_ifs + # Convert to MSYS style. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([[a-zA-Z]]\\):| /\\1|g' -e 's|^ ||'` + ;; + cygwin*) + # Convert to unix form, then to dos form, then back to unix form + # but this time dos style (no spaces!) so that the unix form looks + # like /cygdrive/c/PROGRA~1:/cygdr... + sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` + sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` + sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + ;; + *) + sys_lib_search_path_spec=$LIB + if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then + # It is most probably a Windows format PATH. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + # FIXME: find the short name or the path components, as spaces are + # common. (e.g. "Program Files" -> "PROGRA~1") + ;; + esac + + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \$file`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + dynamic_linker='Win32 link.exe' + ;; + + *) + # Assume MSVC wrapper + library_names_spec='$libname`echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext $libname.lib' + dynamic_linker='Win32 ld.exe' + ;; + esac + # FIXME: first we should search . and the directory the executable is in + shlibpath_var=PATH + ;; + +darwin* | rhapsody*) + dynamic_linker="$host_os dyld" + version_type=darwin + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$major$shared_ext $libname$shared_ext' + soname_spec='$libname$release$major$shared_ext' + shlibpath_overrides_runpath=yes + shlibpath_var=DYLD_LIBRARY_PATH + shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' +m4_if([$1], [],[ + sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"]) + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' + ;; + +dgux*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +freebsd* | dragonfly*) + # DragonFly does not have aout. When/if they implement a new + # versioning mechanism, adjust this. + if test -x /usr/bin/objformat; then + objformat=`/usr/bin/objformat` + else + case $host_os in + freebsd[[23]].*) objformat=aout ;; + *) objformat=elf ;; + esac + fi + version_type=freebsd-$objformat + case $version_type in + freebsd-elf*) + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' + need_version=yes + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case $host_os in + freebsd2.*) + shlibpath_overrides_runpath=yes + ;; + freebsd3.[[01]]* | freebsdelf3.[[01]]*) + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \ + freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1) + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + *) # from 4.6 on, and DragonFly + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + esac + ;; + +haiku*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + dynamic_linker="$host_os runtime_loader" + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LIBRARY_PATH + shlibpath_overrides_runpath=no + sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' + hardcode_into_libs=yes + ;; + +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + version_type=sunos + need_lib_prefix=no + need_version=no + case $host_cpu in + ia64*) + shrext_cmds='.so' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.so" + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + if test 32 = "$HPUX_IA64_MODE"; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + sys_lib_dlsearch_path_spec=/usr/lib/hpux32 + else + sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + sys_lib_dlsearch_path_spec=/usr/lib/hpux64 + fi + ;; + hppa*64*) + shrext_cmds='.sl' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.sl" + shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + *) + shrext_cmds='.sl' + dynamic_linker="$host_os dld.sl" + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + ;; + esac + # HP-UX runs *really* slowly unless shared libraries are mode 555, ... + postinstall_cmds='chmod 555 $lib' + # or fails outright, so override atomically: + install_override_mode=555 + ;; + +interix[[3-9]]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) + if test yes = "$lt_cv_prog_gnu_ld"; then + version_type=linux # correct to gnu/linux during the next big refactor + else + version_type=irix + fi ;; + esac + need_lib_prefix=no + need_version=no + soname_spec='$libname$release$shared_ext$major' + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$release$shared_ext $libname$shared_ext' + case $host_os in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in # libtool.m4 will add one of these switches to LD + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") + libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") + libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") + libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac + ;; + esac + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib$libsuff /lib$libsuff /usr/local/lib$libsuff" + sys_lib_dlsearch_path_spec="/usr/lib$libsuff /lib$libsuff" + hardcode_into_libs=yes + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux*oldld* | linux*aout* | linux*coff*) + dynamic_linker=no + ;; + +linux*android*) + version_type=none # Android doesn't support versioned libraries. + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext' + soname_spec='$libname$release$shared_ext' + finish_cmds= + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + dynamic_linker='Android linker' + # Don't embed -rpath directories since the linker doesn't support them. + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + ;; + +# This must be glibc/ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + + # Some binutils ld are patched to set DT_RUNPATH + AC_CACHE_VAL([lt_cv_shlibpath_overrides_runpath], + [lt_cv_shlibpath_overrides_runpath=no + save_LDFLAGS=$LDFLAGS + save_libdir=$libdir + eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \ + LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\"" + AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], + [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null], + [lt_cv_shlibpath_overrides_runpath=yes])]) + LDFLAGS=$save_LDFLAGS + libdir=$save_libdir + ]) + shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath + + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + # Add ABI-specific directories to the system library path. + sys_lib_dlsearch_path_spec="/lib64 /usr/lib64 /lib /usr/lib" + + # Ideally, we could use ldconfig to report *all* directores which are + # searched for libraries, however this is still not possible. Aside from not + # being certain /sbin/ldconfig is available, command + # 'ldconfig -N -X -v | grep ^/' on 64bit Fedora does not report /usr/lib64, + # even though it is searched at run-time. Try to do the best guess by + # appending ld.so.conf contents (and includes) to the search path. + if test -f /etc/ld.so.conf; then + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` + sys_lib_dlsearch_path_spec="$sys_lib_dlsearch_path_spec $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; + +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + +newsos6) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +*nto* | *qnx*) + version_type=qnx + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='ldqnx.so' + ;; + +openbsd* | bitrig*) + version_type=sunos + sys_lib_dlsearch_path_spec=/usr/lib + need_lib_prefix=no + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then + need_version=no + else + need_version=yes + fi + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +os2*) + libname_spec='$name' + version_type=windows + shrext_cmds=.dll + need_version=no + need_lib_prefix=no + # OS/2 can only load a DLL with a base name of 8 characters or less. + soname_spec='`test -n "$os2dllname" && libname="$os2dllname"; + v=$($ECHO $release$versuffix | tr -d .-); + n=$($ECHO $libname | cut -b -$((8 - ${#v})) | tr . _); + $ECHO $n$v`$shared_ext' + library_names_spec='${libname}_dll.$libext' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=BEGINLIBPATH + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + postinstall_cmds='base_file=`basename \$file`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; $ECHO \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname~ + if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then + eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; + fi' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; $ECHO \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_lib_prefix=no + need_version=no + soname_spec='$libname$release$shared_ext$major' + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + +rdos*) + dynamic_linker=no + ;; + +solaris*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; + +sunos4*) + version_type=sunos + library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test yes = "$with_gnu_ld"; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.3*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + need_lib_prefix=no + runpath_var=LD_RUN_PATH + ;; + siemens) + need_lib_prefix=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; + +sysv4*MP*) + if test -d /usr/nec; then + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$shared_ext.$versuffix $libname$shared_ext.$major $libname$shared_ext' + soname_spec='$libname$shared_ext.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + version_type=sco + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + if test yes = "$with_gnu_ld"; then + sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' + else + sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' + case $host_os in + sco3.2v5*) + sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" + ;; + esac + fi + sys_lib_dlsearch_path_spec='/usr/lib' + ;; + +tpf*) + # TPF is a cross-target only. Preferred cross-host = GNU/Linux. + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +uts4*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' + soname_spec='$libname$release$shared_ext$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +*) + dynamic_linker=no + ;; +esac +AC_MSG_RESULT([$dynamic_linker]) +test no = "$dynamic_linker" && can_build_shared=no + +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test yes = "$GCC"; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi + +if test set = "${lt_cv_sys_lib_search_path_spec+set}"; then + sys_lib_search_path_spec=$lt_cv_sys_lib_search_path_spec +fi + +if test set = "${lt_cv_sys_lib_dlsearch_path_spec+set}"; then + sys_lib_dlsearch_path_spec=$lt_cv_sys_lib_dlsearch_path_spec +fi + +# remember unaugmented sys_lib_dlsearch_path content for libtool script decls... +configure_time_dlsearch_path=$sys_lib_dlsearch_path_spec + +# ... but it needs LT_SYS_LIBRARY_PATH munging for other configure-time code +func_munge_path_list sys_lib_dlsearch_path_spec "$LT_SYS_LIBRARY_PATH" + +# to be used as default LT_SYS_LIBRARY_PATH value in generated libtool +configure_time_lt_sys_library_path=$LT_SYS_LIBRARY_PATH + +_LT_DECL([], [variables_saved_for_relink], [1], + [Variables whose values should be saved in libtool wrapper scripts and + restored at link time]) +_LT_DECL([], [need_lib_prefix], [0], + [Do we need the "lib" prefix for modules?]) +_LT_DECL([], [need_version], [0], [Do we need a version for libraries?]) +_LT_DECL([], [version_type], [0], [Library versioning type]) +_LT_DECL([], [runpath_var], [0], [Shared library runtime path variable]) +_LT_DECL([], [shlibpath_var], [0],[Shared library path variable]) +_LT_DECL([], [shlibpath_overrides_runpath], [0], + [Is shlibpath searched before the hard-coded library search path?]) +_LT_DECL([], [libname_spec], [1], [Format of library name prefix]) +_LT_DECL([], [library_names_spec], [1], + [[List of archive names. First name is the real one, the rest are links. + The last name is the one that the linker finds with -lNAME]]) +_LT_DECL([], [soname_spec], [1], + [[The coded name of the library, if different from the real name]]) +_LT_DECL([], [install_override_mode], [1], + [Permission mode override for installation of shared libraries]) +_LT_DECL([], [postinstall_cmds], [2], + [Command to use after installation of a shared archive]) +_LT_DECL([], [postuninstall_cmds], [2], + [Command to use after uninstallation of a shared archive]) +_LT_DECL([], [finish_cmds], [2], + [Commands used to finish a libtool library installation in a directory]) +_LT_DECL([], [finish_eval], [1], + [[As "finish_cmds", except a single script fragment to be evaled but + not shown]]) +_LT_DECL([], [hardcode_into_libs], [0], + [Whether we should hardcode library paths into libraries]) +_LT_DECL([], [sys_lib_search_path_spec], [2], + [Compile-time system search path for libraries]) +_LT_DECL([sys_lib_dlsearch_path_spec], [configure_time_dlsearch_path], [2], + [Detected run-time system search path for libraries]) +_LT_DECL([], [configure_time_lt_sys_library_path], [2], + [Explicit LT_SYS_LIBRARY_PATH set during ./configure time]) +])# _LT_SYS_DYNAMIC_LINKER + + +# _LT_PATH_TOOL_PREFIX(TOOL) +# -------------------------- +# find a file program that can recognize shared library +AC_DEFUN([_LT_PATH_TOOL_PREFIX], +[m4_require([_LT_DECL_EGREP])dnl +AC_MSG_CHECKING([for $1]) +AC_CACHE_VAL(lt_cv_path_MAGIC_CMD, +[case $MAGIC_CMD in +[[\\/*] | ?:[\\/]*]) + lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD=$MAGIC_CMD + lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR +dnl $ac_dummy forces splitting on constant user-supplied paths. +dnl POSIX.2 word splitting is done only on the output of word expansions, +dnl not every word. This closes a longstanding sh security hole. + ac_dummy="m4_if([$2], , $PATH, [$2])" + for ac_dir in $ac_dummy; do + IFS=$lt_save_ifs + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$1"; then + lt_cv_path_MAGIC_CMD=$ac_dir/"$1" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` + MAGIC_CMD=$lt_cv_path_MAGIC_CMD + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <<_LT_EOF 1>&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org + +_LT_EOF + fi ;; + esac + fi + break + fi + done + IFS=$lt_save_ifs + MAGIC_CMD=$lt_save_MAGIC_CMD + ;; +esac]) +MAGIC_CMD=$lt_cv_path_MAGIC_CMD +if test -n "$MAGIC_CMD"; then + AC_MSG_RESULT($MAGIC_CMD) +else + AC_MSG_RESULT(no) +fi +_LT_DECL([], [MAGIC_CMD], [0], + [Used to examine libraries when file_magic_cmd begins with "file"])dnl +])# _LT_PATH_TOOL_PREFIX + +# Old name: +AU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], []) + + +# _LT_PATH_MAGIC +# -------------- +# find a file program that can recognize a shared library +m4_defun([_LT_PATH_MAGIC], +[_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH) +if test -z "$lt_cv_path_MAGIC_CMD"; then + if test -n "$ac_tool_prefix"; then + _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH) + else + MAGIC_CMD=: + fi +fi +])# _LT_PATH_MAGIC + + +# LT_PATH_LD +# ---------- +# find the pathname to the GNU or non-GNU linker +AC_DEFUN([LT_PATH_LD], +[AC_REQUIRE([AC_PROG_CC])dnl +AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_CANONICAL_BUILD])dnl +m4_require([_LT_DECL_SED])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_PROG_ECHO_BACKSLASH])dnl + +AC_ARG_WITH([gnu-ld], + [AS_HELP_STRING([--with-gnu-ld], + [assume the C compiler uses GNU ld @<:@default=no@:>@])], + [test no = "$withval" || with_gnu_ld=yes], + [with_gnu_ld=no])dnl + +ac_prog=ld +if test yes = "$GCC"; then + # Check if gcc -print-prog-name=ld gives a path. + AC_MSG_CHECKING([for ld used by $CC]) + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return, which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [[\\/]]* | ?:[[\\/]]*) + re_direlt='/[[^/]][[^/]]*/\.\./' + # Canonicalize the pathname of ld + ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` + while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do + ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` + done + test -z "$LD" && LD=$ac_prog + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test yes = "$with_gnu_ld"; then + AC_MSG_CHECKING([for GNU ld]) +else + AC_MSG_CHECKING([for non-GNU ld]) +fi +AC_CACHE_VAL(lt_cv_path_LD, +[if test -z "$LD"; then + lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS=$lt_save_ifs + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + lt_cv_path_LD=$ac_dir/$ac_prog + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some variants of GNU ld only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$lt_cv_path_LD" -v 2>&1 &1 conftest.i +cat conftest.i conftest.i >conftest2.i +: ${lt_DD:=$DD} +AC_PATH_PROGS_FEATURE_CHECK([lt_DD], [dd], +[if "$ac_path_lt_DD" bs=32 count=1 conftest.out 2>/dev/null; then + cmp -s conftest.i conftest.out \ + && ac_cv_path_lt_DD="$ac_path_lt_DD" ac_path_lt_DD_found=: +fi]) +rm -f conftest.i conftest2.i conftest.out]) +])# _LT_PATH_DD + + +# _LT_CMD_TRUNCATE +# ---------------- +# find command to truncate a binary pipe +m4_defun([_LT_CMD_TRUNCATE], +[m4_require([_LT_PATH_DD]) +AC_CACHE_CHECK([how to truncate binary pipes], [lt_cv_truncate_bin], +[printf 0123456789abcdef0123456789abcdef >conftest.i +cat conftest.i conftest.i >conftest2.i +lt_cv_truncate_bin= +if "$ac_cv_path_lt_DD" bs=32 count=1 conftest.out 2>/dev/null; then + cmp -s conftest.i conftest.out \ + && lt_cv_truncate_bin="$ac_cv_path_lt_DD bs=4096 count=1" +fi +rm -f conftest.i conftest2.i conftest.out +test -z "$lt_cv_truncate_bin" && lt_cv_truncate_bin="$SED -e 4q"]) +_LT_DECL([lt_truncate_bin], [lt_cv_truncate_bin], [1], + [Command to truncate a binary pipe]) +])# _LT_CMD_TRUNCATE + + +# _LT_CHECK_MAGIC_METHOD +# ---------------------- +# how to check for library dependencies +# -- PORTME fill in with the dynamic library characteristics +m4_defun([_LT_CHECK_MAGIC_METHOD], +[m4_require([_LT_DECL_EGREP]) +m4_require([_LT_DECL_OBJDUMP]) +AC_CACHE_CHECK([how to recognize dependent libraries], +lt_cv_deplibs_check_method, +[lt_cv_file_magic_cmd='$MAGIC_CMD' +lt_cv_file_magic_test_file= +lt_cv_deplibs_check_method='unknown' +# Need to set the preceding variable on all platforms that support +# interlibrary dependencies. +# 'none' -- dependencies not supported. +# 'unknown' -- same as none, but documents that we really don't know. +# 'pass_all' -- all dependencies passed with no checks. +# 'test_compile' -- check by making test program. +# 'file_magic [[regex]]' -- check by looking for files in library path +# that responds to the $file_magic_cmd with a given extended regex. +# If you have 'file' or equivalent on your system and you're not sure +# whether 'pass_all' will *always* work, you probably want this one. + +case $host_os in +aix[[4-9]]*) + lt_cv_deplibs_check_method=pass_all + ;; + +beos*) + lt_cv_deplibs_check_method=pass_all + ;; + +bsdi[[45]]*) + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib)' + lt_cv_file_magic_cmd='/usr/bin/file -L' + lt_cv_file_magic_test_file=/shlib/libc.so + ;; + +cygwin*) + # func_win32_libid is a shell function defined in ltmain.sh + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + ;; + +mingw* | pw32*) + # Base MSYS/MinGW do not provide the 'file' command needed by + # func_win32_libid shell function, so use a weaker test based on 'objdump', + # unless we find 'file', for example because we are cross-compiling. + if ( file / ) >/dev/null 2>&1; then + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + else + # Keep this pattern in sync with the one in func_win32_libid. + lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' + lt_cv_file_magic_cmd='$OBJDUMP -f' + fi + ;; + +cegcc*) + # use the weaker test based on 'objdump'. See mingw*. + lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' + lt_cv_file_magic_cmd='$OBJDUMP -f' + ;; + +darwin* | rhapsody*) + lt_cv_deplibs_check_method=pass_all + ;; + +freebsd* | dragonfly*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + case $host_cpu in + i*86 ) + # Not sure whether the presence of OpenBSD here was a mistake. + # Let's accept both of them until this is cleared up. + lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` + ;; + esac + else + lt_cv_deplibs_check_method=pass_all + fi + ;; + +haiku*) + lt_cv_deplibs_check_method=pass_all + ;; + +hpux10.20* | hpux11*) + lt_cv_file_magic_cmd=/usr/bin/file + case $host_cpu in + ia64*) + lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64' + lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so + ;; + hppa*64*) + [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]'] + lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl + ;; + *) + lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]]\.[[0-9]]) shared library' + lt_cv_file_magic_test_file=/usr/lib/libc.sl + ;; + esac + ;; + +interix[[3-9]]*) + # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$' + ;; + +irix5* | irix6* | nonstopux*) + case $LD in + *-32|*"-32 ") libmagic=32-bit;; + *-n32|*"-n32 ") libmagic=N32;; + *-64|*"-64 ") libmagic=64-bit;; + *) libmagic=never-match;; + esac + lt_cv_deplibs_check_method=pass_all + ;; + +# This must be glibc/ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + lt_cv_deplibs_check_method=pass_all + ;; + +netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$' + fi + ;; + +newos6*) + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=/usr/lib/libnls.so + ;; + +*nto* | *qnx*) + lt_cv_deplibs_check_method=pass_all + ;; + +openbsd* | bitrig*) + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' + fi + ;; + +osf3* | osf4* | osf5*) + lt_cv_deplibs_check_method=pass_all + ;; + +rdos*) + lt_cv_deplibs_check_method=pass_all + ;; + +solaris*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv4 | sysv4.3*) + case $host_vendor in + motorola) + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]' + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` + ;; + ncr) + lt_cv_deplibs_check_method=pass_all + ;; + sequent) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' + ;; + sni) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib" + lt_cv_file_magic_test_file=/lib/libc.so + ;; + siemens) + lt_cv_deplibs_check_method=pass_all + ;; + pc) + lt_cv_deplibs_check_method=pass_all + ;; + esac + ;; + +tpf*) + lt_cv_deplibs_check_method=pass_all + ;; +os2*) + lt_cv_deplibs_check_method=pass_all + ;; +esac +]) + +file_magic_glob= +want_nocaseglob=no +if test "$build" = "$host"; then + case $host_os in + mingw* | pw32*) + if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then + want_nocaseglob=yes + else + file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[[\1]]\/[[\1]]\/g;/g"` + fi + ;; + esac +fi + +file_magic_cmd=$lt_cv_file_magic_cmd +deplibs_check_method=$lt_cv_deplibs_check_method +test -z "$deplibs_check_method" && deplibs_check_method=unknown + +_LT_DECL([], [deplibs_check_method], [1], + [Method to check whether dependent libraries are shared objects]) +_LT_DECL([], [file_magic_cmd], [1], + [Command to use when deplibs_check_method = "file_magic"]) +_LT_DECL([], [file_magic_glob], [1], + [How to find potential files when deplibs_check_method = "file_magic"]) +_LT_DECL([], [want_nocaseglob], [1], + [Find potential files using nocaseglob when deplibs_check_method = "file_magic"]) +])# _LT_CHECK_MAGIC_METHOD + + +# LT_PATH_NM +# ---------- +# find the pathname to a BSD- or MS-compatible name lister +AC_DEFUN([LT_PATH_NM], +[AC_REQUIRE([AC_PROG_CC])dnl +AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM, +[if test -n "$NM"; then + # Let the user override the test. + lt_cv_path_NM=$NM +else + lt_nm_to_check=${ac_tool_prefix}nm + if test -n "$ac_tool_prefix" && test "$build" = "$host"; then + lt_nm_to_check="$lt_nm_to_check nm" + fi + for lt_tmp_nm in $lt_nm_to_check; do + lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR + for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do + IFS=$lt_save_ifs + test -z "$ac_dir" && ac_dir=. + tmp_nm=$ac_dir/$lt_tmp_nm + if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext"; then + # Check to see if the nm accepts a BSD-compat flag. + # Adding the 'sed 1q' prevents false positives on HP-UX, which says: + # nm: unknown option "B" ignored + # Tru64's nm complains that /dev/null is an invalid object file + # MSYS converts /dev/null to NUL, MinGW nm treats NUL as empty + case $build_os in + mingw*) lt_bad_file=conftest.nm/nofile ;; + *) lt_bad_file=/dev/null ;; + esac + case `"$tmp_nm" -B $lt_bad_file 2>&1 | sed '1q'` in + *$lt_bad_file* | *'Invalid file or object type'*) + lt_cv_path_NM="$tmp_nm -B" + break 2 + ;; + *) + case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in + */dev/null*) + lt_cv_path_NM="$tmp_nm -p" + break 2 + ;; + *) + lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but + continue # so that we can try to find one that supports BSD flags + ;; + esac + ;; + esac + fi + done + IFS=$lt_save_ifs + done + : ${lt_cv_path_NM=no} +fi]) +if test no != "$lt_cv_path_NM"; then + NM=$lt_cv_path_NM +else + # Didn't find any BSD compatible name lister, look for dumpbin. + if test -n "$DUMPBIN"; then : + # Let the user override the test. + else + AC_CHECK_TOOLS(DUMPBIN, [dumpbin "link -dump"], :) + case `$DUMPBIN -symbols -headers /dev/null 2>&1 | sed '1q'` in + *COFF*) + DUMPBIN="$DUMPBIN -symbols -headers" + ;; + *) + DUMPBIN=: + ;; + esac + fi + AC_SUBST([DUMPBIN]) + if test : != "$DUMPBIN"; then + NM=$DUMPBIN + fi +fi +test -z "$NM" && NM=nm +AC_SUBST([NM]) +_LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl + +AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface], + [lt_cv_nm_interface="BSD nm" + echo "int some_variable = 0;" > conftest.$ac_ext + (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&AS_MESSAGE_LOG_FD) + (eval "$ac_compile" 2>conftest.err) + cat conftest.err >&AS_MESSAGE_LOG_FD + (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD) + (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) + cat conftest.err >&AS_MESSAGE_LOG_FD + (eval echo "\"\$as_me:$LINENO: output\"" >&AS_MESSAGE_LOG_FD) + cat conftest.out >&AS_MESSAGE_LOG_FD + if $GREP 'External.*some_variable' conftest.out > /dev/null; then + lt_cv_nm_interface="MS dumpbin" + fi + rm -f conftest*]) +])# LT_PATH_NM + +# Old names: +AU_ALIAS([AM_PROG_NM], [LT_PATH_NM]) +AU_ALIAS([AC_PROG_NM], [LT_PATH_NM]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AM_PROG_NM], []) +dnl AC_DEFUN([AC_PROG_NM], []) + +# _LT_CHECK_SHAREDLIB_FROM_LINKLIB +# -------------------------------- +# how to determine the name of the shared library +# associated with a specific link library. +# -- PORTME fill in with the dynamic library characteristics +m4_defun([_LT_CHECK_SHAREDLIB_FROM_LINKLIB], +[m4_require([_LT_DECL_EGREP]) +m4_require([_LT_DECL_OBJDUMP]) +m4_require([_LT_DECL_DLLTOOL]) +AC_CACHE_CHECK([how to associate runtime and link libraries], +lt_cv_sharedlib_from_linklib_cmd, +[lt_cv_sharedlib_from_linklib_cmd='unknown' + +case $host_os in +cygwin* | mingw* | pw32* | cegcc*) + # two different shell functions defined in ltmain.sh; + # decide which one to use based on capabilities of $DLLTOOL + case `$DLLTOOL --help 2>&1` in + *--identify-strict*) + lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib + ;; + *) + lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback + ;; + esac + ;; +*) + # fallback: assume linklib IS sharedlib + lt_cv_sharedlib_from_linklib_cmd=$ECHO + ;; +esac +]) +sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd +test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO + +_LT_DECL([], [sharedlib_from_linklib_cmd], [1], + [Command to associate shared and link libraries]) +])# _LT_CHECK_SHAREDLIB_FROM_LINKLIB + + +# _LT_PATH_MANIFEST_TOOL +# ---------------------- +# locate the manifest tool +m4_defun([_LT_PATH_MANIFEST_TOOL], +[AC_CHECK_TOOL(MANIFEST_TOOL, mt, :) +test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt +AC_CACHE_CHECK([if $MANIFEST_TOOL is a manifest tool], [lt_cv_path_mainfest_tool], + [lt_cv_path_mainfest_tool=no + echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&AS_MESSAGE_LOG_FD + $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out + cat conftest.err >&AS_MESSAGE_LOG_FD + if $GREP 'Manifest Tool' conftest.out > /dev/null; then + lt_cv_path_mainfest_tool=yes + fi + rm -f conftest*]) +if test yes != "$lt_cv_path_mainfest_tool"; then + MANIFEST_TOOL=: +fi +_LT_DECL([], [MANIFEST_TOOL], [1], [Manifest tool])dnl +])# _LT_PATH_MANIFEST_TOOL + + +# _LT_DLL_DEF_P([FILE]) +# --------------------- +# True iff FILE is a Windows DLL '.def' file. +# Keep in sync with func_dll_def_p in the libtool script +AC_DEFUN([_LT_DLL_DEF_P], +[dnl + test DEF = "`$SED -n dnl + -e '\''s/^[[ ]]*//'\'' dnl Strip leading whitespace + -e '\''/^\(;.*\)*$/d'\'' dnl Delete empty lines and comments + -e '\''s/^\(EXPORTS\|LIBRARY\)\([[ ]].*\)*$/DEF/p'\'' dnl + -e q dnl Only consider the first "real" line + $1`" dnl +])# _LT_DLL_DEF_P + + +# LT_LIB_M +# -------- +# check for math library +AC_DEFUN([LT_LIB_M], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +LIBM= +case $host in +*-*-beos* | *-*-cegcc* | *-*-cygwin* | *-*-haiku* | *-*-pw32* | *-*-darwin*) + # These system don't have libm, or don't need it + ;; +*-ncr-sysv4.3*) + AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM=-lmw) + AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm") + ;; +*) + AC_CHECK_LIB(m, cos, LIBM=-lm) + ;; +esac +AC_SUBST([LIBM]) +])# LT_LIB_M + +# Old name: +AU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_CHECK_LIBM], []) + + +# _LT_COMPILER_NO_RTTI([TAGNAME]) +# ------------------------------- +m4_defun([_LT_COMPILER_NO_RTTI], +[m4_require([_LT_TAG_COMPILER])dnl + +_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= + +if test yes = "$GCC"; then + case $cc_basename in + nvcc*) + _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -Xcompiler -fno-builtin' ;; + *) + _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' ;; + esac + + _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions], + lt_cv_prog_compiler_rtti_exceptions, + [-fno-rtti -fno-exceptions], [], + [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"]) +fi +_LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1], + [Compiler flag to turn off builtin functions]) +])# _LT_COMPILER_NO_RTTI + + +# _LT_CMD_GLOBAL_SYMBOLS +# ---------------------- +m4_defun([_LT_CMD_GLOBAL_SYMBOLS], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_PROG_CC])dnl +AC_REQUIRE([AC_PROG_AWK])dnl +AC_REQUIRE([LT_PATH_NM])dnl +AC_REQUIRE([LT_PATH_LD])dnl +m4_require([_LT_DECL_SED])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_TAG_COMPILER])dnl + +# Check for command to grab the raw symbol name followed by C symbol from nm. +AC_MSG_CHECKING([command to parse $NM output from $compiler object]) +AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe], +[ +# These are sane defaults that work on at least a few old systems. +# [They come from Ultrix. What could be older than Ultrix?!! ;)] + +# Character class describing NM global symbol codes. +symcode='[[BCDEGRST]]' + +# Regexp to match symbols that can be accessed directly from C. +sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)' + +# Define system-specific variables. +case $host_os in +aix*) + symcode='[[BCDT]]' + ;; +cygwin* | mingw* | pw32* | cegcc*) + symcode='[[ABCDGISTW]]' + ;; +hpux*) + if test ia64 = "$host_cpu"; then + symcode='[[ABCDEGRST]]' + fi + ;; +irix* | nonstopux*) + symcode='[[BCDEGRST]]' + ;; +osf*) + symcode='[[BCDEGQRST]]' + ;; +solaris*) + symcode='[[BDRT]]' + ;; +sco3.2v5*) + symcode='[[DT]]' + ;; +sysv4.2uw2*) + symcode='[[DT]]' + ;; +sysv5* | sco5v6* | unixware* | OpenUNIX*) + symcode='[[ABDT]]' + ;; +sysv4) + symcode='[[DFNSTU]]' + ;; +esac + +# If we're using GNU nm, then use its standard symbol codes. +case `$NM -V 2>&1` in +*GNU* | *'with BFD'*) + symcode='[[ABCDGIRSTW]]' ;; +esac + +if test "$lt_cv_nm_interface" = "MS dumpbin"; then + # Gets list of data symbols to import. + lt_cv_sys_global_symbol_to_import="sed -n -e 's/^I .* \(.*\)$/\1/p'" + # Adjust the below global symbol transforms to fixup imported variables. + lt_cdecl_hook=" -e 's/^I .* \(.*\)$/extern __declspec(dllimport) char \1;/p'" + lt_c_name_hook=" -e 's/^I .* \(.*\)$/ {\"\1\", (void *) 0},/p'" + lt_c_name_lib_hook="\ + -e 's/^I .* \(lib.*\)$/ {\"\1\", (void *) 0},/p'\ + -e 's/^I .* \(.*\)$/ {\"lib\1\", (void *) 0},/p'" +else + # Disable hooks by default. + lt_cv_sys_global_symbol_to_import= + lt_cdecl_hook= + lt_c_name_hook= + lt_c_name_lib_hook= +fi + +# Transform an extracted symbol line into a proper C declaration. +# Some systems (esp. on ia64) link data and code symbols differently, +# so use this general approach. +lt_cv_sys_global_symbol_to_cdecl="sed -n"\ +$lt_cdecl_hook\ +" -e 's/^T .* \(.*\)$/extern int \1();/p'"\ +" -e 's/^$symcode$symcode* .* \(.*\)$/extern char \1;/p'" + +# Transform an extracted symbol line into symbol name and symbol address +lt_cv_sys_global_symbol_to_c_name_address="sed -n"\ +$lt_c_name_hook\ +" -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ +" -e 's/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/p'" + +# Transform an extracted symbol line into symbol name with lib prefix and +# symbol address. +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n"\ +$lt_c_name_lib_hook\ +" -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ +" -e 's/^$symcode$symcode* .* \(lib.*\)$/ {\"\1\", (void *) \&\1},/p'"\ +" -e 's/^$symcode$symcode* .* \(.*\)$/ {\"lib\1\", (void *) \&\1},/p'" + +# Handle CRLF in mingw tool chain +opt_cr= +case $build_os in +mingw*) + opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp + ;; +esac + +# Try without a prefix underscore, then with it. +for ac_symprfx in "" "_"; do + + # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. + symxfrm="\\1 $ac_symprfx\\2 \\2" + + # Write the raw and C identifiers. + if test "$lt_cv_nm_interface" = "MS dumpbin"; then + # Fake it for dumpbin and say T for any non-static function, + # D for any global variable and I for any imported variable. + # Also find C++ and __fastcall symbols from MSVC++, + # which start with @ or ?. + lt_cv_sys_global_symbol_pipe="$AWK ['"\ +" {last_section=section; section=\$ 3};"\ +" /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ +" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ +" /^ *Symbol name *: /{split(\$ 0,sn,\":\"); si=substr(sn[2],2)};"\ +" /^ *Type *: code/{print \"T\",si,substr(si,length(prfx))};"\ +" /^ *Type *: data/{print \"I\",si,substr(si,length(prfx))};"\ +" \$ 0!~/External *\|/{next};"\ +" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ +" {if(hide[section]) next};"\ +" {f=\"D\"}; \$ 0~/\(\).*\|/{f=\"T\"};"\ +" {split(\$ 0,a,/\||\r/); split(a[2],s)};"\ +" s[1]~/^[@?]/{print f,s[1],s[1]; next};"\ +" s[1]~prfx {split(s[1],t,\"@\"); print f,t[1],substr(t[1],length(prfx))}"\ +" ' prfx=^$ac_symprfx]" + else + lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" + fi + lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" + + # Check to see that the pipe works correctly. + pipe_works=no + + rm -f conftest* + cat > conftest.$ac_ext <<_LT_EOF +#ifdef __cplusplus +extern "C" { +#endif +char nm_test_var; +void nm_test_func(void); +void nm_test_func(void){} +#ifdef __cplusplus +} +#endif +int main(){nm_test_var='a';nm_test_func();return(0);} +_LT_EOF + + if AC_TRY_EVAL(ac_compile); then + # Now try to grab the symbols. + nlist=conftest.nm + if AC_TRY_EVAL(NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) && test -s "$nlist"; then + # Try sorting and uniquifying the output. + if sort "$nlist" | uniq > "$nlist"T; then + mv -f "$nlist"T "$nlist" + else + rm -f "$nlist"T + fi + + # Make sure that we snagged all the symbols we need. + if $GREP ' nm_test_var$' "$nlist" >/dev/null; then + if $GREP ' nm_test_func$' "$nlist" >/dev/null; then + cat <<_LT_EOF > conftest.$ac_ext +/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ +#if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE +/* DATA imports from DLLs on WIN32 can't be const, because runtime + relocations are performed -- see ld's documentation on pseudo-relocs. */ +# define LT@&t@_DLSYM_CONST +#elif defined __osf__ +/* This system does not cope well with relocations in const data. */ +# define LT@&t@_DLSYM_CONST +#else +# define LT@&t@_DLSYM_CONST const +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +_LT_EOF + # Now generate the symbol file. + eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' + + cat <<_LT_EOF >> conftest.$ac_ext + +/* The mapping between symbol names and symbols. */ +LT@&t@_DLSYM_CONST struct { + const char *name; + void *address; +} +lt__PROGRAM__LTX_preloaded_symbols[[]] = +{ + { "@PROGRAM@", (void *) 0 }, +_LT_EOF + $SED "s/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext + cat <<\_LT_EOF >> conftest.$ac_ext + {0, (void *) 0} +}; + +/* This works around a problem in FreeBSD linker */ +#ifdef FREEBSD_WORKAROUND +static const void *lt_preloaded_setup() { + return lt__PROGRAM__LTX_preloaded_symbols; +} +#endif + +#ifdef __cplusplus +} +#endif +_LT_EOF + # Now try linking the two files. + mv conftest.$ac_objext conftstm.$ac_objext + lt_globsym_save_LIBS=$LIBS + lt_globsym_save_CFLAGS=$CFLAGS + LIBS=conftstm.$ac_objext + CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)" + if AC_TRY_EVAL(ac_link) && test -s conftest$ac_exeext; then + pipe_works=yes + fi + LIBS=$lt_globsym_save_LIBS + CFLAGS=$lt_globsym_save_CFLAGS + else + echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD + fi + else + echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD + fi + else + echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD + fi + else + echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD + cat conftest.$ac_ext >&5 + fi + rm -rf conftest* conftst* + + # Do not use the global_symbol_pipe unless it works. + if test yes = "$pipe_works"; then + break + else + lt_cv_sys_global_symbol_pipe= + fi +done +]) +if test -z "$lt_cv_sys_global_symbol_pipe"; then + lt_cv_sys_global_symbol_to_cdecl= +fi +if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then + AC_MSG_RESULT(failed) +else + AC_MSG_RESULT(ok) +fi + +# Response file support. +if test "$lt_cv_nm_interface" = "MS dumpbin"; then + nm_file_list_spec='@' +elif $NM --help 2>/dev/null | grep '[[@]]FILE' >/dev/null; then + nm_file_list_spec='@' +fi + +_LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1], + [Take the output of nm and produce a listing of raw symbols and C names]) +_LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1], + [Transform the output of nm in a proper C declaration]) +_LT_DECL([global_symbol_to_import], [lt_cv_sys_global_symbol_to_import], [1], + [Transform the output of nm into a list of symbols to manually relocate]) +_LT_DECL([global_symbol_to_c_name_address], + [lt_cv_sys_global_symbol_to_c_name_address], [1], + [Transform the output of nm in a C name address pair]) +_LT_DECL([global_symbol_to_c_name_address_lib_prefix], + [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1], + [Transform the output of nm in a C name address pair when lib prefix is needed]) +_LT_DECL([nm_interface], [lt_cv_nm_interface], [1], + [The name lister interface]) +_LT_DECL([], [nm_file_list_spec], [1], + [Specify filename containing input files for $NM]) +]) # _LT_CMD_GLOBAL_SYMBOLS + + +# _LT_COMPILER_PIC([TAGNAME]) +# --------------------------- +m4_defun([_LT_COMPILER_PIC], +[m4_require([_LT_TAG_COMPILER])dnl +_LT_TAGVAR(lt_prog_compiler_wl, $1)= +_LT_TAGVAR(lt_prog_compiler_pic, $1)= +_LT_TAGVAR(lt_prog_compiler_static, $1)= + +m4_if([$1], [CXX], [ + # C++ specific cases for pic, static, wl, etc. + if test yes = "$GXX"; then + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test ia64 = "$host_cpu"; then + # AIX 5 now supports IA64 processor + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + fi + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + m68k) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the '-m68020' flag to GCC prevents building anything better, + # like '-m68040'. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' + ;; + esac + ;; + + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + mingw* | cygwin* | os2* | pw32* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + # Although the cygwin gcc ignores -fPIC, still need this for old-style + # (--disable-auto-import) libraries + m4_if([$1], [GCJ], [], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) + case $host_os in + os2*) + _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-static' + ;; + esac + ;; + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' + ;; + *djgpp*) + # DJGPP does not support shared libraries at all + _LT_TAGVAR(lt_prog_compiler_pic, $1)= + ;; + haiku*) + # PIC is the default for Haiku. + # The "-static" flag exists, but is broken. + _LT_TAGVAR(lt_prog_compiler_static, $1)= + ;; + interix[[3-9]]*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + sysv4*MP*) + if test -d /usr/nec; then + _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic + fi + ;; + hpux*) + # PIC is the default for 64-bit PA HP-UX, but not for 32-bit + # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag + # sets the default TLS model and affects inlining. + case $host_cpu in + hppa*64*) + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + ;; + *qnx* | *nto*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + else + case $host_os in + aix[[4-9]]*) + # All AIX code is PIC. + if test ia64 = "$host_cpu"; then + # AIX 5 now supports IA64 processor + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + else + _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' + fi + ;; + chorus*) + case $cc_basename in + cxch68*) + # Green Hills C++ Compiler + # _LT_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" + ;; + esac + ;; + mingw* | cygwin* | os2* | pw32* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + m4_if([$1], [GCJ], [], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) + ;; + dgux*) + case $cc_basename in + ec++*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + ;; + ghcx*) + # Green Hills C++ Compiler + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + ;; + *) + ;; + esac + ;; + freebsd* | dragonfly*) + # FreeBSD uses GNU C++ + ;; + hpux9* | hpux10* | hpux11*) + case $cc_basename in + CC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-a ${wl}archive' + if test ia64 != "$host_cpu"; then + _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' + fi + ;; + aCC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-a ${wl}archive' + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' + ;; + esac + ;; + *) + ;; + esac + ;; + interix*) + # This is c89, which is MS Visual C++ (no shared libs) + # Anyone wants to do a port? + ;; + irix5* | irix6* | nonstopux*) + case $cc_basename in + CC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + # CC pic flag -KPIC is the default. + ;; + *) + ;; + esac + ;; + linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + case $cc_basename in + KCC*) + # KAI C++ Compiler + _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + ecpc* ) + # old Intel C++ for x86_64, which still supported -KPIC. + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + icpc* ) + # Intel C++, used to be incompatible with GCC. + # ICC 10 doesn't accept -KPIC any more. + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + pgCC* | pgcpp*) + # Portland Group C++ compiler + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + cxx*) + # Compaq C++ + # Make sure the PIC flag is empty. It appears that all Alpha + # Linux and Compaq Tru64 Unix objects are PIC. + _LT_TAGVAR(lt_prog_compiler_pic, $1)= + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + xlc* | xlC* | bgxl[[cC]]* | mpixl[[cC]]*) + # IBM XL 8.0, 9.0 on PPC and BlueGene + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' + ;; + esac + ;; + esac + ;; + lynxos*) + ;; + m88k*) + ;; + mvs*) + case $cc_basename in + cxx*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall' + ;; + *) + ;; + esac + ;; + netbsd*) + ;; + *qnx* | *nto*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' + ;; + osf3* | osf4* | osf5*) + case $cc_basename in + KCC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' + ;; + RCC*) + # Rational C++ 2.4.1 + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + ;; + cxx*) + # Digital/Compaq C++ + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # Make sure the PIC flag is empty. It appears that all Alpha + # Linux and Compaq Tru64 Unix objects are PIC. + _LT_TAGVAR(lt_prog_compiler_pic, $1)= + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + *) + ;; + esac + ;; + psos*) + ;; + solaris*) + case $cc_basename in + CC* | sunCC*) + # Sun C++ 4.2, 5.x and Centerline C++ + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' + ;; + gcx*) + # Green Hills C++ Compiler + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' + ;; + *) + ;; + esac + ;; + sunos4*) + case $cc_basename in + CC*) + # Sun C++ 4.x + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + lcc*) + # Lucid + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + ;; + *) + ;; + esac + ;; + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + case $cc_basename in + CC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + esac + ;; + tandem*) + case $cc_basename in + NCC*) + # NonStop-UX NCC 3.20 + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + ;; + *) + ;; + esac + ;; + vxworks*) + ;; + *) + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + ;; + esac + fi +], +[ + if test yes = "$GCC"; then + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test ia64 = "$host_cpu"; then + # AIX 5 now supports IA64 processor + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + fi + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + m68k) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the '-m68020' flag to GCC prevents building anything better, + # like '-m68040'. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' + ;; + esac + ;; + + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + # Although the cygwin gcc ignores -fPIC, still need this for old-style + # (--disable-auto-import) libraries + m4_if([$1], [GCJ], [], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) + case $host_os in + os2*) + _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-static' + ;; + esac + ;; + + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' + ;; + + haiku*) + # PIC is the default for Haiku. + # The "-static" flag exists, but is broken. + _LT_TAGVAR(lt_prog_compiler_static, $1)= + ;; + + hpux*) + # PIC is the default for 64-bit PA HP-UX, but not for 32-bit + # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag + # sets the default TLS model and affects inlining. + case $host_cpu in + hppa*64*) + # +Z the default + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + ;; + + interix[[3-9]]*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + + msdosdjgpp*) + # Just because we use GCC doesn't mean we suddenly get shared libraries + # on systems that don't support them. + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + enable_shared=no + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic + fi + ;; + + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + + case $cc_basename in + nvcc*) # Cuda Compiler Driver 2.2 + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Xlinker ' + if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then + _LT_TAGVAR(lt_prog_compiler_pic, $1)="-Xcompiler $_LT_TAGVAR(lt_prog_compiler_pic, $1)" + fi + ;; + esac + else + # PORTME Check for flag to pass linker flags through the system compiler. + case $host_os in + aix*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + if test ia64 = "$host_cpu"; then + # AIX 5 now supports IA64 processor + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + else + _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' + fi + ;; + + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' + case $cc_basename in + nagfor*) + # NAG Fortran compiler + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + esac + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + m4_if([$1], [GCJ], [], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) + case $host_os in + os2*) + _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-static' + ;; + esac + ;; + + hpux9* | hpux10* | hpux11*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' + ;; + esac + # Is there a better lt_prog_compiler_static that works with the bundled CC? + _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-a ${wl}archive' + ;; + + irix5* | irix6* | nonstopux*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # PIC (with -KPIC) is the default. + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + + linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + case $cc_basename in + # old Intel for x86_64, which still supported -KPIC. + ecc*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + # icc used to be incompatible with GCC. + # ICC 10 doesn't accept -KPIC any more. + icc* | ifort*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + # Lahey Fortran 8.1. + lf95*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared' + _LT_TAGVAR(lt_prog_compiler_static, $1)='--static' + ;; + nagfor*) + # NAG Fortran compiler + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + tcc*) + # Fabrice Bellard et al's Tiny C Compiler + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) + # Portland Group compilers (*not* the Pentium gcc compiler, + # which looks to be a dead project) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + ccc*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # All Alpha code is PIC. + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + xl* | bgxl* | bgf* | mpixl*) + # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [[1-7]].* | *Sun*Fortran*\ 8.[[0-3]]*) + # Sun Fortran 8.3 passes all unrecognized flags to the linker + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_TAGVAR(lt_prog_compiler_wl, $1)='' + ;; + *Sun\ F* | *Sun*Fortran*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' + ;; + *Sun\ C*) + # Sun C 5.9 + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + ;; + *Intel*\ [[CF]]*Compiler*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + *Portland\ Group*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + esac + ;; + esac + ;; + + newsos6) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' + ;; + + osf3* | osf4* | osf5*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # All OSF/1 code is PIC. + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + + rdos*) + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + + solaris*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + case $cc_basename in + f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';; + *) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';; + esac + ;; + + sunos4*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + sysv4 | sysv4.2uw2* | sysv4.3*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + fi + ;; + + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + unicos*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + ;; + + uts4*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + *) + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + ;; + esac + fi +]) +case $host_os in + # For platforms that do not support PIC, -DPIC is meaningless: + *djgpp*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)= + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])" + ;; +esac + +AC_CACHE_CHECK([for $compiler option to produce PIC], + [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)], + [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_prog_compiler_pic, $1)]) +_LT_TAGVAR(lt_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_cv_prog_compiler_pic, $1) + +# +# Check to make sure the PIC flag actually works. +# +if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then + _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works], + [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)], + [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [], + [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in + "" | " "*) ;; + *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_TAGVAR(lt_prog_compiler_pic, $1)" ;; + esac], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)= + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no]) +fi +_LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1], + [Additional compiler flags for building library objects]) + +_LT_TAGDECL([wl], [lt_prog_compiler_wl], [1], + [How to pass a linker flag through the compiler]) +# +# Check to make sure the static flag actually works. +# +wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\" +_LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works], + _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1), + $lt_tmp_static_flag, + [], + [_LT_TAGVAR(lt_prog_compiler_static, $1)=]) +_LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1], + [Compiler flag to prevent dynamic linking]) +])# _LT_COMPILER_PIC + + +# _LT_LINKER_SHLIBS([TAGNAME]) +# ---------------------------- +# See if the linker supports building shared libraries. +m4_defun([_LT_LINKER_SHLIBS], +[AC_REQUIRE([LT_PATH_LD])dnl +AC_REQUIRE([LT_PATH_NM])dnl +m4_require([_LT_PATH_MANIFEST_TOOL])dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_DECL_SED])dnl +m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl +m4_require([_LT_TAG_COMPILER])dnl +AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) +m4_if([$1], [CXX], [ + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] + case $host_os in + aix[[4-9]]*) + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to GNU nm, but means don't demangle to AIX nm. + # Without the "-l" option, or with the "-B" option, AIX nm treats + # weak defined symbols like other global defined symbols, whereas + # GNU nm marks them as "W". + # While the 'weak' keyword is ignored in the Export File, we need + # it in the Import File for the 'aix-soname' feature, so we have + # to replace the "-B" option with "-P" for AIX nm. + if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then + _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols' + else + _LT_TAGVAR(export_symbols_cmds, $1)='`func_echo_all $NM | $SED -e '\''s/B\([[^B]]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && ([substr](\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols' + fi + ;; + pw32*) + _LT_TAGVAR(export_symbols_cmds, $1)=$ltdll_cmds + ;; + cygwin* | mingw* | cegcc*) + case $cc_basename in + cl*) + _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' + ;; + *) + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' + _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] + ;; + esac + ;; + *) + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + ;; + esac +], [ + runpath_var= + _LT_TAGVAR(allow_undefined_flag, $1)= + _LT_TAGVAR(always_export_symbols, $1)=no + _LT_TAGVAR(archive_cmds, $1)= + _LT_TAGVAR(archive_expsym_cmds, $1)= + _LT_TAGVAR(compiler_needs_object, $1)=no + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no + _LT_TAGVAR(export_dynamic_flag_spec, $1)= + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + _LT_TAGVAR(hardcode_automatic, $1)=no + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_direct_absolute, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= + _LT_TAGVAR(hardcode_libdir_separator, $1)= + _LT_TAGVAR(hardcode_minus_L, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported + _LT_TAGVAR(inherit_rpath, $1)=no + _LT_TAGVAR(link_all_deplibs, $1)=unknown + _LT_TAGVAR(module_cmds, $1)= + _LT_TAGVAR(module_expsym_cmds, $1)= + _LT_TAGVAR(old_archive_from_new_cmds, $1)= + _LT_TAGVAR(old_archive_from_expsyms_cmds, $1)= + _LT_TAGVAR(thread_safe_flag_spec, $1)= + _LT_TAGVAR(whole_archive_flag_spec, $1)= + # include_expsyms should be a list of space-separated symbols to be *always* + # included in the symbol list + _LT_TAGVAR(include_expsyms, $1)= + # exclude_expsyms can be an extended regexp of symbols to exclude + # it will be wrapped by ' (' and ')$', so one must not match beginning or + # end of line. Example: 'a|bc|.*d.*' will exclude the symbols 'a' and 'bc', + # as well as any symbol that contains 'd'. + _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] + # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out + # platforms (ab)use it in PIC code, but their linkers get confused if + # the symbol is explicitly referenced. Since portable code cannot + # rely on this symbol name, it's probably fine to never include it in + # preloaded symbol tables. + # Exclude shared library initialization/finalization symbols. +dnl Note also adjust exclude_expsyms for C++ above. + extract_expsyms_cmds= + + case $host_os in + cygwin* | mingw* | pw32* | cegcc*) + # FIXME: the MSVC++ port hasn't been tested in a loooong time + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + if test yes != "$GCC"; then + with_gnu_ld=no + fi + ;; + interix*) + # we just hope/assume this is gcc and not c89 (= MSVC++) + with_gnu_ld=yes + ;; + openbsd* | bitrig*) + with_gnu_ld=no + ;; + esac + + _LT_TAGVAR(ld_shlibs, $1)=yes + + # On some targets, GNU ld is compatible enough with the native linker + # that we're better off using the native interface for both. + lt_use_gnu_ld_interface=no + if test yes = "$with_gnu_ld"; then + case $host_os in + aix*) + # The AIX port of GNU ld has always aspired to compatibility + # with the native linker. However, as the warning in the GNU ld + # block says, versions before 2.19.5* couldn't really create working + # shared libraries, regardless of the interface used. + case `$LD -v 2>&1` in + *\ \(GNU\ Binutils\)\ 2.19.5*) ;; + *\ \(GNU\ Binutils\)\ 2.[[2-9]]*) ;; + *\ \(GNU\ Binutils\)\ [[3-9]]*) ;; + *) + lt_use_gnu_ld_interface=yes + ;; + esac + ;; + *) + lt_use_gnu_ld_interface=yes + ;; + esac + fi + + if test yes = "$lt_use_gnu_ld_interface"; then + # If archive_cmds runs LD, not CC, wlarc should be empty + wlarc='$wl' + + # Set some defaults for GNU ld with shared library support. These + # are reset later if shared libraries are not supported. Putting them + # here allows them to be overridden if necessary. + runpath_var=LD_RUN_PATH + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' + # ancient GNU ld didn't support --whole-archive et. al. + if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then + _LT_TAGVAR(whole_archive_flag_spec, $1)=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' + else + _LT_TAGVAR(whole_archive_flag_spec, $1)= + fi + supports_anon_versioning=no + case `$LD -v | $SED -e 's/([^)]\+)\s\+//' 2>&1` in + *GNU\ gold*) supports_anon_versioning=yes ;; + *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11 + *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... + *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... + *\ 2.11.*) ;; # other 2.11 versions + *) supports_anon_versioning=yes ;; + esac + + # See if GNU ld supports shared libraries. + case $host_os in + aix[[3-9]]*) + # On AIX/PPC, the GNU linker is very broken + if test ia64 != "$host_cpu"; then + _LT_TAGVAR(ld_shlibs, $1)=no + cat <<_LT_EOF 1>&2 + +*** Warning: the GNU linker, at least up to release 2.19, is reported +*** to be unable to reliably create shared libraries on AIX. +*** Therefore, libtool is disabling shared libraries support. If you +*** really care for shared libraries, you may want to install binutils +*** 2.20 or above, or modify your PATH so that a non-GNU linker is found. +*** You will then need to restart the configuration process. + +_LT_EOF + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='' + ;; + m68k) + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_minus_L, $1)=yes + ;; + esac + ;; + + beos*) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, + # as there is no search path for DLLs. + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-all-symbols' + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(always_export_symbols, $1)=no + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' + _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] + + if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file, use it as + # is; otherwise, prepend EXPORTS... + _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + haiku*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(link_all_deplibs, $1)=yes + ;; + + os2*) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + shrext_cmds=.dll + _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + _LT_TAGVAR(archive_expsym_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + prefix_cmds="$SED"~ + if test EXPORTS = "`$SED 1q $export_symbols`"; then + prefix_cmds="$prefix_cmds -e 1d"; + fi~ + prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ + cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + _LT_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + ;; + + interix[[3-9]]*) + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + + gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) + tmp_diet=no + if test linux-dietlibc = "$host_os"; then + case $cc_basename in + diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) + esac + fi + if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ + && test no = "$tmp_diet" + then + tmp_addflag=' $pic_flag' + tmp_sharedflag='-shared' + case $cc_basename,$host_cpu in + pgcc*) # Portland Group C compiler + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' + tmp_addflag=' $pic_flag' + ;; + pgf77* | pgf90* | pgf95* | pgfortran*) + # Portland Group f77 and f90 compilers + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' + tmp_addflag=' $pic_flag -Mnomain' ;; + ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 + tmp_addflag=' -i_dynamic' ;; + efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 + tmp_addflag=' -i_dynamic -nofor_main' ;; + ifc* | ifort*) # Intel Fortran compiler + tmp_addflag=' -nofor_main' ;; + lf95*) # Lahey Fortran 8.1 + _LT_TAGVAR(whole_archive_flag_spec, $1)= + tmp_sharedflag='--shared' ;; + nagfor*) # NAGFOR 5.3 + tmp_sharedflag='-Wl,-shared' ;; + xl[[cC]]* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL C 8.0 on PPC (deal with xlf below) + tmp_sharedflag='-qmkshrobj' + tmp_addflag= ;; + nvcc*) # Cuda Compiler Driver 2.2 + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' + _LT_TAGVAR(compiler_needs_object, $1)=yes + ;; + esac + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) # Sun C 5.9 + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' + _LT_TAGVAR(compiler_needs_object, $1)=yes + tmp_sharedflag='-G' ;; + *Sun\ F*) # Sun Fortran 8.3 + tmp_sharedflag='-G' ;; + esac + _LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + + if test yes = "$supports_anon_versioning"; then + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib' + fi + + case $cc_basename in + tcc*) + _LT_TAGVAR(export_dynamic_flag_spec, $1)='-rdynamic' + ;; + xlf* | bgf* | bgxlf* | mpixlf*) + # IBM XL Fortran 10.1 on PPC cannot create shared libs itself + _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' + if test yes = "$supports_anon_versioning"; then + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' + fi + ;; + esac + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' + wlarc= + else + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + fi + ;; + + solaris*) + if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then + _LT_TAGVAR(ld_shlibs, $1)=no + cat <<_LT_EOF 1>&2 + +*** Warning: The releases 2.8.* of the GNU linker cannot reliably +*** create shared libraries on Solaris systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.9.1 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) + case `$LD -v 2>&1` in + *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*) + _LT_TAGVAR(ld_shlibs, $1)=no + cat <<_LT_EOF 1>&2 + +*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 cannot +*** reliably create shared libraries on SCO systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.16.91.0.3 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + ;; + *) + # For security reasons, it is highly recommended that you always + # use absolute paths for naming shared libraries, and exclude the + # DT_RUNPATH tag from executables and libraries. But doing so + # requires that you compile everything twice, which is a pain. + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + + sunos4*) + _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' + wlarc= + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + *) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + + if test no = "$_LT_TAGVAR(ld_shlibs, $1)"; then + runpath_var= + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= + _LT_TAGVAR(export_dynamic_flag_spec, $1)= + _LT_TAGVAR(whole_archive_flag_spec, $1)= + fi + else + # PORTME fill in a description of your system's linker (not GNU ld) + case $host_os in + aix3*) + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(always_export_symbols, $1)=yes + _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' + # Note: this linker hardcodes the directories in LIBPATH if there + # are no directories specified by -L. + _LT_TAGVAR(hardcode_minus_L, $1)=yes + if test yes = "$GCC" && test -z "$lt_prog_compiler_static"; then + # Neither direct hardcoding nor static linking is supported with a + # broken collect2. + _LT_TAGVAR(hardcode_direct, $1)=unsupported + fi + ;; + + aix[[4-9]]*) + if test ia64 = "$host_cpu"; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag= + else + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to GNU nm, but means don't demangle to AIX nm. + # Without the "-l" option, or with the "-B" option, AIX nm treats + # weak defined symbols like other global defined symbols, whereas + # GNU nm marks them as "W". + # While the 'weak' keyword is ignored in the Export File, we need + # it in the Import File for the 'aix-soname' feature, so we have + # to replace the "-B" option with "-P" for AIX nm. + if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then + _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols' + else + _LT_TAGVAR(export_symbols_cmds, $1)='`func_echo_all $NM | $SED -e '\''s/B\([[^B]]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && ([substr](\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols' + fi + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # have runtime linking enabled, and use it for executables. + # For shared libraries, we enable/disable runtime linking + # depending on the kind of the shared library created - + # when "with_aix_soname,aix_use_runtimelinking" is: + # "aix,no" lib.a(lib.so.V) shared, rtl:no, for executables + # "aix,yes" lib.so shared, rtl:yes, for executables + # lib.a static archive + # "both,no" lib.so.V(shr.o) shared, rtl:yes + # lib.a(lib.so.V) shared, rtl:no, for executables + # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables + # lib.a(lib.so.V) shared, rtl:no + # "svr4,*" lib.so.V(shr.o) shared, rtl:yes, for executables + # lib.a static archive + case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) + for ld_flag in $LDFLAGS; do + if (test x-brtl = "x$ld_flag" || test x-Wl,-brtl = "x$ld_flag"); then + aix_use_runtimelinking=yes + break + fi + done + if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then + # With aix-soname=svr4, we create the lib.so.V shared archives only, + # so we don't have lib.a shared libs to link our executables. + # We have to force runtime linking in this case. + aix_use_runtimelinking=yes + LDFLAGS="$LDFLAGS -Wl,-brtl" + fi + ;; + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + _LT_TAGVAR(archive_cmds, $1)='' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(file_list_spec, $1)='$wl-f,' + case $with_aix_soname,$aix_use_runtimelinking in + aix,*) ;; # traditional, no import file + svr4,* | *,yes) # use import file + # The Import File defines what to hardcode. + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_direct_absolute, $1)=no + ;; + esac + + if test yes = "$GCC"; then + case $host_os in aix4.[[012]]|aix4.[[012]].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`$CC -print-prog-name=collect2` + if test -f "$collect2name" && + strings "$collect2name" | $GREP resolve_lib_name >/dev/null + then + # We have reworked collect2 + : + else + # We have old collect2 + _LT_TAGVAR(hardcode_direct, $1)=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)= + fi + ;; + esac + shared_flag='-shared' + if test yes = "$aix_use_runtimelinking"; then + shared_flag="$shared_flag "'$wl-G' + fi + # Need to ensure runtime linking is disabled for the traditional + # shared library, or the linker may eventually find shared libraries + # /with/ Import File - we do not want to mix them. + shared_flag_aix='-shared' + shared_flag_svr4='-shared $wl-G' + else + # not using gcc + if test ia64 = "$host_cpu"; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test yes = "$aix_use_runtimelinking"; then + shared_flag='$wl-G' + else + shared_flag='$wl-bM:SRE' + fi + shared_flag_aix='$wl-bM:SRE' + shared_flag_svr4='$wl-G' + fi + fi + + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-bexpall' + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to export. + _LT_TAGVAR(always_export_symbols, $1)=yes + if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + _LT_TAGVAR(allow_undefined_flag, $1)='-berok' + # Determine the default libpath from the value encoded in an + # empty executable. + _LT_SYS_MODULE_PATH_AIX([$1]) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath" + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag + else + if test ia64 = "$host_cpu"; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R $libdir:/usr/lib:/lib' + _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" + _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an + # empty executable. + _LT_SYS_MODULE_PATH_AIX([$1]) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + _LT_TAGVAR(no_undefined_flag, $1)=' $wl-bernotok' + _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-berok' + if test yes = "$with_gnu_ld"; then + # We only use this code for GNU lds that support --whole-archive. + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive$convenience $wl--no-whole-archive' + else + # Exported symbols can be pulled into shared objects from archives + _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' + fi + _LT_TAGVAR(archive_cmds_need_lc, $1)=yes + _LT_TAGVAR(archive_expsym_cmds, $1)='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d' + # -brtl affects multiple linker settings, -berok does not and is overridden later + compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([[, ]]\\)%-berok\\1%g"`' + if test svr4 != "$with_aix_soname"; then + # This is similar to how AIX traditionally builds its shared libraries. + _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname' + fi + if test aix != "$with_aix_soname"; then + _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp' + else + # used by -dlpreopen to get the symbols + _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$MV $output_objdir/$realname.d/$soname $output_objdir' + fi + _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$RM -r $output_objdir/$realname.d' + fi + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='' + ;; + m68k) + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_minus_L, $1)=yes + ;; + esac + ;; + + bsdi[[45]]*) + _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + case $cc_basename in + cl*) + # Native MSVC + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(always_export_symbols, $1)=yes + _LT_TAGVAR(file_list_spec, $1)='@' + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=.dll + # FIXME: Setting linknames here is a bad hack. + _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames=' + _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then + cp "$export_symbols" "$output_objdir/$soname.def"; + echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp"; + else + $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp; + fi~ + $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ + linknames=' + # The linker will not automatically build a static lib if we build a DLL. + # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1,DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols' + # Don't use ranlib + _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' + _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ + lt_tool_outputfile="@TOOL_OUTPUT@"~ + case $lt_outputfile in + *.exe|*.EXE) ;; + *) + lt_outputfile=$lt_outputfile.exe + lt_tool_outputfile=$lt_tool_outputfile.exe + ;; + esac~ + if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then + $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; + $RM "$lt_outputfile.manifest"; + fi' + ;; + *) + # Assume MSVC wrapper + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=.dll + # FIXME: Setting linknames here is a bad hack. + _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' + # The linker will automatically build a .lib file if we build a DLL. + _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' + # FIXME: Should let the user specify the lib program. + _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs' + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + ;; + esac + ;; + + darwin* | rhapsody*) + _LT_DARWIN_LINKER_FEATURES($1) + ;; + + dgux*) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor + # support. Future versions do this automatically, but an explicit c++rt0.o + # does not break anything, and helps significantly (at the cost of a little + # extra space). + freebsd2.2*) + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + # Unfortunately, older versions of FreeBSD 2 do not have this feature. + freebsd2.*) + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + # FreeBSD 3 and greater uses gcc -shared to do shared libraries. + freebsd* | dragonfly*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + hpux9*) + if test yes = "$GCC"; then + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' + else + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' + fi + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(hardcode_direct, $1)=yes + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' + ;; + + hpux10*) + if test yes,no = "$GCC,$with_gnu_ld"; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' + fi + if test no = "$with_gnu_ld"; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + _LT_TAGVAR(hardcode_minus_L, $1)=yes + fi + ;; + + hpux11*) + if test yes,no = "$GCC,$with_gnu_ld"; then + case $host_cpu in + hppa*64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + else + case $host_cpu in + hppa*64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + m4_if($1, [], [ + # Older versions of the 11.00 compiler do not understand -b yet + # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) + _LT_LINKER_OPTION([if $CC understands -b], + _LT_TAGVAR(lt_cv_prog_compiler__b, $1), [-b], + [_LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags'], + [_LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'])], + [_LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags']) + ;; + esac + fi + if test no = "$with_gnu_ld"; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + case $host_cpu in + hppa*64*|ia64*) + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + *) + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + _LT_TAGVAR(hardcode_minus_L, $1)=yes + ;; + esac + fi + ;; + + irix5* | irix6* | nonstopux*) + if test yes = "$GCC"; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' + # Try to use the -exported_symbol ld option, if it does not + # work, assume that -exports_file does not work either and + # implicitly export all symbols. + # This should be the same for all languages, so no per-tag cache variable. + AC_CACHE_CHECK([whether the $host_os linker accepts -exported_symbol], + [lt_cv_irix_exported_symbol], + [save_LDFLAGS=$LDFLAGS + LDFLAGS="$LDFLAGS -shared $wl-exported_symbol ${wl}foo $wl-update_registry $wl/dev/null" + AC_LINK_IFELSE( + [AC_LANG_SOURCE( + [AC_LANG_CASE([C], [[int foo (void) { return 0; }]], + [C++], [[int foo (void) { return 0; }]], + [Fortran 77], [[ + subroutine foo + end]], + [Fortran], [[ + subroutine foo + end]])])], + [lt_cv_irix_exported_symbol=yes], + [lt_cv_irix_exported_symbol=no]) + LDFLAGS=$save_LDFLAGS]) + if test yes = "$lt_cv_irix_exported_symbol"; then + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations $wl-exports_file $wl$export_symbols -o $lib' + fi + else + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -exports_file $export_symbols -o $lib' + fi + _LT_TAGVAR(archive_cmds_need_lc, $1)='no' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(inherit_rpath, $1)=yes + _LT_TAGVAR(link_all_deplibs, $1)=yes + ;; + + linux*) + case $cc_basename in + tcc*) + # Fabrice Bellard et al's Tiny C Compiler + _LT_TAGVAR(ld_shlibs, $1)=yes + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out + else + _LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF + fi + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + newsos6) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + *nto* | *qnx*) + ;; + + openbsd* | bitrig*) + if test -f /usr/libexec/ld.so; then + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags $wl-retain-symbols-file,$export_symbols' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' + else + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' + fi + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + os2*) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + shrext_cmds=.dll + _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + _LT_TAGVAR(archive_expsym_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + prefix_cmds="$SED"~ + if test EXPORTS = "`$SED 1q $export_symbols`"; then + prefix_cmds="$prefix_cmds -e 1d"; + fi~ + prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ + cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + _LT_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + ;; + + osf3*) + if test yes = "$GCC"; then + _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' + else + _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' + fi + _LT_TAGVAR(archive_cmds_need_lc, $1)='no' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + ;; + + osf4* | osf5*) # as osf3* with the addition of -msym flag + if test yes = "$GCC"; then + _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $pic_flag $libobjs $deplibs $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + else + _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ + $CC -shared$allow_undefined_flag $wl-input $wl$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~$RM $lib.exp' + + # Both c and cxx compiler support -rpath directly + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' + fi + _LT_TAGVAR(archive_cmds_need_lc, $1)='no' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + ;; + + solaris*) + _LT_TAGVAR(no_undefined_flag, $1)=' -z defs' + if test yes = "$GCC"; then + wlarc='$wl' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl-z ${wl}text $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -shared $pic_flag $wl-z ${wl}text $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + else + case `$CC -V 2>&1` in + *"Compilers 5.0"*) + wlarc='' + _LT_TAGVAR(archive_cmds, $1)='$LD -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $LD -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' + ;; + *) + wlarc='$wl' + _LT_TAGVAR(archive_cmds, $1)='$CC -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + ;; + esac + fi + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + case $host_os in + solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; + *) + # The compiler driver will combine and reorder linker options, + # but understands '-z linker_flag'. GCC discards it without '$wl', + # but is careful enough not to reorder. + # Supported since Solaris 2.6 (maybe 2.5.1?) + if test yes = "$GCC"; then + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract' + else + _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' + fi + ;; + esac + _LT_TAGVAR(link_all_deplibs, $1)=yes + ;; + + sunos4*) + if test sequent = "$host_vendor"; then + # Use $CC to link under sequent, because it throws in some extra .o + # files that make .init and .fini sections work. + _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h $soname -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' + fi + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + sysv4) + case $host_vendor in + sni) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true??? + ;; + siemens) + ## LD is ld it makes a PLAMLIB + ## CC just makes a GrossModule. + _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs' + _LT_TAGVAR(hardcode_direct, $1)=no + ;; + motorola) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie + ;; + esac + runpath_var='LD_RUN_PATH' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + sysv4.3*) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + _LT_TAGVAR(ld_shlibs, $1)=yes + fi + ;; + + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) + _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text' + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + runpath_var='LD_RUN_PATH' + + if test yes = "$GCC"; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + sysv5* | sco3.2v5* | sco5v6*) + # Note: We CANNOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text' + _LT_TAGVAR(allow_undefined_flag, $1)='$wl-z,nodefs' + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R,$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-Bexport' + runpath_var='LD_RUN_PATH' + + if test yes = "$GCC"; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + uts4*) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + *) + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + + if test sni = "$host_vendor"; then + case $host in + sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-Blargedynsym' + ;; + esac + fi + fi +]) +AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) +test no = "$_LT_TAGVAR(ld_shlibs, $1)" && can_build_shared=no + +_LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld + +_LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl +_LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl +_LT_DECL([], [extract_expsyms_cmds], [2], + [The commands to extract the exported symbol list from a shared archive]) + +# +# Do we need to explicitly link libc? +# +case "x$_LT_TAGVAR(archive_cmds_need_lc, $1)" in +x|xyes) + # Assume -lc should be added + _LT_TAGVAR(archive_cmds_need_lc, $1)=yes + + if test yes,yes = "$GCC,$enable_shared"; then + case $_LT_TAGVAR(archive_cmds, $1) in + *'~'*) + # FIXME: we may have to deal with multi-command sequences. + ;; + '$CC '*) + # Test whether the compiler implicitly links with -lc since on some + # systems, -lgcc has to come before -lc. If gcc already passes -lc + # to ld, don't add -lc before -lgcc. + AC_CACHE_CHECK([whether -lc should be explicitly linked in], + [lt_cv_]_LT_TAGVAR(archive_cmds_need_lc, $1), + [$RM conftest* + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + if AC_TRY_EVAL(ac_compile) 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) + pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1) + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1) + _LT_TAGVAR(allow_undefined_flag, $1)= + if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) + then + lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=no + else + lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=yes + fi + _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $RM conftest* + ]) + _LT_TAGVAR(archive_cmds_need_lc, $1)=$lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1) + ;; + esac + fi + ;; +esac + +_LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0], + [Whether or not to add -lc for building shared libraries]) +_LT_TAGDECL([allow_libtool_libs_with_static_runtimes], + [enable_shared_with_static_runtimes], [0], + [Whether or not to disallow shared libs when runtime libs are static]) +_LT_TAGDECL([], [export_dynamic_flag_spec], [1], + [Compiler flag to allow reflexive dlopens]) +_LT_TAGDECL([], [whole_archive_flag_spec], [1], + [Compiler flag to generate shared objects directly from archives]) +_LT_TAGDECL([], [compiler_needs_object], [1], + [Whether the compiler copes with passing no objects directly]) +_LT_TAGDECL([], [old_archive_from_new_cmds], [2], + [Create an old-style archive from a shared archive]) +_LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2], + [Create a temporary old-style archive to link instead of a shared archive]) +_LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive]) +_LT_TAGDECL([], [archive_expsym_cmds], [2]) +_LT_TAGDECL([], [module_cmds], [2], + [Commands used to build a loadable module if different from building + a shared archive.]) +_LT_TAGDECL([], [module_expsym_cmds], [2]) +_LT_TAGDECL([], [with_gnu_ld], [1], + [Whether we are building with GNU ld or not]) +_LT_TAGDECL([], [allow_undefined_flag], [1], + [Flag that allows shared libraries with undefined symbols to be built]) +_LT_TAGDECL([], [no_undefined_flag], [1], + [Flag that enforces no undefined symbols]) +_LT_TAGDECL([], [hardcode_libdir_flag_spec], [1], + [Flag to hardcode $libdir into a binary during linking. + This must work even if $libdir does not exist]) +_LT_TAGDECL([], [hardcode_libdir_separator], [1], + [Whether we need a single "-rpath" flag with a separated argument]) +_LT_TAGDECL([], [hardcode_direct], [0], + [Set to "yes" if using DIR/libNAME$shared_ext during linking hardcodes + DIR into the resulting binary]) +_LT_TAGDECL([], [hardcode_direct_absolute], [0], + [Set to "yes" if using DIR/libNAME$shared_ext during linking hardcodes + DIR into the resulting binary and the resulting library dependency is + "absolute", i.e impossible to change by setting $shlibpath_var if the + library is relocated]) +_LT_TAGDECL([], [hardcode_minus_L], [0], + [Set to "yes" if using the -LDIR flag during linking hardcodes DIR + into the resulting binary]) +_LT_TAGDECL([], [hardcode_shlibpath_var], [0], + [Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR + into the resulting binary]) +_LT_TAGDECL([], [hardcode_automatic], [0], + [Set to "yes" if building a shared library automatically hardcodes DIR + into the library and all subsequent libraries and executables linked + against it]) +_LT_TAGDECL([], [inherit_rpath], [0], + [Set to yes if linker adds runtime paths of dependent libraries + to runtime path list]) +_LT_TAGDECL([], [link_all_deplibs], [0], + [Whether libtool must link a program against all its dependency libraries]) +_LT_TAGDECL([], [always_export_symbols], [0], + [Set to "yes" if exported symbols are required]) +_LT_TAGDECL([], [export_symbols_cmds], [2], + [The commands to list exported symbols]) +_LT_TAGDECL([], [exclude_expsyms], [1], + [Symbols that should not be listed in the preloaded symbols]) +_LT_TAGDECL([], [include_expsyms], [1], + [Symbols that must always be exported]) +_LT_TAGDECL([], [prelink_cmds], [2], + [Commands necessary for linking programs (against libraries) with templates]) +_LT_TAGDECL([], [postlink_cmds], [2], + [Commands necessary for finishing linking programs]) +_LT_TAGDECL([], [file_list_spec], [1], + [Specify filename containing input files]) +dnl FIXME: Not yet implemented +dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1], +dnl [Compiler flag to generate thread safe objects]) +])# _LT_LINKER_SHLIBS + + +# _LT_LANG_C_CONFIG([TAG]) +# ------------------------ +# Ensure that the configuration variables for a C compiler are suitably +# defined. These variables are subsequently used by _LT_CONFIG to write +# the compiler configuration to 'libtool'. +m4_defun([_LT_LANG_C_CONFIG], +[m4_require([_LT_DECL_EGREP])dnl +lt_save_CC=$CC +AC_LANG_PUSH(C) + +# Source file extension for C test sources. +ac_ext=c + +# Object file extension for compiled C test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="int some_variable = 0;" + +# Code to be used in simple link tests +lt_simple_link_test_code='int main(){return(0);}' + +_LT_TAG_COMPILER +# Save the default compiler, since it gets overwritten when the other +# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. +compiler_DEFAULT=$CC + +# save warnings/boilerplate of simple test code +_LT_COMPILER_BOILERPLATE +_LT_LINKER_BOILERPLATE + +## CAVEAT EMPTOR: +## There is no encapsulation within the following macros, do not change +## the running order or otherwise move them around unless you know exactly +## what you are doing... +if test -n "$compiler"; then + _LT_COMPILER_NO_RTTI($1) + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_SYS_DYNAMIC_LINKER($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + LT_SYS_DLOPEN_SELF + _LT_CMD_STRIPLIB + + # Report what library types will actually be built + AC_MSG_CHECKING([if libtool supports shared libraries]) + AC_MSG_RESULT([$can_build_shared]) + + AC_MSG_CHECKING([whether to build shared libraries]) + test no = "$can_build_shared" && enable_shared=no + + # On AIX, shared libraries and static libraries use the same namespace, and + # are all built from PIC. + case $host_os in + aix3*) + test yes = "$enable_shared" && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + + aix[[4-9]]*) + if test ia64 != "$host_cpu"; then + case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in + yes,aix,yes) ;; # shared object as lib.so file only + yes,svr4,*) ;; # shared object as lib.so archive member only + yes,*) enable_static=no ;; # shared object in lib.a archive as well + esac + fi + ;; + esac + AC_MSG_RESULT([$enable_shared]) + + AC_MSG_CHECKING([whether to build static libraries]) + # Make sure either enable_shared or enable_static is yes. + test yes = "$enable_shared" || enable_static=yes + AC_MSG_RESULT([$enable_static]) + + _LT_CONFIG($1) +fi +AC_LANG_POP +CC=$lt_save_CC +])# _LT_LANG_C_CONFIG + + +# _LT_LANG_CXX_CONFIG([TAG]) +# -------------------------- +# Ensure that the configuration variables for a C++ compiler are suitably +# defined. These variables are subsequently used by _LT_CONFIG to write +# the compiler configuration to 'libtool'. +m4_defun([_LT_LANG_CXX_CONFIG], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_PATH_MANIFEST_TOOL])dnl +if test -n "$CXX" && ( test no != "$CXX" && + ( (test g++ = "$CXX" && `g++ -v >/dev/null 2>&1` ) || + (test g++ != "$CXX"))); then + AC_PROG_CXXCPP +else + _lt_caught_CXX_error=yes +fi + +AC_LANG_PUSH(C++) +_LT_TAGVAR(archive_cmds_need_lc, $1)=no +_LT_TAGVAR(allow_undefined_flag, $1)= +_LT_TAGVAR(always_export_symbols, $1)=no +_LT_TAGVAR(archive_expsym_cmds, $1)= +_LT_TAGVAR(compiler_needs_object, $1)=no +_LT_TAGVAR(export_dynamic_flag_spec, $1)= +_LT_TAGVAR(hardcode_direct, $1)=no +_LT_TAGVAR(hardcode_direct_absolute, $1)=no +_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= +_LT_TAGVAR(hardcode_libdir_separator, $1)= +_LT_TAGVAR(hardcode_minus_L, $1)=no +_LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported +_LT_TAGVAR(hardcode_automatic, $1)=no +_LT_TAGVAR(inherit_rpath, $1)=no +_LT_TAGVAR(module_cmds, $1)= +_LT_TAGVAR(module_expsym_cmds, $1)= +_LT_TAGVAR(link_all_deplibs, $1)=unknown +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_TAGVAR(reload_flag, $1)=$reload_flag +_LT_TAGVAR(reload_cmds, $1)=$reload_cmds +_LT_TAGVAR(no_undefined_flag, $1)= +_LT_TAGVAR(whole_archive_flag_spec, $1)= +_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no + +# Source file extension for C++ test sources. +ac_ext=cpp + +# Object file extension for compiled C++ test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# No sense in running all these tests if we already determined that +# the CXX compiler isn't working. Some variables (like enable_shared) +# are currently assumed to apply to all compilers on this platform, +# and will be corrupted by setting them based on a non-working compiler. +if test yes != "$_lt_caught_CXX_error"; then + # Code to be used in simple compile tests + lt_simple_compile_test_code="int some_variable = 0;" + + # Code to be used in simple link tests + lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }' + + # ltmain only uses $CC for tagged configurations so make sure $CC is set. + _LT_TAG_COMPILER + + # save warnings/boilerplate of simple test code + _LT_COMPILER_BOILERPLATE + _LT_LINKER_BOILERPLATE + + # Allow CC to be a program name with arguments. + lt_save_CC=$CC + lt_save_CFLAGS=$CFLAGS + lt_save_LD=$LD + lt_save_GCC=$GCC + GCC=$GXX + lt_save_with_gnu_ld=$with_gnu_ld + lt_save_path_LD=$lt_cv_path_LD + if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then + lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx + else + $as_unset lt_cv_prog_gnu_ld + fi + if test -n "${lt_cv_path_LDCXX+set}"; then + lt_cv_path_LD=$lt_cv_path_LDCXX + else + $as_unset lt_cv_path_LD + fi + test -z "${LDCXX+set}" || LD=$LDCXX + CC=${CXX-"c++"} + CFLAGS=$CXXFLAGS + compiler=$CC + _LT_TAGVAR(compiler, $1)=$CC + _LT_CC_BASENAME([$compiler]) + + if test -n "$compiler"; then + # We don't want -fno-exception when compiling C++ code, so set the + # no_builtin_flag separately + if test yes = "$GXX"; then + _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' + else + _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= + fi + + if test yes = "$GXX"; then + # Set up default GNU C++ configuration + + LT_PATH_LD + + # Check if GNU C++ uses GNU ld as the underlying linker, since the + # archiving commands below assume that GNU ld is being used. + if test yes = "$with_gnu_ld"; then + _LT_TAGVAR(archive_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' + + # If archive_cmds runs LD, not CC, wlarc should be empty + # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to + # investigate it a little bit more. (MM) + wlarc='$wl' + + # ancient GNU ld didn't support --whole-archive et. al. + if eval "`$CC -print-prog-name=ld` --help 2>&1" | + $GREP 'no-whole-archive' > /dev/null; then + _LT_TAGVAR(whole_archive_flag_spec, $1)=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' + else + _LT_TAGVAR(whole_archive_flag_spec, $1)= + fi + else + with_gnu_ld=no + wlarc= + + # A generic and very simple default shared library creation + # command for GNU C++ for the case where it uses the native + # linker, instead of GNU ld. If possible, this setting should + # overridden to take advantage of the native linker features on + # the platform it is being used on. + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' + fi + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + + else + GXX=no + with_gnu_ld=no + wlarc= + fi + + # PORTME: fill in a description of your system's C++ link characteristics + AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) + _LT_TAGVAR(ld_shlibs, $1)=yes + case $host_os in + aix3*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + aix[[4-9]]*) + if test ia64 = "$host_cpu"; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag= + else + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # have runtime linking enabled, and use it for executables. + # For shared libraries, we enable/disable runtime linking + # depending on the kind of the shared library created - + # when "with_aix_soname,aix_use_runtimelinking" is: + # "aix,no" lib.a(lib.so.V) shared, rtl:no, for executables + # "aix,yes" lib.so shared, rtl:yes, for executables + # lib.a static archive + # "both,no" lib.so.V(shr.o) shared, rtl:yes + # lib.a(lib.so.V) shared, rtl:no, for executables + # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables + # lib.a(lib.so.V) shared, rtl:no + # "svr4,*" lib.so.V(shr.o) shared, rtl:yes, for executables + # lib.a static archive + case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) + for ld_flag in $LDFLAGS; do + case $ld_flag in + *-brtl*) + aix_use_runtimelinking=yes + break + ;; + esac + done + if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then + # With aix-soname=svr4, we create the lib.so.V shared archives only, + # so we don't have lib.a shared libs to link our executables. + # We have to force runtime linking in this case. + aix_use_runtimelinking=yes + LDFLAGS="$LDFLAGS -Wl,-brtl" + fi + ;; + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + _LT_TAGVAR(archive_cmds, $1)='' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(file_list_spec, $1)='$wl-f,' + case $with_aix_soname,$aix_use_runtimelinking in + aix,*) ;; # no import file + svr4,* | *,yes) # use import file + # The Import File defines what to hardcode. + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_direct_absolute, $1)=no + ;; + esac + + if test yes = "$GXX"; then + case $host_os in aix4.[[012]]|aix4.[[012]].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`$CC -print-prog-name=collect2` + if test -f "$collect2name" && + strings "$collect2name" | $GREP resolve_lib_name >/dev/null + then + # We have reworked collect2 + : + else + # We have old collect2 + _LT_TAGVAR(hardcode_direct, $1)=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)= + fi + esac + shared_flag='-shared' + if test yes = "$aix_use_runtimelinking"; then + shared_flag=$shared_flag' $wl-G' + fi + # Need to ensure runtime linking is disabled for the traditional + # shared library, or the linker may eventually find shared libraries + # /with/ Import File - we do not want to mix them. + shared_flag_aix='-shared' + shared_flag_svr4='-shared $wl-G' + else + # not using gcc + if test ia64 = "$host_cpu"; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test yes = "$aix_use_runtimelinking"; then + shared_flag='$wl-G' + else + shared_flag='$wl-bM:SRE' + fi + shared_flag_aix='$wl-bM:SRE' + shared_flag_svr4='$wl-G' + fi + fi + + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-bexpall' + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to + # export. + _LT_TAGVAR(always_export_symbols, $1)=yes + if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + # The "-G" linker flag allows undefined symbols. + _LT_TAGVAR(no_undefined_flag, $1)='-bernotok' + # Determine the default libpath from the value encoded in an empty + # executable. + _LT_SYS_MODULE_PATH_AIX([$1]) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath" + + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag + else + if test ia64 = "$host_cpu"; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R $libdir:/usr/lib:/lib' + _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" + _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an + # empty executable. + _LT_SYS_MODULE_PATH_AIX([$1]) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + _LT_TAGVAR(no_undefined_flag, $1)=' $wl-bernotok' + _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-berok' + if test yes = "$with_gnu_ld"; then + # We only use this code for GNU lds that support --whole-archive. + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive$convenience $wl--no-whole-archive' + else + # Exported symbols can be pulled into shared objects from archives + _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' + fi + _LT_TAGVAR(archive_cmds_need_lc, $1)=yes + _LT_TAGVAR(archive_expsym_cmds, $1)='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d' + # -brtl affects multiple linker settings, -berok does not and is overridden later + compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([[, ]]\\)%-berok\\1%g"`' + if test svr4 != "$with_aix_soname"; then + # This is similar to how AIX traditionally builds its shared + # libraries. Need -bnortl late, we may have -brtl in LDFLAGS. + _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname' + fi + if test aix != "$with_aix_soname"; then + _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp' + else + # used by -dlpreopen to get the symbols + _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$MV $output_objdir/$realname.d/$soname $output_objdir' + fi + _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$RM -r $output_objdir/$realname.d' + fi + fi + ;; + + beos*) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + chorus*) + case $cc_basename in + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + cygwin* | mingw* | pw32* | cegcc*) + case $GXX,$cc_basename in + ,cl* | no,cl*) + # Native MSVC + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(always_export_symbols, $1)=yes + _LT_TAGVAR(file_list_spec, $1)='@' + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=.dll + # FIXME: Setting linknames here is a bad hack. + _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames=' + _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then + cp "$export_symbols" "$output_objdir/$soname.def"; + echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp"; + else + $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp; + fi~ + $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ + linknames=' + # The linker will not automatically build a static lib if we build a DLL. + # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + # Don't use ranlib + _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' + _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ + lt_tool_outputfile="@TOOL_OUTPUT@"~ + case $lt_outputfile in + *.exe|*.EXE) ;; + *) + lt_outputfile=$lt_outputfile.exe + lt_tool_outputfile=$lt_tool_outputfile.exe + ;; + esac~ + func_to_tool_file "$lt_outputfile"~ + if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then + $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; + $RM "$lt_outputfile.manifest"; + fi' + ;; + *) + # g++ + # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, + # as there is no search path for DLLs. + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-all-symbols' + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(always_export_symbols, $1)=no + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + + if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file, use it as + # is; otherwise, prepend EXPORTS... + _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + darwin* | rhapsody*) + _LT_DARWIN_LINKER_FEATURES($1) + ;; + + os2*) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + shrext_cmds=.dll + _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + _LT_TAGVAR(archive_expsym_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ + $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ + $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ + $ECHO EXPORTS >> $output_objdir/$libname.def~ + prefix_cmds="$SED"~ + if test EXPORTS = "`$SED 1q $export_symbols`"; then + prefix_cmds="$prefix_cmds -e 1d"; + fi~ + prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ + cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ + $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ + emximp -o $lib $output_objdir/$libname.def' + _LT_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + ;; + + dgux*) + case $cc_basename in + ec++*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + ghcx*) + # Green Hills C++ Compiler + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + freebsd2.*) + # C++ shared libraries reported to be fairly broken before + # switch to ELF + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + freebsd-elf*) + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + ;; + + freebsd* | dragonfly*) + # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF + # conventions + _LT_TAGVAR(ld_shlibs, $1)=yes + ;; + + haiku*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(link_all_deplibs, $1)=yes + ;; + + hpux9*) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, + # but as the default + # location of the library. + + case $cc_basename in + CC*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + aCC*) + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b $wl+b $wl$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + ;; + *) + if test yes = "$GXX"; then + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' + else + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + + hpux10*|hpux11*) + if test no = "$with_gnu_ld"; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + case $host_cpu in + hppa*64*|ia64*) + ;; + *) + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' + ;; + esac + fi + case $host_cpu in + hppa*64*|ia64*) + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + *) + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, + # but as the default + # location of the library. + ;; + esac + + case $cc_basename in + CC*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + aCC*) + case $host_cpu in + hppa*64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + ia64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + esac + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + ;; + *) + if test yes = "$GXX"; then + if test no = "$with_gnu_ld"; then + case $host_cpu in + hppa*64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC $wl+h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + ia64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + esac + fi + else + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + + interix[[3-9]]*) + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + irix5* | irix6*) + case $cc_basename in + CC*) + # SGI C++ + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' + + # Archives containing C++ object files must be created using + # "CC -ar", where "CC" is the IRIX C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs' + ;; + *) + if test yes = "$GXX"; then + if test no = "$with_gnu_ld"; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' + else + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` -o $lib' + fi + fi + _LT_TAGVAR(link_all_deplibs, $1)=yes + ;; + esac + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(inherit_rpath, $1)=yes + ;; + + linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) + case $cc_basename in + KCC*) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib $wl-retain-symbols-file,$export_symbols; mv \$templib $lib' + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' + + # Archives containing C++ object files must be created using + # "CC -Bstatic", where "CC" is the KAI C++ compiler. + _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' + ;; + icpc* | ecpc* ) + # Intel C++ + with_gnu_ld=yes + # version 8.0 and above of icpc choke on multiply defined symbols + # if we add $predep_objects and $postdep_objects, however 7.1 and + # earlier do not add the objects themselves. + case `$CC -V 2>&1` in + *"Version 7."*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + ;; + *) # Version 8.0 or newer + tmp_idyn= + case $host_cpu in + ia64*) tmp_idyn=' -i_dynamic';; + esac + _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + ;; + esac + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive$convenience $wl--no-whole-archive' + ;; + pgCC* | pgcpp*) + # Portland Group C++ compiler + case `$CC -V` in + *pgCC\ [[1-5]].* | *pgcpp\ [[1-5]].*) + _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ + compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"' + _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ + $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~ + $RANLIB $oldlib' + _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ + $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ + $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + ;; + *) # Version 6 and above use weak symbols + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' + ;; + esac + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl--rpath $wl$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' + ;; + cxx*) + # Compaq C++ + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib $wl-retain-symbols-file $wl$export_symbols' + + runpath_var=LD_RUN_PATH + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed' + ;; + xl* | mpixl* | bgxl*) + # IBM XL 8.0 on PPC, with GNU ld + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' + _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' + if test yes = "$supports_anon_versioning"; then + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC -qmkshrobj $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib' + fi + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' + _LT_TAGVAR(archive_cmds, $1)='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-retain-symbols-file $wl$export_symbols' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' + _LT_TAGVAR(compiler_needs_object, $1)=yes + + # Not sure whether something based on + # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 + # would be better. + output_verbose_link_cmd='func_echo_all' + + # Archives containing C++ object files must be created using + # "CC -xar", where "CC" is the Sun C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' + ;; + esac + ;; + esac + ;; + + lynxos*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + m88k*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + mvs*) + case $cc_basename in + cxx*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' + wlarc= + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + fi + # Workaround some broken pre-1.5 toolchains + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' + ;; + + *nto* | *qnx*) + _LT_TAGVAR(ld_shlibs, $1)=yes + ;; + + openbsd* | bitrig*) + if test -f /usr/libexec/ld.so; then + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`"; then + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-retain-symbols-file,$export_symbols -o $lib' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' + _LT_TAGVAR(whole_archive_flag_spec, $1)=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' + fi + output_verbose_link_cmd=func_echo_all + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + osf3* | osf4* | osf5*) + case $cc_basename in + KCC*) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + # Archives containing C++ object files must be created using + # the KAI C++ compiler. + case $host in + osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; + *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;; + esac + ;; + RCC*) + # Rational C++ 2.4.1 + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + cxx*) + case $host in + osf3*) + _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $soname `test -n "$verstring" && func_echo_all "$wl-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + ;; + *) + _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ + echo "-hidden">> $lib.exp~ + $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname $wl-input $wl$lib.exp `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~ + $RM $lib.exp' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' + ;; + esac + + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' + ;; + *) + if test yes,no = "$GXX,$with_gnu_ld"; then + _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*' + case $host in + osf3*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' + ;; + esac + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + + else + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + + psos*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + sunos4*) + case $cc_basename in + CC*) + # Sun C++ 4.x + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + lcc*) + # Lucid + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + solaris*) + case $cc_basename in + CC* | sunCC*) + # Sun C++ 4.2, 5.x and Centerline C++ + _LT_TAGVAR(archive_cmds_need_lc,$1)=yes + _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' + _LT_TAGVAR(archive_cmds, $1)='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G$allow_undefined_flag $wl-M $wl$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + case $host_os in + solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; + *) + # The compiler driver will combine and reorder linker options, + # but understands '-z linker_flag'. + # Supported since Solaris 2.6 (maybe 2.5.1?) + _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' + ;; + esac + _LT_TAGVAR(link_all_deplibs, $1)=yes + + output_verbose_link_cmd='func_echo_all' + + # Archives containing C++ object files must be created using + # "CC -xar", where "CC" is the Sun C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' + ;; + gcx*) + # Green Hills C++ Compiler + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib' + + # The C++ compiler must be used to create the archive. + _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs' + ;; + *) + # GNU C++ compiler with Solaris linker + if test yes,no = "$GXX,$with_gnu_ld"; then + _LT_TAGVAR(no_undefined_flag, $1)=' $wl-z ${wl}defs' + if $CC --version | $GREP -v '^2\.7' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -shared $pic_flag -nostdlib $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + else + # g++ 2.7 appears to require '-G' NOT '-shared' on this + # platform. + _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G -nostdlib $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' + fi + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R $wl$libdir' + case $host_os in + solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; + *) + _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract' + ;; + esac + fi + ;; + esac + ;; + + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) + _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text' + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + runpath_var='LD_RUN_PATH' + + case $cc_basename in + CC*) + _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + ;; + + sysv5* | sco3.2v5* | sco5v6*) + # Note: We CANNOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text' + _LT_TAGVAR(allow_undefined_flag, $1)='$wl-z,nodefs' + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R,$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-Bexport' + runpath_var='LD_RUN_PATH' + + case $cc_basename in + CC*) + _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(old_archive_cmds, $1)='$CC -Tprelink_objects $oldobjs~ + '"$_LT_TAGVAR(old_archive_cmds, $1)" + _LT_TAGVAR(reload_cmds, $1)='$CC -Tprelink_objects $reload_objs~ + '"$_LT_TAGVAR(reload_cmds, $1)" + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + ;; + + tandem*) + case $cc_basename in + NCC*) + # NonStop-UX NCC 3.20 + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + vxworks*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + + AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) + test no = "$_LT_TAGVAR(ld_shlibs, $1)" && can_build_shared=no + + _LT_TAGVAR(GCC, $1)=$GXX + _LT_TAGVAR(LD, $1)=$LD + + ## CAVEAT EMPTOR: + ## There is no encapsulation within the following macros, do not change + ## the running order or otherwise move them around unless you know exactly + ## what you are doing... + _LT_SYS_HIDDEN_LIBDEPS($1) + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_SYS_DYNAMIC_LINKER($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + + _LT_CONFIG($1) + fi # test -n "$compiler" + + CC=$lt_save_CC + CFLAGS=$lt_save_CFLAGS + LDCXX=$LD + LD=$lt_save_LD + GCC=$lt_save_GCC + with_gnu_ld=$lt_save_with_gnu_ld + lt_cv_path_LDCXX=$lt_cv_path_LD + lt_cv_path_LD=$lt_save_path_LD + lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld + lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld +fi # test yes != "$_lt_caught_CXX_error" + +AC_LANG_POP +])# _LT_LANG_CXX_CONFIG + + +# _LT_FUNC_STRIPNAME_CNF +# ---------------------- +# func_stripname_cnf prefix suffix name +# strip PREFIX and SUFFIX off of NAME. +# PREFIX and SUFFIX must not contain globbing or regex special +# characters, hashes, percent signs, but SUFFIX may contain a leading +# dot (in which case that matches only a dot). +# +# This function is identical to the (non-XSI) version of func_stripname, +# except this one can be used by m4 code that may be executed by configure, +# rather than the libtool script. +m4_defun([_LT_FUNC_STRIPNAME_CNF],[dnl +AC_REQUIRE([_LT_DECL_SED]) +AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH]) +func_stripname_cnf () +{ + case @S|@2 in + .*) func_stripname_result=`$ECHO "@S|@3" | $SED "s%^@S|@1%%; s%\\\\@S|@2\$%%"`;; + *) func_stripname_result=`$ECHO "@S|@3" | $SED "s%^@S|@1%%; s%@S|@2\$%%"`;; + esac +} # func_stripname_cnf +])# _LT_FUNC_STRIPNAME_CNF + + +# _LT_SYS_HIDDEN_LIBDEPS([TAGNAME]) +# --------------------------------- +# Figure out "hidden" library dependencies from verbose +# compiler output when linking a shared library. +# Parse the compiler output and extract the necessary +# objects, libraries and library flags. +m4_defun([_LT_SYS_HIDDEN_LIBDEPS], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +AC_REQUIRE([_LT_FUNC_STRIPNAME_CNF])dnl +# Dependencies to place before and after the object being linked: +_LT_TAGVAR(predep_objects, $1)= +_LT_TAGVAR(postdep_objects, $1)= +_LT_TAGVAR(predeps, $1)= +_LT_TAGVAR(postdeps, $1)= +_LT_TAGVAR(compiler_lib_search_path, $1)= + +dnl we can't use the lt_simple_compile_test_code here, +dnl because it contains code intended for an executable, +dnl not a library. It's possible we should let each +dnl tag define a new lt_????_link_test_code variable, +dnl but it's only used here... +m4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF +int a; +void foo (void) { a = 0; } +_LT_EOF +], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF +class Foo +{ +public: + Foo (void) { a = 0; } +private: + int a; +}; +_LT_EOF +], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF + subroutine foo + implicit none + integer*4 a + a=0 + return + end +_LT_EOF +], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF + subroutine foo + implicit none + integer a + a=0 + return + end +_LT_EOF +], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF +public class foo { + private int a; + public void bar (void) { + a = 0; + } +}; +_LT_EOF +], [$1], [GO], [cat > conftest.$ac_ext <<_LT_EOF +package foo +func foo() { +} +_LT_EOF +]) + +_lt_libdeps_save_CFLAGS=$CFLAGS +case "$CC $CFLAGS " in #( +*\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;; +*\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;; +*\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;; +esac + +dnl Parse the compiler output and extract the necessary +dnl objects, libraries and library flags. +if AC_TRY_EVAL(ac_compile); then + # Parse the compiler output and extract the necessary + # objects, libraries and library flags. + + # Sentinel used to keep track of whether or not we are before + # the conftest object file. + pre_test_object_deps_done=no + + for p in `eval "$output_verbose_link_cmd"`; do + case $prev$p in + + -L* | -R* | -l*) + # Some compilers place space between "-{L,R}" and the path. + # Remove the space. + if test x-L = "$p" || + test x-R = "$p"; then + prev=$p + continue + fi + + # Expand the sysroot to ease extracting the directories later. + if test -z "$prev"; then + case $p in + -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;; + -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;; + -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;; + esac + fi + case $p in + =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;; + esac + if test no = "$pre_test_object_deps_done"; then + case $prev in + -L | -R) + # Internal compiler library paths should come after those + # provided the user. The postdeps already come after the + # user supplied libs so there is no need to process them. + if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then + _LT_TAGVAR(compiler_lib_search_path, $1)=$prev$p + else + _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} $prev$p" + fi + ;; + # The "-l" case would never come before the object being + # linked, so don't bother handling this case. + esac + else + if test -z "$_LT_TAGVAR(postdeps, $1)"; then + _LT_TAGVAR(postdeps, $1)=$prev$p + else + _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} $prev$p" + fi + fi + prev= + ;; + + *.lto.$objext) ;; # Ignore GCC LTO objects + *.$objext) + # This assumes that the test object file only shows up + # once in the compiler output. + if test "$p" = "conftest.$objext"; then + pre_test_object_deps_done=yes + continue + fi + + if test no = "$pre_test_object_deps_done"; then + if test -z "$_LT_TAGVAR(predep_objects, $1)"; then + _LT_TAGVAR(predep_objects, $1)=$p + else + _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p" + fi + else + if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then + _LT_TAGVAR(postdep_objects, $1)=$p + else + _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p" + fi + fi + ;; + + *) ;; # Ignore the rest. + + esac + done + + # Clean up. + rm -f a.out a.exe +else + echo "libtool.m4: error: problem compiling $1 test program" +fi + +$RM -f confest.$objext +CFLAGS=$_lt_libdeps_save_CFLAGS + +# PORTME: override above test on systems where it is broken +m4_if([$1], [CXX], +[case $host_os in +interix[[3-9]]*) + # Interix 3.5 installs completely hosed .la files for C++, so rather than + # hack all around it, let's just trust "g++" to DTRT. + _LT_TAGVAR(predep_objects,$1)= + _LT_TAGVAR(postdep_objects,$1)= + _LT_TAGVAR(postdeps,$1)= + ;; +esac +]) + +case " $_LT_TAGVAR(postdeps, $1) " in +*" -lc "*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; +esac + _LT_TAGVAR(compiler_lib_search_dirs, $1)= +if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then + _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | $SED -e 's! -L! !g' -e 's!^ !!'` +fi +_LT_TAGDECL([], [compiler_lib_search_dirs], [1], + [The directories searched by this compiler when creating a shared library]) +_LT_TAGDECL([], [predep_objects], [1], + [Dependencies to place before and after the objects being linked to + create a shared library]) +_LT_TAGDECL([], [postdep_objects], [1]) +_LT_TAGDECL([], [predeps], [1]) +_LT_TAGDECL([], [postdeps], [1]) +_LT_TAGDECL([], [compiler_lib_search_path], [1], + [The library search path used internally by the compiler when linking + a shared library]) +])# _LT_SYS_HIDDEN_LIBDEPS + + +# _LT_LANG_F77_CONFIG([TAG]) +# -------------------------- +# Ensure that the configuration variables for a Fortran 77 compiler are +# suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to 'libtool'. +m4_defun([_LT_LANG_F77_CONFIG], +[AC_LANG_PUSH(Fortran 77) +if test -z "$F77" || test no = "$F77"; then + _lt_disable_F77=yes +fi + +_LT_TAGVAR(archive_cmds_need_lc, $1)=no +_LT_TAGVAR(allow_undefined_flag, $1)= +_LT_TAGVAR(always_export_symbols, $1)=no +_LT_TAGVAR(archive_expsym_cmds, $1)= +_LT_TAGVAR(export_dynamic_flag_spec, $1)= +_LT_TAGVAR(hardcode_direct, $1)=no +_LT_TAGVAR(hardcode_direct_absolute, $1)=no +_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= +_LT_TAGVAR(hardcode_libdir_separator, $1)= +_LT_TAGVAR(hardcode_minus_L, $1)=no +_LT_TAGVAR(hardcode_automatic, $1)=no +_LT_TAGVAR(inherit_rpath, $1)=no +_LT_TAGVAR(module_cmds, $1)= +_LT_TAGVAR(module_expsym_cmds, $1)= +_LT_TAGVAR(link_all_deplibs, $1)=unknown +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_TAGVAR(reload_flag, $1)=$reload_flag +_LT_TAGVAR(reload_cmds, $1)=$reload_cmds +_LT_TAGVAR(no_undefined_flag, $1)= +_LT_TAGVAR(whole_archive_flag_spec, $1)= +_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no + +# Source file extension for f77 test sources. +ac_ext=f + +# Object file extension for compiled f77 test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# No sense in running all these tests if we already determined that +# the F77 compiler isn't working. Some variables (like enable_shared) +# are currently assumed to apply to all compilers on this platform, +# and will be corrupted by setting them based on a non-working compiler. +if test yes != "$_lt_disable_F77"; then + # Code to be used in simple compile tests + lt_simple_compile_test_code="\ + subroutine t + return + end +" + + # Code to be used in simple link tests + lt_simple_link_test_code="\ + program t + end +" + + # ltmain only uses $CC for tagged configurations so make sure $CC is set. + _LT_TAG_COMPILER + + # save warnings/boilerplate of simple test code + _LT_COMPILER_BOILERPLATE + _LT_LINKER_BOILERPLATE + + # Allow CC to be a program name with arguments. + lt_save_CC=$CC + lt_save_GCC=$GCC + lt_save_CFLAGS=$CFLAGS + CC=${F77-"f77"} + CFLAGS=$FFLAGS + compiler=$CC + _LT_TAGVAR(compiler, $1)=$CC + _LT_CC_BASENAME([$compiler]) + GCC=$G77 + if test -n "$compiler"; then + AC_MSG_CHECKING([if libtool supports shared libraries]) + AC_MSG_RESULT([$can_build_shared]) + + AC_MSG_CHECKING([whether to build shared libraries]) + test no = "$can_build_shared" && enable_shared=no + + # On AIX, shared libraries and static libraries use the same namespace, and + # are all built from PIC. + case $host_os in + aix3*) + test yes = "$enable_shared" && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + aix[[4-9]]*) + if test ia64 != "$host_cpu"; then + case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in + yes,aix,yes) ;; # shared object as lib.so file only + yes,svr4,*) ;; # shared object as lib.so archive member only + yes,*) enable_static=no ;; # shared object in lib.a archive as well + esac + fi + ;; + esac + AC_MSG_RESULT([$enable_shared]) + + AC_MSG_CHECKING([whether to build static libraries]) + # Make sure either enable_shared or enable_static is yes. + test yes = "$enable_shared" || enable_static=yes + AC_MSG_RESULT([$enable_static]) + + _LT_TAGVAR(GCC, $1)=$G77 + _LT_TAGVAR(LD, $1)=$LD + + ## CAVEAT EMPTOR: + ## There is no encapsulation within the following macros, do not change + ## the running order or otherwise move them around unless you know exactly + ## what you are doing... + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_SYS_DYNAMIC_LINKER($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + + _LT_CONFIG($1) + fi # test -n "$compiler" + + GCC=$lt_save_GCC + CC=$lt_save_CC + CFLAGS=$lt_save_CFLAGS +fi # test yes != "$_lt_disable_F77" + +AC_LANG_POP +])# _LT_LANG_F77_CONFIG + + +# _LT_LANG_FC_CONFIG([TAG]) +# ------------------------- +# Ensure that the configuration variables for a Fortran compiler are +# suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to 'libtool'. +m4_defun([_LT_LANG_FC_CONFIG], +[AC_LANG_PUSH(Fortran) + +if test -z "$FC" || test no = "$FC"; then + _lt_disable_FC=yes +fi + +_LT_TAGVAR(archive_cmds_need_lc, $1)=no +_LT_TAGVAR(allow_undefined_flag, $1)= +_LT_TAGVAR(always_export_symbols, $1)=no +_LT_TAGVAR(archive_expsym_cmds, $1)= +_LT_TAGVAR(export_dynamic_flag_spec, $1)= +_LT_TAGVAR(hardcode_direct, $1)=no +_LT_TAGVAR(hardcode_direct_absolute, $1)=no +_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= +_LT_TAGVAR(hardcode_libdir_separator, $1)= +_LT_TAGVAR(hardcode_minus_L, $1)=no +_LT_TAGVAR(hardcode_automatic, $1)=no +_LT_TAGVAR(inherit_rpath, $1)=no +_LT_TAGVAR(module_cmds, $1)= +_LT_TAGVAR(module_expsym_cmds, $1)= +_LT_TAGVAR(link_all_deplibs, $1)=unknown +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_TAGVAR(reload_flag, $1)=$reload_flag +_LT_TAGVAR(reload_cmds, $1)=$reload_cmds +_LT_TAGVAR(no_undefined_flag, $1)= +_LT_TAGVAR(whole_archive_flag_spec, $1)= +_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no + +# Source file extension for fc test sources. +ac_ext=${ac_fc_srcext-f} + +# Object file extension for compiled fc test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# No sense in running all these tests if we already determined that +# the FC compiler isn't working. Some variables (like enable_shared) +# are currently assumed to apply to all compilers on this platform, +# and will be corrupted by setting them based on a non-working compiler. +if test yes != "$_lt_disable_FC"; then + # Code to be used in simple compile tests + lt_simple_compile_test_code="\ + subroutine t + return + end +" + + # Code to be used in simple link tests + lt_simple_link_test_code="\ + program t + end +" + + # ltmain only uses $CC for tagged configurations so make sure $CC is set. + _LT_TAG_COMPILER + + # save warnings/boilerplate of simple test code + _LT_COMPILER_BOILERPLATE + _LT_LINKER_BOILERPLATE + + # Allow CC to be a program name with arguments. + lt_save_CC=$CC + lt_save_GCC=$GCC + lt_save_CFLAGS=$CFLAGS + CC=${FC-"f95"} + CFLAGS=$FCFLAGS + compiler=$CC + GCC=$ac_cv_fc_compiler_gnu + + _LT_TAGVAR(compiler, $1)=$CC + _LT_CC_BASENAME([$compiler]) + + if test -n "$compiler"; then + AC_MSG_CHECKING([if libtool supports shared libraries]) + AC_MSG_RESULT([$can_build_shared]) + + AC_MSG_CHECKING([whether to build shared libraries]) + test no = "$can_build_shared" && enable_shared=no + + # On AIX, shared libraries and static libraries use the same namespace, and + # are all built from PIC. + case $host_os in + aix3*) + test yes = "$enable_shared" && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + aix[[4-9]]*) + if test ia64 != "$host_cpu"; then + case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in + yes,aix,yes) ;; # shared object as lib.so file only + yes,svr4,*) ;; # shared object as lib.so archive member only + yes,*) enable_static=no ;; # shared object in lib.a archive as well + esac + fi + ;; + esac + AC_MSG_RESULT([$enable_shared]) + + AC_MSG_CHECKING([whether to build static libraries]) + # Make sure either enable_shared or enable_static is yes. + test yes = "$enable_shared" || enable_static=yes + AC_MSG_RESULT([$enable_static]) + + _LT_TAGVAR(GCC, $1)=$ac_cv_fc_compiler_gnu + _LT_TAGVAR(LD, $1)=$LD + + ## CAVEAT EMPTOR: + ## There is no encapsulation within the following macros, do not change + ## the running order or otherwise move them around unless you know exactly + ## what you are doing... + _LT_SYS_HIDDEN_LIBDEPS($1) + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_SYS_DYNAMIC_LINKER($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + + _LT_CONFIG($1) + fi # test -n "$compiler" + + GCC=$lt_save_GCC + CC=$lt_save_CC + CFLAGS=$lt_save_CFLAGS +fi # test yes != "$_lt_disable_FC" + +AC_LANG_POP +])# _LT_LANG_FC_CONFIG + + +# _LT_LANG_GCJ_CONFIG([TAG]) +# -------------------------- +# Ensure that the configuration variables for the GNU Java Compiler compiler +# are suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to 'libtool'. +m4_defun([_LT_LANG_GCJ_CONFIG], +[AC_REQUIRE([LT_PROG_GCJ])dnl +AC_LANG_SAVE + +# Source file extension for Java test sources. +ac_ext=java + +# Object file extension for compiled Java test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="class foo {}" + +# Code to be used in simple link tests +lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }' + +# ltmain only uses $CC for tagged configurations so make sure $CC is set. +_LT_TAG_COMPILER + +# save warnings/boilerplate of simple test code +_LT_COMPILER_BOILERPLATE +_LT_LINKER_BOILERPLATE + +# Allow CC to be a program name with arguments. +lt_save_CC=$CC +lt_save_CFLAGS=$CFLAGS +lt_save_GCC=$GCC +GCC=yes +CC=${GCJ-"gcj"} +CFLAGS=$GCJFLAGS +compiler=$CC +_LT_TAGVAR(compiler, $1)=$CC +_LT_TAGVAR(LD, $1)=$LD +_LT_CC_BASENAME([$compiler]) + +# GCJ did not exist at the time GCC didn't implicitly link libc in. +_LT_TAGVAR(archive_cmds_need_lc, $1)=no + +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_TAGVAR(reload_flag, $1)=$reload_flag +_LT_TAGVAR(reload_cmds, $1)=$reload_cmds + +## CAVEAT EMPTOR: +## There is no encapsulation within the following macros, do not change +## the running order or otherwise move them around unless you know exactly +## what you are doing... +if test -n "$compiler"; then + _LT_COMPILER_NO_RTTI($1) + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + + _LT_CONFIG($1) +fi + +AC_LANG_RESTORE + +GCC=$lt_save_GCC +CC=$lt_save_CC +CFLAGS=$lt_save_CFLAGS +])# _LT_LANG_GCJ_CONFIG + + +# _LT_LANG_GO_CONFIG([TAG]) +# -------------------------- +# Ensure that the configuration variables for the GNU Go compiler +# are suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to 'libtool'. +m4_defun([_LT_LANG_GO_CONFIG], +[AC_REQUIRE([LT_PROG_GO])dnl +AC_LANG_SAVE + +# Source file extension for Go test sources. +ac_ext=go + +# Object file extension for compiled Go test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="package main; func main() { }" + +# Code to be used in simple link tests +lt_simple_link_test_code='package main; func main() { }' + +# ltmain only uses $CC for tagged configurations so make sure $CC is set. +_LT_TAG_COMPILER + +# save warnings/boilerplate of simple test code +_LT_COMPILER_BOILERPLATE +_LT_LINKER_BOILERPLATE + +# Allow CC to be a program name with arguments. +lt_save_CC=$CC +lt_save_CFLAGS=$CFLAGS +lt_save_GCC=$GCC +GCC=yes +CC=${GOC-"gccgo"} +CFLAGS=$GOFLAGS +compiler=$CC +_LT_TAGVAR(compiler, $1)=$CC +_LT_TAGVAR(LD, $1)=$LD +_LT_CC_BASENAME([$compiler]) + +# Go did not exist at the time GCC didn't implicitly link libc in. +_LT_TAGVAR(archive_cmds_need_lc, $1)=no + +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_TAGVAR(reload_flag, $1)=$reload_flag +_LT_TAGVAR(reload_cmds, $1)=$reload_cmds + +## CAVEAT EMPTOR: +## There is no encapsulation within the following macros, do not change +## the running order or otherwise move them around unless you know exactly +## what you are doing... +if test -n "$compiler"; then + _LT_COMPILER_NO_RTTI($1) + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + + _LT_CONFIG($1) +fi + +AC_LANG_RESTORE + +GCC=$lt_save_GCC +CC=$lt_save_CC +CFLAGS=$lt_save_CFLAGS +])# _LT_LANG_GO_CONFIG + + +# _LT_LANG_RC_CONFIG([TAG]) +# ------------------------- +# Ensure that the configuration variables for the Windows resource compiler +# are suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to 'libtool'. +m4_defun([_LT_LANG_RC_CONFIG], +[AC_REQUIRE([LT_PROG_RC])dnl +AC_LANG_SAVE + +# Source file extension for RC test sources. +ac_ext=rc + +# Object file extension for compiled RC test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }' + +# Code to be used in simple link tests +lt_simple_link_test_code=$lt_simple_compile_test_code + +# ltmain only uses $CC for tagged configurations so make sure $CC is set. +_LT_TAG_COMPILER + +# save warnings/boilerplate of simple test code +_LT_COMPILER_BOILERPLATE +_LT_LINKER_BOILERPLATE + +# Allow CC to be a program name with arguments. +lt_save_CC=$CC +lt_save_CFLAGS=$CFLAGS +lt_save_GCC=$GCC +GCC= +CC=${RC-"windres"} +CFLAGS= +compiler=$CC +_LT_TAGVAR(compiler, $1)=$CC +_LT_CC_BASENAME([$compiler]) +_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes + +if test -n "$compiler"; then + : + _LT_CONFIG($1) +fi + +GCC=$lt_save_GCC +AC_LANG_RESTORE +CC=$lt_save_CC +CFLAGS=$lt_save_CFLAGS +])# _LT_LANG_RC_CONFIG + + +# LT_PROG_GCJ +# ----------- +AC_DEFUN([LT_PROG_GCJ], +[m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ], + [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ], + [AC_CHECK_TOOL(GCJ, gcj,) + test set = "${GCJFLAGS+set}" || GCJFLAGS="-g -O2" + AC_SUBST(GCJFLAGS)])])[]dnl +]) + +# Old name: +AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([LT_AC_PROG_GCJ], []) + + +# LT_PROG_GO +# ---------- +AC_DEFUN([LT_PROG_GO], +[AC_CHECK_TOOL(GOC, gccgo,) +]) + + +# LT_PROG_RC +# ---------- +AC_DEFUN([LT_PROG_RC], +[AC_CHECK_TOOL(RC, windres,) +]) + +# Old name: +AU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([LT_AC_PROG_RC], []) + + +# _LT_DECL_EGREP +# -------------- +# If we don't have a new enough Autoconf to choose the best grep +# available, choose the one first in the user's PATH. +m4_defun([_LT_DECL_EGREP], +[AC_REQUIRE([AC_PROG_EGREP])dnl +AC_REQUIRE([AC_PROG_FGREP])dnl +test -z "$GREP" && GREP=grep +_LT_DECL([], [GREP], [1], [A grep program that handles long lines]) +_LT_DECL([], [EGREP], [1], [An ERE matcher]) +_LT_DECL([], [FGREP], [1], [A literal string matcher]) +dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too +AC_SUBST([GREP]) +]) + + +# _LT_DECL_OBJDUMP +# -------------- +# If we don't have a new enough Autoconf to choose the best objdump +# available, choose the one first in the user's PATH. +m4_defun([_LT_DECL_OBJDUMP], +[AC_CHECK_TOOL(OBJDUMP, objdump, false) +test -z "$OBJDUMP" && OBJDUMP=objdump +_LT_DECL([], [OBJDUMP], [1], [An object symbol dumper]) +AC_SUBST([OBJDUMP]) +]) + +# _LT_DECL_DLLTOOL +# ---------------- +# Ensure DLLTOOL variable is set. +m4_defun([_LT_DECL_DLLTOOL], +[AC_CHECK_TOOL(DLLTOOL, dlltool, false) +test -z "$DLLTOOL" && DLLTOOL=dlltool +_LT_DECL([], [DLLTOOL], [1], [DLL creation program]) +AC_SUBST([DLLTOOL]) +]) + +# _LT_DECL_SED +# ------------ +# Check for a fully-functional sed program, that truncates +# as few characters as possible. Prefer GNU sed if found. +m4_defun([_LT_DECL_SED], +[AC_PROG_SED +test -z "$SED" && SED=sed +Xsed="$SED -e 1s/^X//" +_LT_DECL([], [SED], [1], [A sed program that does not truncate output]) +_LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"], + [Sed that helps us avoid accidentally triggering echo(1) options like -n]) +])# _LT_DECL_SED + +m4_ifndef([AC_PROG_SED], [ +############################################################ +# NOTE: This macro has been submitted for inclusion into # +# GNU Autoconf as AC_PROG_SED. When it is available in # +# a released version of Autoconf we should remove this # +# macro and use it instead. # +############################################################ + +m4_defun([AC_PROG_SED], +[AC_MSG_CHECKING([for a sed that does not truncate output]) +AC_CACHE_VAL(lt_cv_path_SED, +[# Loop through the user's path and test for sed and gsed. +# Then use that list of sed's as ones to test for truncation. +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for lt_ac_prog in sed gsed; do + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then + lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" + fi + done + done +done +IFS=$as_save_IFS +lt_ac_max=0 +lt_ac_count=0 +# Add /usr/xpg4/bin/sed as it is typically found on Solaris +# along with /bin/sed that truncates output. +for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do + test ! -f "$lt_ac_sed" && continue + cat /dev/null > conftest.in + lt_ac_count=0 + echo $ECHO_N "0123456789$ECHO_C" >conftest.in + # Check for GNU sed and select it if it is found. + if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then + lt_cv_path_SED=$lt_ac_sed + break + fi + while true; do + cat conftest.in conftest.in >conftest.tmp + mv conftest.tmp conftest.in + cp conftest.in conftest.nl + echo >>conftest.nl + $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break + cmp -s conftest.out conftest.nl || break + # 10000 chars as input seems more than enough + test 10 -lt "$lt_ac_count" && break + lt_ac_count=`expr $lt_ac_count + 1` + if test "$lt_ac_count" -gt "$lt_ac_max"; then + lt_ac_max=$lt_ac_count + lt_cv_path_SED=$lt_ac_sed + fi + done +done +]) +SED=$lt_cv_path_SED +AC_SUBST([SED]) +AC_MSG_RESULT([$SED]) +])#AC_PROG_SED +])#m4_ifndef + +# Old name: +AU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([LT_AC_PROG_SED], []) + + +# _LT_CHECK_SHELL_FEATURES +# ------------------------ +# Find out whether the shell is Bourne or XSI compatible, +# or has some other useful features. +m4_defun([_LT_CHECK_SHELL_FEATURES], +[if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then + lt_unset=unset +else + lt_unset=false +fi +_LT_DECL([], [lt_unset], [0], [whether the shell understands "unset"])dnl + +# test EBCDIC or ASCII +case `echo X|tr X '\101'` in + A) # ASCII based system + # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr + lt_SP2NL='tr \040 \012' + lt_NL2SP='tr \015\012 \040\040' + ;; + *) # EBCDIC based system + lt_SP2NL='tr \100 \n' + lt_NL2SP='tr \r\n \100\100' + ;; +esac +_LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl +_LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl +])# _LT_CHECK_SHELL_FEATURES + + +# _LT_PATH_CONVERSION_FUNCTIONS +# ----------------------------- +# Determine what file name conversion functions should be used by +# func_to_host_file (and, implicitly, by func_to_host_path). These are needed +# for certain cross-compile configurations and native mingw. +m4_defun([_LT_PATH_CONVERSION_FUNCTIONS], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_CANONICAL_BUILD])dnl +AC_MSG_CHECKING([how to convert $build file names to $host format]) +AC_CACHE_VAL(lt_cv_to_host_file_cmd, +[case $host in + *-*-mingw* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 + ;; + *-*-cygwin* ) + lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 + ;; + * ) # otherwise, assume *nix + lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 + ;; + esac + ;; + *-*-cygwin* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin + ;; + *-*-cygwin* ) + lt_cv_to_host_file_cmd=func_convert_file_noop + ;; + * ) # otherwise, assume *nix + lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin + ;; + esac + ;; + * ) # unhandled hosts (and "normal" native builds) + lt_cv_to_host_file_cmd=func_convert_file_noop + ;; +esac +]) +to_host_file_cmd=$lt_cv_to_host_file_cmd +AC_MSG_RESULT([$lt_cv_to_host_file_cmd]) +_LT_DECL([to_host_file_cmd], [lt_cv_to_host_file_cmd], + [0], [convert $build file names to $host format])dnl + +AC_MSG_CHECKING([how to convert $build file names to toolchain format]) +AC_CACHE_VAL(lt_cv_to_tool_file_cmd, +[#assume ordinary cross tools, or native build. +lt_cv_to_tool_file_cmd=func_convert_file_noop +case $host in + *-*-mingw* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 + ;; + esac + ;; +esac +]) +to_tool_file_cmd=$lt_cv_to_tool_file_cmd +AC_MSG_RESULT([$lt_cv_to_tool_file_cmd]) +_LT_DECL([to_tool_file_cmd], [lt_cv_to_tool_file_cmd], + [0], [convert $build files to toolchain format])dnl +])# _LT_PATH_CONVERSION_FUNCTIONS diff --git a/m4/ltoptions.m4 b/m4/ltoptions.m4 new file mode 100644 index 0000000..94b0829 --- /dev/null +++ b/m4/ltoptions.m4 @@ -0,0 +1,437 @@ +# Helper functions for option handling. -*- Autoconf -*- +# +# Copyright (C) 2004-2005, 2007-2009, 2011-2015 Free Software +# Foundation, Inc. +# Written by Gary V. Vaughan, 2004 +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +# serial 8 ltoptions.m4 + +# This is to help aclocal find these macros, as it can't see m4_define. +AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])]) + + +# _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME) +# ------------------------------------------ +m4_define([_LT_MANGLE_OPTION], +[[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])]) + + +# _LT_SET_OPTION(MACRO-NAME, OPTION-NAME) +# --------------------------------------- +# Set option OPTION-NAME for macro MACRO-NAME, and if there is a +# matching handler defined, dispatch to it. Other OPTION-NAMEs are +# saved as a flag. +m4_define([_LT_SET_OPTION], +[m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl +m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]), + _LT_MANGLE_DEFUN([$1], [$2]), + [m4_warning([Unknown $1 option '$2'])])[]dnl +]) + + +# _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET]) +# ------------------------------------------------------------ +# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. +m4_define([_LT_IF_OPTION], +[m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])]) + + +# _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET) +# ------------------------------------------------------- +# Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME +# are set. +m4_define([_LT_UNLESS_OPTIONS], +[m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), + [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option), + [m4_define([$0_found])])])[]dnl +m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3 +])[]dnl +]) + + +# _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST) +# ---------------------------------------- +# OPTION-LIST is a space-separated list of Libtool options associated +# with MACRO-NAME. If any OPTION has a matching handler declared with +# LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about +# the unknown option and exit. +m4_defun([_LT_SET_OPTIONS], +[# Set options +m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), + [_LT_SET_OPTION([$1], _LT_Option)]) + +m4_if([$1],[LT_INIT],[ + dnl + dnl Simply set some default values (i.e off) if boolean options were not + dnl specified: + _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no + ]) + _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no + ]) + dnl + dnl If no reference was made to various pairs of opposing options, then + dnl we run the default mode handler for the pair. For example, if neither + dnl 'shared' nor 'disable-shared' was passed, we enable building of shared + dnl archives by default: + _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED]) + _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC]) + _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC]) + _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install], + [_LT_ENABLE_FAST_INSTALL]) + _LT_UNLESS_OPTIONS([LT_INIT], [aix-soname=aix aix-soname=both aix-soname=svr4], + [_LT_WITH_AIX_SONAME([aix])]) + ]) +])# _LT_SET_OPTIONS + + +## --------------------------------- ## +## Macros to handle LT_INIT options. ## +## --------------------------------- ## + +# _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME) +# ----------------------------------------- +m4_define([_LT_MANGLE_DEFUN], +[[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])]) + + +# LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE) +# ----------------------------------------------- +m4_define([LT_OPTION_DEFINE], +[m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl +])# LT_OPTION_DEFINE + + +# dlopen +# ------ +LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes +]) + +AU_DEFUN([AC_LIBTOOL_DLOPEN], +[_LT_SET_OPTION([LT_INIT], [dlopen]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you +put the 'dlopen' option into LT_INIT's first parameter.]) +]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], []) + + +# win32-dll +# --------- +# Declare package support for building win32 dll's. +LT_OPTION_DEFINE([LT_INIT], [win32-dll], +[enable_win32_dll=yes + +case $host in +*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*) + AC_CHECK_TOOL(AS, as, false) + AC_CHECK_TOOL(DLLTOOL, dlltool, false) + AC_CHECK_TOOL(OBJDUMP, objdump, false) + ;; +esac + +test -z "$AS" && AS=as +_LT_DECL([], [AS], [1], [Assembler program])dnl + +test -z "$DLLTOOL" && DLLTOOL=dlltool +_LT_DECL([], [DLLTOOL], [1], [DLL creation program])dnl + +test -z "$OBJDUMP" && OBJDUMP=objdump +_LT_DECL([], [OBJDUMP], [1], [Object dumper program])dnl +])# win32-dll + +AU_DEFUN([AC_LIBTOOL_WIN32_DLL], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +_LT_SET_OPTION([LT_INIT], [win32-dll]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you +put the 'win32-dll' option into LT_INIT's first parameter.]) +]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], []) + + +# _LT_ENABLE_SHARED([DEFAULT]) +# ---------------------------- +# implement the --enable-shared flag, and supports the 'shared' and +# 'disable-shared' LT_INIT options. +# DEFAULT is either 'yes' or 'no'. If omitted, it defaults to 'yes'. +m4_define([_LT_ENABLE_SHARED], +[m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl +AC_ARG_ENABLE([shared], + [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@], + [build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])], + [p=${PACKAGE-default} + case $enableval in + yes) enable_shared=yes ;; + no) enable_shared=no ;; + *) + enable_shared=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, + for pkg in $enableval; do + IFS=$lt_save_ifs + if test "X$pkg" = "X$p"; then + enable_shared=yes + fi + done + IFS=$lt_save_ifs + ;; + esac], + [enable_shared=]_LT_ENABLE_SHARED_DEFAULT) + + _LT_DECL([build_libtool_libs], [enable_shared], [0], + [Whether or not to build shared libraries]) +])# _LT_ENABLE_SHARED + +LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])]) +LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])]) + +# Old names: +AC_DEFUN([AC_ENABLE_SHARED], +[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared]) +]) + +AC_DEFUN([AC_DISABLE_SHARED], +[_LT_SET_OPTION([LT_INIT], [disable-shared]) +]) + +AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)]) +AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AM_ENABLE_SHARED], []) +dnl AC_DEFUN([AM_DISABLE_SHARED], []) + + + +# _LT_ENABLE_STATIC([DEFAULT]) +# ---------------------------- +# implement the --enable-static flag, and support the 'static' and +# 'disable-static' LT_INIT options. +# DEFAULT is either 'yes' or 'no'. If omitted, it defaults to 'yes'. +m4_define([_LT_ENABLE_STATIC], +[m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl +AC_ARG_ENABLE([static], + [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@], + [build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])], + [p=${PACKAGE-default} + case $enableval in + yes) enable_static=yes ;; + no) enable_static=no ;; + *) + enable_static=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, + for pkg in $enableval; do + IFS=$lt_save_ifs + if test "X$pkg" = "X$p"; then + enable_static=yes + fi + done + IFS=$lt_save_ifs + ;; + esac], + [enable_static=]_LT_ENABLE_STATIC_DEFAULT) + + _LT_DECL([build_old_libs], [enable_static], [0], + [Whether or not to build static libraries]) +])# _LT_ENABLE_STATIC + +LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])]) +LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])]) + +# Old names: +AC_DEFUN([AC_ENABLE_STATIC], +[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static]) +]) + +AC_DEFUN([AC_DISABLE_STATIC], +[_LT_SET_OPTION([LT_INIT], [disable-static]) +]) + +AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)]) +AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AM_ENABLE_STATIC], []) +dnl AC_DEFUN([AM_DISABLE_STATIC], []) + + + +# _LT_ENABLE_FAST_INSTALL([DEFAULT]) +# ---------------------------------- +# implement the --enable-fast-install flag, and support the 'fast-install' +# and 'disable-fast-install' LT_INIT options. +# DEFAULT is either 'yes' or 'no'. If omitted, it defaults to 'yes'. +m4_define([_LT_ENABLE_FAST_INSTALL], +[m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl +AC_ARG_ENABLE([fast-install], + [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@], + [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])], + [p=${PACKAGE-default} + case $enableval in + yes) enable_fast_install=yes ;; + no) enable_fast_install=no ;; + *) + enable_fast_install=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, + for pkg in $enableval; do + IFS=$lt_save_ifs + if test "X$pkg" = "X$p"; then + enable_fast_install=yes + fi + done + IFS=$lt_save_ifs + ;; + esac], + [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT) + +_LT_DECL([fast_install], [enable_fast_install], [0], + [Whether or not to optimize for fast installation])dnl +])# _LT_ENABLE_FAST_INSTALL + +LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])]) +LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])]) + +# Old names: +AU_DEFUN([AC_ENABLE_FAST_INSTALL], +[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you put +the 'fast-install' option into LT_INIT's first parameter.]) +]) + +AU_DEFUN([AC_DISABLE_FAST_INSTALL], +[_LT_SET_OPTION([LT_INIT], [disable-fast-install]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you put +the 'disable-fast-install' option into LT_INIT's first parameter.]) +]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], []) +dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], []) + + +# _LT_WITH_AIX_SONAME([DEFAULT]) +# ---------------------------------- +# implement the --with-aix-soname flag, and support the `aix-soname=aix' +# and `aix-soname=both' and `aix-soname=svr4' LT_INIT options. DEFAULT +# is either `aix', `both' or `svr4'. If omitted, it defaults to `aix'. +m4_define([_LT_WITH_AIX_SONAME], +[m4_define([_LT_WITH_AIX_SONAME_DEFAULT], [m4_if($1, svr4, svr4, m4_if($1, both, both, aix))])dnl +shared_archive_member_spec= +case $host,$enable_shared in +power*-*-aix[[5-9]]*,yes) + AC_MSG_CHECKING([which variant of shared library versioning to provide]) + AC_ARG_WITH([aix-soname], + [AS_HELP_STRING([--with-aix-soname=aix|svr4|both], + [shared library versioning (aka "SONAME") variant to provide on AIX, @<:@default=]_LT_WITH_AIX_SONAME_DEFAULT[@:>@.])], + [case $withval in + aix|svr4|both) + ;; + *) + AC_MSG_ERROR([Unknown argument to --with-aix-soname]) + ;; + esac + lt_cv_with_aix_soname=$with_aix_soname], + [AC_CACHE_VAL([lt_cv_with_aix_soname], + [lt_cv_with_aix_soname=]_LT_WITH_AIX_SONAME_DEFAULT) + with_aix_soname=$lt_cv_with_aix_soname]) + AC_MSG_RESULT([$with_aix_soname]) + if test aix != "$with_aix_soname"; then + # For the AIX way of multilib, we name the shared archive member + # based on the bitwidth used, traditionally 'shr.o' or 'shr_64.o', + # and 'shr.imp' or 'shr_64.imp', respectively, for the Import File. + # Even when GNU compilers ignore OBJECT_MODE but need '-maix64' flag, + # the AIX toolchain works better with OBJECT_MODE set (default 32). + if test 64 = "${OBJECT_MODE-32}"; then + shared_archive_member_spec=shr_64 + else + shared_archive_member_spec=shr + fi + fi + ;; +*) + with_aix_soname=aix + ;; +esac + +_LT_DECL([], [shared_archive_member_spec], [0], + [Shared archive member basename, for filename based shared library versioning on AIX])dnl +])# _LT_WITH_AIX_SONAME + +LT_OPTION_DEFINE([LT_INIT], [aix-soname=aix], [_LT_WITH_AIX_SONAME([aix])]) +LT_OPTION_DEFINE([LT_INIT], [aix-soname=both], [_LT_WITH_AIX_SONAME([both])]) +LT_OPTION_DEFINE([LT_INIT], [aix-soname=svr4], [_LT_WITH_AIX_SONAME([svr4])]) + + +# _LT_WITH_PIC([MODE]) +# -------------------- +# implement the --with-pic flag, and support the 'pic-only' and 'no-pic' +# LT_INIT options. +# MODE is either 'yes' or 'no'. If omitted, it defaults to 'both'. +m4_define([_LT_WITH_PIC], +[AC_ARG_WITH([pic], + [AS_HELP_STRING([--with-pic@<:@=PKGS@:>@], + [try to use only PIC/non-PIC objects @<:@default=use both@:>@])], + [lt_p=${PACKAGE-default} + case $withval in + yes|no) pic_mode=$withval ;; + *) + pic_mode=default + # Look at the argument we got. We use all the common list separators. + lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, + for lt_pkg in $withval; do + IFS=$lt_save_ifs + if test "X$lt_pkg" = "X$lt_p"; then + pic_mode=yes + fi + done + IFS=$lt_save_ifs + ;; + esac], + [pic_mode=m4_default([$1], [default])]) + +_LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl +])# _LT_WITH_PIC + +LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])]) +LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])]) + +# Old name: +AU_DEFUN([AC_LIBTOOL_PICMODE], +[_LT_SET_OPTION([LT_INIT], [pic-only]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you +put the 'pic-only' option into LT_INIT's first parameter.]) +]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_PICMODE], []) + +## ----------------- ## +## LTDL_INIT Options ## +## ----------------- ## + +m4_define([_LTDL_MODE], []) +LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive], + [m4_define([_LTDL_MODE], [nonrecursive])]) +LT_OPTION_DEFINE([LTDL_INIT], [recursive], + [m4_define([_LTDL_MODE], [recursive])]) +LT_OPTION_DEFINE([LTDL_INIT], [subproject], + [m4_define([_LTDL_MODE], [subproject])]) + +m4_define([_LTDL_TYPE], []) +LT_OPTION_DEFINE([LTDL_INIT], [installable], + [m4_define([_LTDL_TYPE], [installable])]) +LT_OPTION_DEFINE([LTDL_INIT], [convenience], + [m4_define([_LTDL_TYPE], [convenience])]) diff --git a/m4/ltsugar.m4 b/m4/ltsugar.m4 new file mode 100644 index 0000000..48bc934 --- /dev/null +++ b/m4/ltsugar.m4 @@ -0,0 +1,124 @@ +# ltsugar.m4 -- libtool m4 base layer. -*-Autoconf-*- +# +# Copyright (C) 2004-2005, 2007-2008, 2011-2015 Free Software +# Foundation, Inc. +# Written by Gary V. Vaughan, 2004 +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +# serial 6 ltsugar.m4 + +# This is to help aclocal find these macros, as it can't see m4_define. +AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])]) + + +# lt_join(SEP, ARG1, [ARG2...]) +# ----------------------------- +# Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their +# associated separator. +# Needed until we can rely on m4_join from Autoconf 2.62, since all earlier +# versions in m4sugar had bugs. +m4_define([lt_join], +[m4_if([$#], [1], [], + [$#], [2], [[$2]], + [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])]) +m4_define([_lt_join], +[m4_if([$#$2], [2], [], + [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])]) + + +# lt_car(LIST) +# lt_cdr(LIST) +# ------------ +# Manipulate m4 lists. +# These macros are necessary as long as will still need to support +# Autoconf-2.59, which quotes differently. +m4_define([lt_car], [[$1]]) +m4_define([lt_cdr], +[m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])], + [$#], 1, [], + [m4_dquote(m4_shift($@))])]) +m4_define([lt_unquote], $1) + + +# lt_append(MACRO-NAME, STRING, [SEPARATOR]) +# ------------------------------------------ +# Redefine MACRO-NAME to hold its former content plus 'SEPARATOR''STRING'. +# Note that neither SEPARATOR nor STRING are expanded; they are appended +# to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked). +# No SEPARATOR is output if MACRO-NAME was previously undefined (different +# than defined and empty). +# +# This macro is needed until we can rely on Autoconf 2.62, since earlier +# versions of m4sugar mistakenly expanded SEPARATOR but not STRING. +m4_define([lt_append], +[m4_define([$1], + m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])]) + + + +# lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...]) +# ---------------------------------------------------------- +# Produce a SEP delimited list of all paired combinations of elements of +# PREFIX-LIST with SUFFIX1 through SUFFIXn. Each element of the list +# has the form PREFIXmINFIXSUFFIXn. +# Needed until we can rely on m4_combine added in Autoconf 2.62. +m4_define([lt_combine], +[m4_if(m4_eval([$# > 3]), [1], + [m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl +[[m4_foreach([_Lt_prefix], [$2], + [m4_foreach([_Lt_suffix], + ]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[, + [_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])]) + + +# lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ]) +# ----------------------------------------------------------------------- +# Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited +# by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ. +m4_define([lt_if_append_uniq], +[m4_ifdef([$1], + [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1], + [lt_append([$1], [$2], [$3])$4], + [$5])], + [lt_append([$1], [$2], [$3])$4])]) + + +# lt_dict_add(DICT, KEY, VALUE) +# ----------------------------- +m4_define([lt_dict_add], +[m4_define([$1($2)], [$3])]) + + +# lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE) +# -------------------------------------------- +m4_define([lt_dict_add_subkey], +[m4_define([$1($2:$3)], [$4])]) + + +# lt_dict_fetch(DICT, KEY, [SUBKEY]) +# ---------------------------------- +m4_define([lt_dict_fetch], +[m4_ifval([$3], + m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]), + m4_ifdef([$1($2)], [m4_defn([$1($2)])]))]) + + +# lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE]) +# ----------------------------------------------------------------- +m4_define([lt_if_dict_fetch], +[m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4], + [$5], + [$6])]) + + +# lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...]) +# -------------------------------------------------------------- +m4_define([lt_dict_filter], +[m4_if([$5], [], [], + [lt_join(m4_quote(m4_default([$4], [[, ]])), + lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]), + [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl +]) diff --git a/m4/ltversion.m4 b/m4/ltversion.m4 new file mode 100644 index 0000000..fa04b52 --- /dev/null +++ b/m4/ltversion.m4 @@ -0,0 +1,23 @@ +# ltversion.m4 -- version numbers -*- Autoconf -*- +# +# Copyright (C) 2004, 2011-2015 Free Software Foundation, Inc. +# Written by Scott James Remnant, 2004 +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +# @configure_input@ + +# serial 4179 ltversion.m4 +# This file is part of GNU Libtool + +m4_define([LT_PACKAGE_VERSION], [2.4.6]) +m4_define([LT_PACKAGE_REVISION], [2.4.6]) + +AC_DEFUN([LTVERSION_VERSION], +[macro_version='2.4.6' +macro_revision='2.4.6' +_LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?]) +_LT_DECL(, macro_revision, 0) +]) diff --git a/m4/lt~obsolete.m4 b/m4/lt~obsolete.m4 new file mode 100644 index 0000000..c6b26f8 --- /dev/null +++ b/m4/lt~obsolete.m4 @@ -0,0 +1,99 @@ +# lt~obsolete.m4 -- aclocal satisfying obsolete definitions. -*-Autoconf-*- +# +# Copyright (C) 2004-2005, 2007, 2009, 2011-2015 Free Software +# Foundation, Inc. +# Written by Scott James Remnant, 2004. +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. + +# serial 5 lt~obsolete.m4 + +# These exist entirely to fool aclocal when bootstrapping libtool. +# +# In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN), +# which have later been changed to m4_define as they aren't part of the +# exported API, or moved to Autoconf or Automake where they belong. +# +# The trouble is, aclocal is a bit thick. It'll see the old AC_DEFUN +# in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us +# using a macro with the same name in our local m4/libtool.m4 it'll +# pull the old libtool.m4 in (it doesn't see our shiny new m4_define +# and doesn't know about Autoconf macros at all.) +# +# So we provide this file, which has a silly filename so it's always +# included after everything else. This provides aclocal with the +# AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything +# because those macros already exist, or will be overwritten later. +# We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6. +# +# Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here. +# Yes, that means every name once taken will need to remain here until +# we give up compatibility with versions before 1.7, at which point +# we need to keep only those names which we still refer to. + +# This is to help aclocal find these macros, as it can't see m4_define. +AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])]) + +m4_ifndef([AC_LIBTOOL_LINKER_OPTION], [AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])]) +m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP])]) +m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])]) +m4_ifndef([_LT_AC_SHELL_INIT], [AC_DEFUN([_LT_AC_SHELL_INIT])]) +m4_ifndef([_LT_AC_SYS_LIBPATH_AIX], [AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])]) +m4_ifndef([_LT_PROG_LTMAIN], [AC_DEFUN([_LT_PROG_LTMAIN])]) +m4_ifndef([_LT_AC_TAGVAR], [AC_DEFUN([_LT_AC_TAGVAR])]) +m4_ifndef([AC_LTDL_ENABLE_INSTALL], [AC_DEFUN([AC_LTDL_ENABLE_INSTALL])]) +m4_ifndef([AC_LTDL_PREOPEN], [AC_DEFUN([AC_LTDL_PREOPEN])]) +m4_ifndef([_LT_AC_SYS_COMPILER], [AC_DEFUN([_LT_AC_SYS_COMPILER])]) +m4_ifndef([_LT_AC_LOCK], [AC_DEFUN([_LT_AC_LOCK])]) +m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE], [AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])]) +m4_ifndef([_LT_AC_TRY_DLOPEN_SELF], [AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])]) +m4_ifndef([AC_LIBTOOL_PROG_CC_C_O], [AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])]) +m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])]) +m4_ifndef([AC_LIBTOOL_OBJDIR], [AC_DEFUN([AC_LIBTOOL_OBJDIR])]) +m4_ifndef([AC_LTDL_OBJDIR], [AC_DEFUN([AC_LTDL_OBJDIR])]) +m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])]) +m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP], [AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])]) +m4_ifndef([AC_PATH_MAGIC], [AC_DEFUN([AC_PATH_MAGIC])]) +m4_ifndef([AC_PROG_LD_GNU], [AC_DEFUN([AC_PROG_LD_GNU])]) +m4_ifndef([AC_PROG_LD_RELOAD_FLAG], [AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])]) +m4_ifndef([AC_DEPLIBS_CHECK_METHOD], [AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])]) +m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])]) +m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])]) +m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])]) +m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS], [AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])]) +m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP], [AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])]) +m4_ifndef([LT_AC_PROG_EGREP], [AC_DEFUN([LT_AC_PROG_EGREP])]) +m4_ifndef([LT_AC_PROG_SED], [AC_DEFUN([LT_AC_PROG_SED])]) +m4_ifndef([_LT_CC_BASENAME], [AC_DEFUN([_LT_CC_BASENAME])]) +m4_ifndef([_LT_COMPILER_BOILERPLATE], [AC_DEFUN([_LT_COMPILER_BOILERPLATE])]) +m4_ifndef([_LT_LINKER_BOILERPLATE], [AC_DEFUN([_LT_LINKER_BOILERPLATE])]) +m4_ifndef([_AC_PROG_LIBTOOL], [AC_DEFUN([_AC_PROG_LIBTOOL])]) +m4_ifndef([AC_LIBTOOL_SETUP], [AC_DEFUN([AC_LIBTOOL_SETUP])]) +m4_ifndef([_LT_AC_CHECK_DLFCN], [AC_DEFUN([_LT_AC_CHECK_DLFCN])]) +m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER], [AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])]) +m4_ifndef([_LT_AC_TAGCONFIG], [AC_DEFUN([_LT_AC_TAGCONFIG])]) +m4_ifndef([AC_DISABLE_FAST_INSTALL], [AC_DEFUN([AC_DISABLE_FAST_INSTALL])]) +m4_ifndef([_LT_AC_LANG_CXX], [AC_DEFUN([_LT_AC_LANG_CXX])]) +m4_ifndef([_LT_AC_LANG_F77], [AC_DEFUN([_LT_AC_LANG_F77])]) +m4_ifndef([_LT_AC_LANG_GCJ], [AC_DEFUN([_LT_AC_LANG_GCJ])]) +m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])]) +m4_ifndef([_LT_AC_LANG_C_CONFIG], [AC_DEFUN([_LT_AC_LANG_C_CONFIG])]) +m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])]) +m4_ifndef([_LT_AC_LANG_CXX_CONFIG], [AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])]) +m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])]) +m4_ifndef([_LT_AC_LANG_F77_CONFIG], [AC_DEFUN([_LT_AC_LANG_F77_CONFIG])]) +m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])]) +m4_ifndef([_LT_AC_LANG_GCJ_CONFIG], [AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])]) +m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])]) +m4_ifndef([_LT_AC_LANG_RC_CONFIG], [AC_DEFUN([_LT_AC_LANG_RC_CONFIG])]) +m4_ifndef([AC_LIBTOOL_CONFIG], [AC_DEFUN([AC_LIBTOOL_CONFIG])]) +m4_ifndef([_LT_AC_FILE_LTDLL_C], [AC_DEFUN([_LT_AC_FILE_LTDLL_C])]) +m4_ifndef([_LT_REQUIRED_DARWIN_CHECKS], [AC_DEFUN([_LT_REQUIRED_DARWIN_CHECKS])]) +m4_ifndef([_LT_AC_PROG_CXXCPP], [AC_DEFUN([_LT_AC_PROG_CXXCPP])]) +m4_ifndef([_LT_PREPARE_SED_QUOTE_VARS], [AC_DEFUN([_LT_PREPARE_SED_QUOTE_VARS])]) +m4_ifndef([_LT_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_PROG_ECHO_BACKSLASH])]) +m4_ifndef([_LT_PROG_F77], [AC_DEFUN([_LT_PROG_F77])]) +m4_ifndef([_LT_PROG_FC], [AC_DEFUN([_LT_PROG_FC])]) +m4_ifndef([_LT_PROG_CXX], [AC_DEFUN([_LT_PROG_CXX])]) diff --git a/missing b/missing new file mode 100755 index 0000000..f62bbae --- /dev/null +++ b/missing @@ -0,0 +1,215 @@ +#! /bin/sh +# Common wrapper for a few potentially missing GNU programs. + +scriptversion=2013-10-28.13; # UTC + +# Copyright (C) 1996-2014 Free Software Foundation, Inc. +# Originally written by Fran,cois Pinard , 1996. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +if test $# -eq 0; then + echo 1>&2 "Try '$0 --help' for more information" + exit 1 +fi + +case $1 in + + --is-lightweight) + # Used by our autoconf macros to check whether the available missing + # script is modern enough. + exit 0 + ;; + + --run) + # Back-compat with the calling convention used by older automake. + shift + ;; + + -h|--h|--he|--hel|--help) + echo "\ +$0 [OPTION]... PROGRAM [ARGUMENT]... + +Run 'PROGRAM [ARGUMENT]...', returning a proper advice when this fails due +to PROGRAM being missing or too old. + +Options: + -h, --help display this help and exit + -v, --version output version information and exit + +Supported PROGRAM values: + aclocal autoconf autoheader autom4te automake makeinfo + bison yacc flex lex help2man + +Version suffixes to PROGRAM as well as the prefixes 'gnu-', 'gnu', and +'g' are ignored when checking the name. + +Send bug reports to ." + exit $? + ;; + + -v|--v|--ve|--ver|--vers|--versi|--versio|--version) + echo "missing $scriptversion (GNU Automake)" + exit $? + ;; + + -*) + echo 1>&2 "$0: unknown '$1' option" + echo 1>&2 "Try '$0 --help' for more information" + exit 1 + ;; + +esac + +# Run the given program, remember its exit status. +"$@"; st=$? + +# If it succeeded, we are done. +test $st -eq 0 && exit 0 + +# Also exit now if we it failed (or wasn't found), and '--version' was +# passed; such an option is passed most likely to detect whether the +# program is present and works. +case $2 in --version|--help) exit $st;; esac + +# Exit code 63 means version mismatch. This often happens when the user +# tries to use an ancient version of a tool on a file that requires a +# minimum version. +if test $st -eq 63; then + msg="probably too old" +elif test $st -eq 127; then + # Program was missing. + msg="missing on your system" +else + # Program was found and executed, but failed. Give up. + exit $st +fi + +perl_URL=http://www.perl.org/ +flex_URL=http://flex.sourceforge.net/ +gnu_software_URL=http://www.gnu.org/software + +program_details () +{ + case $1 in + aclocal|automake) + echo "The '$1' program is part of the GNU Automake package:" + echo "<$gnu_software_URL/automake>" + echo "It also requires GNU Autoconf, GNU m4 and Perl in order to run:" + echo "<$gnu_software_URL/autoconf>" + echo "<$gnu_software_URL/m4/>" + echo "<$perl_URL>" + ;; + autoconf|autom4te|autoheader) + echo "The '$1' program is part of the GNU Autoconf package:" + echo "<$gnu_software_URL/autoconf/>" + echo "It also requires GNU m4 and Perl in order to run:" + echo "<$gnu_software_URL/m4/>" + echo "<$perl_URL>" + ;; + esac +} + +give_advice () +{ + # Normalize program name to check for. + normalized_program=`echo "$1" | sed ' + s/^gnu-//; t + s/^gnu//; t + s/^g//; t'` + + printf '%s\n' "'$1' is $msg." + + configure_deps="'configure.ac' or m4 files included by 'configure.ac'" + case $normalized_program in + autoconf*) + echo "You should only need it if you modified 'configure.ac'," + echo "or m4 files included by it." + program_details 'autoconf' + ;; + autoheader*) + echo "You should only need it if you modified 'acconfig.h' or" + echo "$configure_deps." + program_details 'autoheader' + ;; + automake*) + echo "You should only need it if you modified 'Makefile.am' or" + echo "$configure_deps." + program_details 'automake' + ;; + aclocal*) + echo "You should only need it if you modified 'acinclude.m4' or" + echo "$configure_deps." + program_details 'aclocal' + ;; + autom4te*) + echo "You might have modified some maintainer files that require" + echo "the 'autom4te' program to be rebuilt." + program_details 'autom4te' + ;; + bison*|yacc*) + echo "You should only need it if you modified a '.y' file." + echo "You may want to install the GNU Bison package:" + echo "<$gnu_software_URL/bison/>" + ;; + lex*|flex*) + echo "You should only need it if you modified a '.l' file." + echo "You may want to install the Fast Lexical Analyzer package:" + echo "<$flex_URL>" + ;; + help2man*) + echo "You should only need it if you modified a dependency" \ + "of a man page." + echo "You may want to install the GNU Help2man package:" + echo "<$gnu_software_URL/help2man/>" + ;; + makeinfo*) + echo "You should only need it if you modified a '.texi' file, or" + echo "any other file indirectly affecting the aspect of the manual." + echo "You might want to install the Texinfo package:" + echo "<$gnu_software_URL/texinfo/>" + echo "The spurious makeinfo call might also be the consequence of" + echo "using a buggy 'make' (AIX, DU, IRIX), in which case you might" + echo "want to install GNU make:" + echo "<$gnu_software_URL/make/>" + ;; + *) + echo "You might have modified some files without having the proper" + echo "tools for further handling them. Check the 'README' file, it" + echo "often tells you about the needed prerequisites for installing" + echo "this package. You may also peek at any GNU archive site, in" + echo "case some other package contains this missing '$1' program." + ;; + esac +} + +give_advice "$1" | sed -e '1s/^/WARNING: /' \ + -e '2,$s/^/ /' >&2 + +# Propagate the correct exit status (expected to be 127 for a program +# not found, 63 for a program that failed due to version mismatch). +exit $st + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-time-zone: "UTC" +# time-stamp-end: "; # UTC" +# End: diff --git a/test-driver b/test-driver new file mode 100755 index 0000000..8e575b0 --- /dev/null +++ b/test-driver @@ -0,0 +1,148 @@ +#! /bin/sh +# test-driver - basic testsuite driver script. + +scriptversion=2013-07-13.22; # UTC + +# Copyright (C) 2011-2014 Free Software Foundation, Inc. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# This file is maintained in Automake, please report +# bugs to or send patches to +# . + +# Make unconditional expansion of undefined variables an error. This +# helps a lot in preventing typo-related bugs. +set -u + +usage_error () +{ + echo "$0: $*" >&2 + print_usage >&2 + exit 2 +} + +print_usage () +{ + cat <$log_file 2>&1 +estatus=$? + +if test $enable_hard_errors = no && test $estatus -eq 99; then + tweaked_estatus=1 +else + tweaked_estatus=$estatus +fi + +case $tweaked_estatus:$expect_failure in + 0:yes) col=$red res=XPASS recheck=yes gcopy=yes;; + 0:*) col=$grn res=PASS recheck=no gcopy=no;; + 77:*) col=$blu res=SKIP recheck=no gcopy=yes;; + 99:*) col=$mgn res=ERROR recheck=yes gcopy=yes;; + *:yes) col=$lgn res=XFAIL recheck=no gcopy=yes;; + *:*) col=$red res=FAIL recheck=yes gcopy=yes;; +esac + +# Report the test outcome and exit status in the logs, so that one can +# know whether the test passed or failed simply by looking at the '.log' +# file, without the need of also peaking into the corresponding '.trs' +# file (automake bug#11814). +echo "$res $test_name (exit status: $estatus)" >>$log_file + +# Report outcome to console. +echo "${col}${res}${std}: $test_name" + +# Register the test result, and other relevant metadata. +echo ":test-result: $res" > $trs_file +echo ":global-test-result: $res" >> $trs_file +echo ":recheck: $recheck" >> $trs_file +echo ":copy-in-global-log: $gcopy" >> $trs_file + +# Local Variables: +# mode: shell-script +# sh-indentation: 2 +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-time-zone: "UTC" +# time-stamp-end: "; # UTC" +# End: diff --git a/tests/Makefile.am b/tests/Makefile.am new file mode 100644 index 0000000..6e282af --- /dev/null +++ b/tests/Makefile.am @@ -0,0 +1,49 @@ +if OS_UNIX +CONCURRENCY_STRESS_TEST = concurrency-stress-test +endif + +C_TESTS = \ + grayscale_to_rgb \ + rgb_to_bgr \ + rgb_to_ycbcr \ + srgb_to_lab_u8 \ + sanity \ + babl_class_name \ + extract \ + floatclamp \ + float-to-8bit \ + hsl \ + hsva \ + types \ + palette \ + extract \ + nop \ + n_components \ + n_components_cast \ + models \ + cairo-RGB24 \ + $(CONCURRENCY_STRESS_TEST) + +TESTS = \ + $(C_TESTS) + +TESTS_ENVIRONMENT = LD_LIBRARY_PATH=$(top_builddir)/babl:$LD_LIBRARY_PATH GI_TYPELIB_PATH=$(top_builddir)/babl BABL_PATH=$(top_builddir)/extensions/.libs + +AM_CPPFLAGS = -I$(top_srcdir) -I$(top_srcdir)/babl +if OS_UNIX +AM_LDFLAGS = -pthread +endif + +LDADD = $(top_builddir)/babl/libbabl-@BABL_API_VERSION@.la \ + $(MATH_LIB) $(THREAD_LIB) + +EXTRA_DIST=common.inc + +noinst_PROGRAMS = \ + introspect \ + babl_fish_path_fitness \ + babl_fish_path_dhtml \ + babl-html-dump \ + conversions \ + formats \ + $(C_TESTS) diff --git a/tests/Makefile.in b/tests/Makefile.in new file mode 100644 index 0000000..5836a12 --- /dev/null +++ b/tests/Makefile.in @@ -0,0 +1,1431 @@ +# Makefile.in generated by automake 1.15 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2014 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +VPATH = @srcdir@ +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +TESTS = $(am__EXEEXT_2) +noinst_PROGRAMS = introspect$(EXEEXT) babl_fish_path_fitness$(EXEEXT) \ + babl_fish_path_dhtml$(EXEEXT) babl-html-dump$(EXEEXT) \ + conversions$(EXEEXT) formats$(EXEEXT) $(am__EXEEXT_2) +subdir = tests +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(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)/acinclude.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +@OS_UNIX_TRUE@am__EXEEXT_1 = concurrency-stress-test$(EXEEXT) +am__EXEEXT_2 = grayscale_to_rgb$(EXEEXT) rgb_to_bgr$(EXEEXT) \ + rgb_to_ycbcr$(EXEEXT) srgb_to_lab_u8$(EXEEXT) sanity$(EXEEXT) \ + babl_class_name$(EXEEXT) extract$(EXEEXT) floatclamp$(EXEEXT) \ + float-to-8bit$(EXEEXT) hsl$(EXEEXT) hsva$(EXEEXT) \ + types$(EXEEXT) palette$(EXEEXT) extract$(EXEEXT) nop$(EXEEXT) \ + n_components$(EXEEXT) n_components_cast$(EXEEXT) \ + models$(EXEEXT) cairo-RGB24$(EXEEXT) $(am__EXEEXT_1) +PROGRAMS = $(noinst_PROGRAMS) +babl_html_dump_SOURCES = babl-html-dump.c +babl_html_dump_OBJECTS = babl-html-dump.$(OBJEXT) +babl_html_dump_LDADD = $(LDADD) +am__DEPENDENCIES_1 = +babl_html_dump_DEPENDENCIES = \ + $(top_builddir)/babl/libbabl-@BABL_API_VERSION@.la \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) +AM_V_lt = $(am__v_lt_@AM_V@) +am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) +am__v_lt_0 = --silent +am__v_lt_1 = +babl_class_name_SOURCES = babl_class_name.c +babl_class_name_OBJECTS = babl_class_name.$(OBJEXT) +babl_class_name_LDADD = $(LDADD) +babl_class_name_DEPENDENCIES = \ + $(top_builddir)/babl/libbabl-@BABL_API_VERSION@.la \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) +babl_fish_path_dhtml_SOURCES = babl_fish_path_dhtml.c +babl_fish_path_dhtml_OBJECTS = babl_fish_path_dhtml.$(OBJEXT) +babl_fish_path_dhtml_LDADD = $(LDADD) +babl_fish_path_dhtml_DEPENDENCIES = \ + $(top_builddir)/babl/libbabl-@BABL_API_VERSION@.la \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) +babl_fish_path_fitness_SOURCES = babl_fish_path_fitness.c +babl_fish_path_fitness_OBJECTS = babl_fish_path_fitness.$(OBJEXT) +babl_fish_path_fitness_LDADD = $(LDADD) +babl_fish_path_fitness_DEPENDENCIES = \ + $(top_builddir)/babl/libbabl-@BABL_API_VERSION@.la \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) +cairo_RGB24_SOURCES = cairo-RGB24.c +cairo_RGB24_OBJECTS = cairo-RGB24.$(OBJEXT) +cairo_RGB24_LDADD = $(LDADD) +cairo_RGB24_DEPENDENCIES = \ + $(top_builddir)/babl/libbabl-@BABL_API_VERSION@.la \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) +concurrency_stress_test_SOURCES = concurrency-stress-test.c +concurrency_stress_test_OBJECTS = concurrency-stress-test.$(OBJEXT) +concurrency_stress_test_LDADD = $(LDADD) +concurrency_stress_test_DEPENDENCIES = \ + $(top_builddir)/babl/libbabl-@BABL_API_VERSION@.la \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) +conversions_SOURCES = conversions.c +conversions_OBJECTS = conversions.$(OBJEXT) +conversions_LDADD = $(LDADD) +conversions_DEPENDENCIES = \ + $(top_builddir)/babl/libbabl-@BABL_API_VERSION@.la \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) +extract_SOURCES = extract.c +extract_OBJECTS = extract.$(OBJEXT) +extract_LDADD = $(LDADD) +extract_DEPENDENCIES = \ + $(top_builddir)/babl/libbabl-@BABL_API_VERSION@.la \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) +float_to_8bit_SOURCES = float-to-8bit.c +float_to_8bit_OBJECTS = float-to-8bit.$(OBJEXT) +float_to_8bit_LDADD = $(LDADD) +float_to_8bit_DEPENDENCIES = \ + $(top_builddir)/babl/libbabl-@BABL_API_VERSION@.la \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) +floatclamp_SOURCES = floatclamp.c +floatclamp_OBJECTS = floatclamp.$(OBJEXT) +floatclamp_LDADD = $(LDADD) +floatclamp_DEPENDENCIES = \ + $(top_builddir)/babl/libbabl-@BABL_API_VERSION@.la \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) +formats_SOURCES = formats.c +formats_OBJECTS = formats.$(OBJEXT) +formats_LDADD = $(LDADD) +formats_DEPENDENCIES = \ + $(top_builddir)/babl/libbabl-@BABL_API_VERSION@.la \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) +grayscale_to_rgb_SOURCES = grayscale_to_rgb.c +grayscale_to_rgb_OBJECTS = grayscale_to_rgb.$(OBJEXT) +grayscale_to_rgb_LDADD = $(LDADD) +grayscale_to_rgb_DEPENDENCIES = \ + $(top_builddir)/babl/libbabl-@BABL_API_VERSION@.la \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) +hsl_SOURCES = hsl.c +hsl_OBJECTS = hsl.$(OBJEXT) +hsl_LDADD = $(LDADD) +hsl_DEPENDENCIES = $(top_builddir)/babl/libbabl-@BABL_API_VERSION@.la \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) +hsva_SOURCES = hsva.c +hsva_OBJECTS = hsva.$(OBJEXT) +hsva_LDADD = $(LDADD) +hsva_DEPENDENCIES = \ + $(top_builddir)/babl/libbabl-@BABL_API_VERSION@.la \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) +introspect_SOURCES = introspect.c +introspect_OBJECTS = introspect.$(OBJEXT) +introspect_LDADD = $(LDADD) +introspect_DEPENDENCIES = \ + $(top_builddir)/babl/libbabl-@BABL_API_VERSION@.la \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) +models_SOURCES = models.c +models_OBJECTS = models.$(OBJEXT) +models_LDADD = $(LDADD) +models_DEPENDENCIES = \ + $(top_builddir)/babl/libbabl-@BABL_API_VERSION@.la \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) +n_components_SOURCES = n_components.c +n_components_OBJECTS = n_components.$(OBJEXT) +n_components_LDADD = $(LDADD) +n_components_DEPENDENCIES = \ + $(top_builddir)/babl/libbabl-@BABL_API_VERSION@.la \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) +n_components_cast_SOURCES = n_components_cast.c +n_components_cast_OBJECTS = n_components_cast.$(OBJEXT) +n_components_cast_LDADD = $(LDADD) +n_components_cast_DEPENDENCIES = \ + $(top_builddir)/babl/libbabl-@BABL_API_VERSION@.la \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) +nop_SOURCES = nop.c +nop_OBJECTS = nop.$(OBJEXT) +nop_LDADD = $(LDADD) +nop_DEPENDENCIES = $(top_builddir)/babl/libbabl-@BABL_API_VERSION@.la \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) +palette_SOURCES = palette.c +palette_OBJECTS = palette.$(OBJEXT) +palette_LDADD = $(LDADD) +palette_DEPENDENCIES = \ + $(top_builddir)/babl/libbabl-@BABL_API_VERSION@.la \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) +rgb_to_bgr_SOURCES = rgb_to_bgr.c +rgb_to_bgr_OBJECTS = rgb_to_bgr.$(OBJEXT) +rgb_to_bgr_LDADD = $(LDADD) +rgb_to_bgr_DEPENDENCIES = \ + $(top_builddir)/babl/libbabl-@BABL_API_VERSION@.la \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) +rgb_to_ycbcr_SOURCES = rgb_to_ycbcr.c +rgb_to_ycbcr_OBJECTS = rgb_to_ycbcr.$(OBJEXT) +rgb_to_ycbcr_LDADD = $(LDADD) +rgb_to_ycbcr_DEPENDENCIES = \ + $(top_builddir)/babl/libbabl-@BABL_API_VERSION@.la \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) +sanity_SOURCES = sanity.c +sanity_OBJECTS = sanity.$(OBJEXT) +sanity_LDADD = $(LDADD) +sanity_DEPENDENCIES = \ + $(top_builddir)/babl/libbabl-@BABL_API_VERSION@.la \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) +srgb_to_lab_u8_SOURCES = srgb_to_lab_u8.c +srgb_to_lab_u8_OBJECTS = srgb_to_lab_u8.$(OBJEXT) +srgb_to_lab_u8_LDADD = $(LDADD) +srgb_to_lab_u8_DEPENDENCIES = \ + $(top_builddir)/babl/libbabl-@BABL_API_VERSION@.la \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) +types_SOURCES = types.c +types_OBJECTS = types.$(OBJEXT) +types_LDADD = $(LDADD) +types_DEPENDENCIES = \ + $(top_builddir)/babl/libbabl-@BABL_API_VERSION@.la \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_@AM_V@) +am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) +am__v_CC_0 = @echo " CC " $@; +am__v_CC_1 = +CCLD = $(CC) +LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_@AM_V@) +am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) +am__v_CCLD_0 = @echo " CCLD " $@; +am__v_CCLD_1 = +SOURCES = babl-html-dump.c babl_class_name.c babl_fish_path_dhtml.c \ + babl_fish_path_fitness.c cairo-RGB24.c \ + concurrency-stress-test.c conversions.c extract.c \ + float-to-8bit.c floatclamp.c formats.c grayscale_to_rgb.c \ + hsl.c hsva.c introspect.c models.c n_components.c \ + n_components_cast.c nop.c palette.c rgb_to_bgr.c \ + rgb_to_ycbcr.c sanity.c srgb_to_lab_u8.c types.c +DIST_SOURCES = babl-html-dump.c babl_class_name.c \ + babl_fish_path_dhtml.c babl_fish_path_fitness.c cairo-RGB24.c \ + concurrency-stress-test.c conversions.c extract.c \ + float-to-8bit.c floatclamp.c formats.c grayscale_to_rgb.c \ + hsl.c hsva.c introspect.c models.c n_components.c \ + n_components_cast.c nop.c palette.c rgb_to_bgr.c \ + rgb_to_ycbcr.c sanity.c srgb_to_lab_u8.c types.c +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +ETAGS = etags +CTAGS = ctags +am__tty_colors_dummy = \ + mgn= red= grn= lgn= blu= brg= std=; \ + am__color_tests=no +am__tty_colors = { \ + $(am__tty_colors_dummy); \ + if test "X$(AM_COLOR_TESTS)" = Xno; then \ + am__color_tests=no; \ + elif test "X$(AM_COLOR_TESTS)" = Xalways; then \ + am__color_tests=yes; \ + elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \ + am__color_tests=yes; \ + fi; \ + if test $$am__color_tests = yes; then \ + red=''; \ + grn=''; \ + lgn=''; \ + blu=''; \ + mgn=''; \ + brg=''; \ + std=''; \ + fi; \ +} +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +am__recheck_rx = ^[ ]*:recheck:[ ]* +am__global_test_result_rx = ^[ ]*:global-test-result:[ ]* +am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]* +# A command that, given a newline-separated list of test names on the +# standard input, print the name of the tests that are to be re-run +# upon "make recheck". +am__list_recheck_tests = $(AWK) '{ \ + recheck = 1; \ + while ((rc = (getline line < ($$0 ".trs"))) != 0) \ + { \ + if (rc < 0) \ + { \ + if ((getline line2 < ($$0 ".log")) < 0) \ + recheck = 0; \ + break; \ + } \ + else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \ + { \ + recheck = 0; \ + break; \ + } \ + else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \ + { \ + break; \ + } \ + }; \ + if (recheck) \ + print $$0; \ + close ($$0 ".trs"); \ + close ($$0 ".log"); \ +}' +# A command that, given a newline-separated list of test names on the +# standard input, create the global log from their .trs and .log files. +am__create_global_log = $(AWK) ' \ +function fatal(msg) \ +{ \ + print "fatal: making $@: " msg | "cat >&2"; \ + exit 1; \ +} \ +function rst_section(header) \ +{ \ + print header; \ + len = length(header); \ + for (i = 1; i <= len; i = i + 1) \ + printf "="; \ + printf "\n\n"; \ +} \ +{ \ + copy_in_global_log = 1; \ + global_test_result = "RUN"; \ + while ((rc = (getline line < ($$0 ".trs"))) != 0) \ + { \ + if (rc < 0) \ + fatal("failed to read from " $$0 ".trs"); \ + if (line ~ /$(am__global_test_result_rx)/) \ + { \ + sub("$(am__global_test_result_rx)", "", line); \ + sub("[ ]*$$", "", line); \ + global_test_result = line; \ + } \ + else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \ + copy_in_global_log = 0; \ + }; \ + if (copy_in_global_log) \ + { \ + rst_section(global_test_result ": " $$0); \ + while ((rc = (getline line < ($$0 ".log"))) != 0) \ + { \ + if (rc < 0) \ + fatal("failed to read from " $$0 ".log"); \ + print line; \ + }; \ + printf "\n"; \ + }; \ + close ($$0 ".trs"); \ + close ($$0 ".log"); \ +}' +# Restructured Text title. +am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; } +# Solaris 10 'make', and several other traditional 'make' implementations, +# pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it +# by disabling -e (using the XSI extension "set +e") if it's set. +am__sh_e_setup = case $$- in *e*) set +e;; esac +# Default flags passed to test drivers. +am__common_driver_flags = \ + --color-tests "$$am__color_tests" \ + --enable-hard-errors "$$am__enable_hard_errors" \ + --expect-failure "$$am__expect_failure" +# To be inserted before the command running the test. Creates the +# directory for the log if needed. Stores in $dir the directory +# containing $f, in $tst the test, in $log the log. Executes the +# developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and +# passes TESTS_ENVIRONMENT. Set up options for the wrapper that +# will run the test scripts (or their associated LOG_COMPILER, if +# thy have one). +am__check_pre = \ +$(am__sh_e_setup); \ +$(am__vpath_adj_setup) $(am__vpath_adj) \ +$(am__tty_colors); \ +srcdir=$(srcdir); export srcdir; \ +case "$@" in \ + */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \ + *) am__odir=.;; \ +esac; \ +test "x$$am__odir" = x"." || test -d "$$am__odir" \ + || $(MKDIR_P) "$$am__odir" || exit $$?; \ +if test -f "./$$f"; then dir=./; \ +elif test -f "$$f"; then dir=; \ +else dir="$(srcdir)/"; fi; \ +tst=$$dir$$f; log='$@'; \ +if test -n '$(DISABLE_HARD_ERRORS)'; then \ + am__enable_hard_errors=no; \ +else \ + am__enable_hard_errors=yes; \ +fi; \ +case " $(XFAIL_TESTS) " in \ + *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ + am__expect_failure=yes;; \ + *) \ + am__expect_failure=no;; \ +esac; \ +$(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT) +# A shell command to get the names of the tests scripts with any registered +# extension removed (i.e., equivalently, the names of the test logs, with +# the '.log' extension removed). The result is saved in the shell variable +# '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly, +# we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)", +# since that might cause problem with VPATH rewrites for suffix-less tests. +# See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'. +am__set_TESTS_bases = \ + bases='$(TEST_LOGS)'; \ + bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ + bases=`echo $$bases` +RECHECK_LOGS = $(TEST_LOGS) +AM_RECURSIVE_TARGETS = check recheck +TEST_SUITE_LOG = test-suite.log +TEST_EXTENSIONS = @EXEEXT@ .test +LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver +LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS) +am__set_b = \ + case '$@' in \ + */*) \ + case '$*' in \ + */*) b='$*';; \ + *) b=`echo '$@' | sed 's/\.log$$//'`; \ + esac;; \ + *) \ + b='$*';; \ + esac +am__test_logs1 = $(TESTS:=.log) +am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) +TEST_LOGS = $(am__test_logs2:.test.log=.log) +TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver +TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \ + $(TEST_LOG_FLAGS) +am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp \ + $(top_srcdir)/test-driver +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALTIVEC_EXTRA_CFLAGS = @ALTIVEC_EXTRA_CFLAGS@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BABL_API_VERSION = @BABL_API_VERSION@ +BABL_BINARY_AGE = @BABL_BINARY_AGE@ +BABL_CURRENT_MINUS_AGE = @BABL_CURRENT_MINUS_AGE@ +BABL_INTERFACE_AGE = @BABL_INTERFACE_AGE@ +BABL_LIBRARY_VERSION = @BABL_LIBRARY_VERSION@ +BABL_MAJOR_VERSION = @BABL_MAJOR_VERSION@ +BABL_MICRO_VERSION = @BABL_MICRO_VERSION@ +BABL_MINOR_VERSION = @BABL_MINOR_VERSION@ +BABL_REAL_VERSION = @BABL_REAL_VERSION@ +BABL_RELEASE = @BABL_RELEASE@ +BABL_UNSTABLE = @BABL_UNSTABLE@ +BABL_VERSION = @BABL_VERSION@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DIR_SEP = @DIR_SEP@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F16C_EXTRA_CFLAGS = @F16C_EXTRA_CFLAGS@ +FGREP = @FGREP@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MATH_LIB = @MATH_LIB@ +MKDIR_P = @MKDIR_P@ +MMX_EXTRA_CFLAGS = @MMX_EXTRA_CFLAGS@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEP = @PATH_SEP@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +RANLIB = @RANLIB@ +RSVG = @RSVG@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHREXT = @SHREXT@ +SSE2_EXTRA_CFLAGS = @SSE2_EXTRA_CFLAGS@ +SSE4_1_EXTRA_CFLAGS = @SSE4_1_EXTRA_CFLAGS@ +SSE_EXTRA_CFLAGS = @SSE_EXTRA_CFLAGS@ +STRIP = @STRIP@ +THREAD_LIB = @THREAD_LIB@ +VERSION = @VERSION@ +W3M = @W3M@ +WEBSITE_HOST = @WEBSITE_HOST@ +WEBSITE_LOCATION = @WEBSITE_LOCATION@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +@OS_UNIX_TRUE@CONCURRENCY_STRESS_TEST = concurrency-stress-test +C_TESTS = \ + grayscale_to_rgb \ + rgb_to_bgr \ + rgb_to_ycbcr \ + srgb_to_lab_u8 \ + sanity \ + babl_class_name \ + extract \ + floatclamp \ + float-to-8bit \ + hsl \ + hsva \ + types \ + palette \ + extract \ + nop \ + n_components \ + n_components_cast \ + models \ + cairo-RGB24 \ + $(CONCURRENCY_STRESS_TEST) + +TESTS_ENVIRONMENT = LD_LIBRARY_PATH=$(top_builddir)/babl:$LD_LIBRARY_PATH GI_TYPELIB_PATH=$(top_builddir)/babl BABL_PATH=$(top_builddir)/extensions/.libs +AM_CPPFLAGS = -I$(top_srcdir) -I$(top_srcdir)/babl +@OS_UNIX_TRUE@AM_LDFLAGS = -pthread +LDADD = $(top_builddir)/babl/libbabl-@BABL_API_VERSION@.la \ + $(MATH_LIB) $(THREAD_LIB) + +EXTRA_DIST = common.inc +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .lo .log .o .obj .test .test$(EXEEXT) .trs +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign tests/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign tests/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +clean-noinstPROGRAMS: + @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \ + echo " rm -f" $$list; \ + rm -f $$list || exit $$?; \ + test -n "$(EXEEXT)" || exit 0; \ + list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ + echo " rm -f" $$list; \ + rm -f $$list + +babl-html-dump$(EXEEXT): $(babl_html_dump_OBJECTS) $(babl_html_dump_DEPENDENCIES) $(EXTRA_babl_html_dump_DEPENDENCIES) + @rm -f babl-html-dump$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(babl_html_dump_OBJECTS) $(babl_html_dump_LDADD) $(LIBS) + +babl_class_name$(EXEEXT): $(babl_class_name_OBJECTS) $(babl_class_name_DEPENDENCIES) $(EXTRA_babl_class_name_DEPENDENCIES) + @rm -f babl_class_name$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(babl_class_name_OBJECTS) $(babl_class_name_LDADD) $(LIBS) + +babl_fish_path_dhtml$(EXEEXT): $(babl_fish_path_dhtml_OBJECTS) $(babl_fish_path_dhtml_DEPENDENCIES) $(EXTRA_babl_fish_path_dhtml_DEPENDENCIES) + @rm -f babl_fish_path_dhtml$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(babl_fish_path_dhtml_OBJECTS) $(babl_fish_path_dhtml_LDADD) $(LIBS) + +babl_fish_path_fitness$(EXEEXT): $(babl_fish_path_fitness_OBJECTS) $(babl_fish_path_fitness_DEPENDENCIES) $(EXTRA_babl_fish_path_fitness_DEPENDENCIES) + @rm -f babl_fish_path_fitness$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(babl_fish_path_fitness_OBJECTS) $(babl_fish_path_fitness_LDADD) $(LIBS) + +cairo-RGB24$(EXEEXT): $(cairo_RGB24_OBJECTS) $(cairo_RGB24_DEPENDENCIES) $(EXTRA_cairo_RGB24_DEPENDENCIES) + @rm -f cairo-RGB24$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(cairo_RGB24_OBJECTS) $(cairo_RGB24_LDADD) $(LIBS) + +concurrency-stress-test$(EXEEXT): $(concurrency_stress_test_OBJECTS) $(concurrency_stress_test_DEPENDENCIES) $(EXTRA_concurrency_stress_test_DEPENDENCIES) + @rm -f concurrency-stress-test$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(concurrency_stress_test_OBJECTS) $(concurrency_stress_test_LDADD) $(LIBS) + +conversions$(EXEEXT): $(conversions_OBJECTS) $(conversions_DEPENDENCIES) $(EXTRA_conversions_DEPENDENCIES) + @rm -f conversions$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(conversions_OBJECTS) $(conversions_LDADD) $(LIBS) + +extract$(EXEEXT): $(extract_OBJECTS) $(extract_DEPENDENCIES) $(EXTRA_extract_DEPENDENCIES) + @rm -f extract$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(extract_OBJECTS) $(extract_LDADD) $(LIBS) + +float-to-8bit$(EXEEXT): $(float_to_8bit_OBJECTS) $(float_to_8bit_DEPENDENCIES) $(EXTRA_float_to_8bit_DEPENDENCIES) + @rm -f float-to-8bit$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(float_to_8bit_OBJECTS) $(float_to_8bit_LDADD) $(LIBS) + +floatclamp$(EXEEXT): $(floatclamp_OBJECTS) $(floatclamp_DEPENDENCIES) $(EXTRA_floatclamp_DEPENDENCIES) + @rm -f floatclamp$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(floatclamp_OBJECTS) $(floatclamp_LDADD) $(LIBS) + +formats$(EXEEXT): $(formats_OBJECTS) $(formats_DEPENDENCIES) $(EXTRA_formats_DEPENDENCIES) + @rm -f formats$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(formats_OBJECTS) $(formats_LDADD) $(LIBS) + +grayscale_to_rgb$(EXEEXT): $(grayscale_to_rgb_OBJECTS) $(grayscale_to_rgb_DEPENDENCIES) $(EXTRA_grayscale_to_rgb_DEPENDENCIES) + @rm -f grayscale_to_rgb$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(grayscale_to_rgb_OBJECTS) $(grayscale_to_rgb_LDADD) $(LIBS) + +hsl$(EXEEXT): $(hsl_OBJECTS) $(hsl_DEPENDENCIES) $(EXTRA_hsl_DEPENDENCIES) + @rm -f hsl$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(hsl_OBJECTS) $(hsl_LDADD) $(LIBS) + +hsva$(EXEEXT): $(hsva_OBJECTS) $(hsva_DEPENDENCIES) $(EXTRA_hsva_DEPENDENCIES) + @rm -f hsva$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(hsva_OBJECTS) $(hsva_LDADD) $(LIBS) + +introspect$(EXEEXT): $(introspect_OBJECTS) $(introspect_DEPENDENCIES) $(EXTRA_introspect_DEPENDENCIES) + @rm -f introspect$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(introspect_OBJECTS) $(introspect_LDADD) $(LIBS) + +models$(EXEEXT): $(models_OBJECTS) $(models_DEPENDENCIES) $(EXTRA_models_DEPENDENCIES) + @rm -f models$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(models_OBJECTS) $(models_LDADD) $(LIBS) + +n_components$(EXEEXT): $(n_components_OBJECTS) $(n_components_DEPENDENCIES) $(EXTRA_n_components_DEPENDENCIES) + @rm -f n_components$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(n_components_OBJECTS) $(n_components_LDADD) $(LIBS) + +n_components_cast$(EXEEXT): $(n_components_cast_OBJECTS) $(n_components_cast_DEPENDENCIES) $(EXTRA_n_components_cast_DEPENDENCIES) + @rm -f n_components_cast$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(n_components_cast_OBJECTS) $(n_components_cast_LDADD) $(LIBS) + +nop$(EXEEXT): $(nop_OBJECTS) $(nop_DEPENDENCIES) $(EXTRA_nop_DEPENDENCIES) + @rm -f nop$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(nop_OBJECTS) $(nop_LDADD) $(LIBS) + +palette$(EXEEXT): $(palette_OBJECTS) $(palette_DEPENDENCIES) $(EXTRA_palette_DEPENDENCIES) + @rm -f palette$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(palette_OBJECTS) $(palette_LDADD) $(LIBS) + +rgb_to_bgr$(EXEEXT): $(rgb_to_bgr_OBJECTS) $(rgb_to_bgr_DEPENDENCIES) $(EXTRA_rgb_to_bgr_DEPENDENCIES) + @rm -f rgb_to_bgr$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(rgb_to_bgr_OBJECTS) $(rgb_to_bgr_LDADD) $(LIBS) + +rgb_to_ycbcr$(EXEEXT): $(rgb_to_ycbcr_OBJECTS) $(rgb_to_ycbcr_DEPENDENCIES) $(EXTRA_rgb_to_ycbcr_DEPENDENCIES) + @rm -f rgb_to_ycbcr$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(rgb_to_ycbcr_OBJECTS) $(rgb_to_ycbcr_LDADD) $(LIBS) + +sanity$(EXEEXT): $(sanity_OBJECTS) $(sanity_DEPENDENCIES) $(EXTRA_sanity_DEPENDENCIES) + @rm -f sanity$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(sanity_OBJECTS) $(sanity_LDADD) $(LIBS) + +srgb_to_lab_u8$(EXEEXT): $(srgb_to_lab_u8_OBJECTS) $(srgb_to_lab_u8_DEPENDENCIES) $(EXTRA_srgb_to_lab_u8_DEPENDENCIES) + @rm -f srgb_to_lab_u8$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(srgb_to_lab_u8_OBJECTS) $(srgb_to_lab_u8_LDADD) $(LIBS) + +types$(EXEEXT): $(types_OBJECTS) $(types_DEPENDENCIES) $(EXTRA_types_DEPENDENCIES) + @rm -f types$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(types_OBJECTS) $(types_LDADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/babl-html-dump.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/babl_class_name.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/babl_fish_path_dhtml.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/babl_fish_path_fitness.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cairo-RGB24.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/concurrency-stress-test.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/conversions.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/extract.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/float-to-8bit.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/floatclamp.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/formats.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/grayscale_to_rgb.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hsl.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hsva.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/introspect.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/models.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/n_components.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/n_components_cast.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nop.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/palette.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rgb_to_bgr.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rgb_to_ycbcr.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sanity.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/srgb_to_lab_u8.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/types.Po@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< + +.c.obj: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-am +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ + here=`pwd`; \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: ctags-am + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscopelist: cscopelist-am + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +# Recover from deleted '.trs' file; this should ensure that +# "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create +# both 'foo.log' and 'foo.trs'. Break the recipe in two subshells +# to avoid problems with "make -n". +.log.trs: + rm -f $< $@ + $(MAKE) $(AM_MAKEFLAGS) $< + +# Leading 'am--fnord' is there to ensure the list of targets does not +# expand to empty, as could happen e.g. with make check TESTS=''. +am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck) +am--force-recheck: + @: + +$(TEST_SUITE_LOG): $(TEST_LOGS) + @$(am__set_TESTS_bases); \ + am__f_ok () { test -f "$$1" && test -r "$$1"; }; \ + redo_bases=`for i in $$bases; do \ + am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \ + done`; \ + if test -n "$$redo_bases"; then \ + redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \ + redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \ + if $(am__make_dryrun); then :; else \ + rm -f $$redo_logs && rm -f $$redo_results || exit 1; \ + fi; \ + fi; \ + if test -n "$$am__remaking_logs"; then \ + echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \ + "recursion detected" >&2; \ + elif test -n "$$redo_logs"; then \ + am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \ + fi; \ + if $(am__make_dryrun); then :; else \ + st=0; \ + errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \ + for i in $$redo_bases; do \ + test -f $$i.trs && test -r $$i.trs \ + || { echo "$$errmsg $$i.trs" >&2; st=1; }; \ + test -f $$i.log && test -r $$i.log \ + || { echo "$$errmsg $$i.log" >&2; st=1; }; \ + done; \ + test $$st -eq 0 || exit 1; \ + fi + @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \ + ws='[ ]'; \ + results=`for b in $$bases; do echo $$b.trs; done`; \ + test -n "$$results" || results=/dev/null; \ + all=` grep "^$$ws*:test-result:" $$results | wc -l`; \ + pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \ + fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \ + skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \ + xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \ + xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \ + error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \ + if test `expr $$fail + $$xpass + $$error` -eq 0; then \ + success=true; \ + else \ + success=false; \ + fi; \ + br='==================='; br=$$br$$br$$br$$br; \ + result_count () \ + { \ + if test x"$$1" = x"--maybe-color"; then \ + maybe_colorize=yes; \ + elif test x"$$1" = x"--no-color"; then \ + maybe_colorize=no; \ + else \ + echo "$@: invalid 'result_count' usage" >&2; exit 4; \ + fi; \ + shift; \ + desc=$$1 count=$$2; \ + if test $$maybe_colorize = yes && test $$count -gt 0; then \ + color_start=$$3 color_end=$$std; \ + else \ + color_start= color_end=; \ + fi; \ + echo "$${color_start}# $$desc $$count$${color_end}"; \ + }; \ + create_testsuite_report () \ + { \ + result_count $$1 "TOTAL:" $$all "$$brg"; \ + result_count $$1 "PASS: " $$pass "$$grn"; \ + result_count $$1 "SKIP: " $$skip "$$blu"; \ + result_count $$1 "XFAIL:" $$xfail "$$lgn"; \ + result_count $$1 "FAIL: " $$fail "$$red"; \ + result_count $$1 "XPASS:" $$xpass "$$red"; \ + result_count $$1 "ERROR:" $$error "$$mgn"; \ + }; \ + { \ + echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ + $(am__rst_title); \ + create_testsuite_report --no-color; \ + echo; \ + echo ".. contents:: :depth: 2"; \ + echo; \ + for b in $$bases; do echo $$b; done \ + | $(am__create_global_log); \ + } >$(TEST_SUITE_LOG).tmp || exit 1; \ + mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ + if $$success; then \ + col="$$grn"; \ + else \ + col="$$red"; \ + test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ + fi; \ + echo "$${col}$$br$${std}"; \ + echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}"; \ + echo "$${col}$$br$${std}"; \ + create_testsuite_report --maybe-color; \ + echo "$$col$$br$$std"; \ + if $$success; then :; else \ + echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \ + if test -n "$(PACKAGE_BUGREPORT)"; then \ + echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \ + fi; \ + echo "$$col$$br$$std"; \ + fi; \ + $$success || exit 1 + +check-TESTS: + @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list + @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list + @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) + @set +e; $(am__set_TESTS_bases); \ + log_list=`for i in $$bases; do echo $$i.log; done`; \ + trs_list=`for i in $$bases; do echo $$i.trs; done`; \ + log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \ + $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \ + exit $$?; +recheck: all + @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) + @set +e; $(am__set_TESTS_bases); \ + bases=`for i in $$bases; do echo $$i; done \ + | $(am__list_recheck_tests)` || exit 1; \ + log_list=`for i in $$bases; do echo $$i.log; done`; \ + log_list=`echo $$log_list`; \ + $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \ + am__force_recheck=am--force-recheck \ + TEST_LOGS="$$log_list"; \ + exit $$? +grayscale_to_rgb.log: grayscale_to_rgb$(EXEEXT) + @p='grayscale_to_rgb$(EXEEXT)'; \ + b='grayscale_to_rgb'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +rgb_to_bgr.log: rgb_to_bgr$(EXEEXT) + @p='rgb_to_bgr$(EXEEXT)'; \ + b='rgb_to_bgr'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +rgb_to_ycbcr.log: rgb_to_ycbcr$(EXEEXT) + @p='rgb_to_ycbcr$(EXEEXT)'; \ + b='rgb_to_ycbcr'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +srgb_to_lab_u8.log: srgb_to_lab_u8$(EXEEXT) + @p='srgb_to_lab_u8$(EXEEXT)'; \ + b='srgb_to_lab_u8'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +sanity.log: sanity$(EXEEXT) + @p='sanity$(EXEEXT)'; \ + b='sanity'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +babl_class_name.log: babl_class_name$(EXEEXT) + @p='babl_class_name$(EXEEXT)'; \ + b='babl_class_name'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +extract.log: extract$(EXEEXT) + @p='extract$(EXEEXT)'; \ + b='extract'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +floatclamp.log: floatclamp$(EXEEXT) + @p='floatclamp$(EXEEXT)'; \ + b='floatclamp'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +float-to-8bit.log: float-to-8bit$(EXEEXT) + @p='float-to-8bit$(EXEEXT)'; \ + b='float-to-8bit'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +hsl.log: hsl$(EXEEXT) + @p='hsl$(EXEEXT)'; \ + b='hsl'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +hsva.log: hsva$(EXEEXT) + @p='hsva$(EXEEXT)'; \ + b='hsva'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +types.log: types$(EXEEXT) + @p='types$(EXEEXT)'; \ + b='types'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +palette.log: palette$(EXEEXT) + @p='palette$(EXEEXT)'; \ + b='palette'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +nop.log: nop$(EXEEXT) + @p='nop$(EXEEXT)'; \ + b='nop'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +n_components.log: n_components$(EXEEXT) + @p='n_components$(EXEEXT)'; \ + b='n_components'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +n_components_cast.log: n_components_cast$(EXEEXT) + @p='n_components_cast$(EXEEXT)'; \ + b='n_components_cast'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +models.log: models$(EXEEXT) + @p='models$(EXEEXT)'; \ + b='models'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +cairo-RGB24.log: cairo-RGB24$(EXEEXT) + @p='cairo-RGB24$(EXEEXT)'; \ + b='cairo-RGB24'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +concurrency-stress-test.log: concurrency-stress-test$(EXEEXT) + @p='concurrency-stress-test$(EXEEXT)'; \ + b='concurrency-stress-test'; \ + $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +.test.log: + @p='$<'; \ + $(am__set_b); \ + $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ + --log-file $$b.log --trs-file $$b.trs \ + $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ + "$$tst" $(AM_TESTS_FD_REDIRECT) +@am__EXEEXT_TRUE@.test$(EXEEXT).log: +@am__EXEEXT_TRUE@ @p='$<'; \ +@am__EXEEXT_TRUE@ $(am__set_b); \ +@am__EXEEXT_TRUE@ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ +@am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ +@am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ +@am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am + $(MAKE) $(AM_MAKEFLAGS) check-TESTS +check: check-am +all-am: Makefile $(PROGRAMS) +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) + -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs) + -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \ + mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: check-am install-am install-strip + +.PHONY: CTAGS GTAGS TAGS all all-am check check-TESTS check-am clean \ + clean-generic clean-libtool clean-noinstPROGRAMS cscopelist-am \ + ctags ctags-am distclean distclean-compile distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + recheck tags tags-am uninstall uninstall-am + +.PRECIOUS: Makefile + + +# 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. +.NOEXPORT: diff --git a/tests/babl-html-dump.c b/tests/babl-html-dump.c new file mode 100644 index 0000000..4c01611 --- /dev/null +++ b/tests/babl-html-dump.c @@ -0,0 +1,220 @@ +/* babl - dynamically extendable universal pixel conversion library. + * Copyright (C) 2005, Øyvind Kolås. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, see + * . + * + */ + +#include "config.h" +#include "babl-internal.h" /* needed for babl_log */ + +static void model_html (Babl *babl); +static void type_html (Babl *babl); +static void format_html (Babl *babl); +static void conversion_html (Babl *babl); + +static int each_item (Babl *babl, + void *user_data); +static int show_item (Babl *babl, + void *user_data); +static int hide_item (Babl *babl, + void *user_data); + + +int +main (void) +{ + babl_init (); + + printf ("
+"); + + printf ("-"); + + printf ("
"); + printf ("
\n"); + babl_type_class_for_each (each_item, NULL); + printf ("
\n"); + printf ("
\n"); + + printf ("
"); + printf ("
\n"); + babl_model_class_for_each (each_item, NULL); + printf ("
\n"); + printf ("
\n"); + + + printf ("
"); + printf ("
\n"); + babl_format_class_for_each (each_item, NULL); + printf ("
\n"); + printf ("
\n"); + +/* + printf ("
"); + printf ("
\n"); + babl_conversion_each (each_item, NULL); + printf ("
\n"); + printf ("
\n"); + */ + babl_exit (); + + return 0; +} + + +static char normalized_buf[512]; + +static const char *normalize (const char *str) +{ + char *s = normalized_buf; + + strcpy (normalized_buf, str); + + while (*s) + { + if ((*s >= 'a' && *s <= 'z') || + (*s >= 'A' && *s <= 'Z') || + (*s >= '0' && *s <= '9')) + { + } + else + { + *s = '_'; + } + s++; + } + return normalized_buf; +} + + +static int +show_item (Babl *babl, + void *user_data) +{ + printf ("show(\"x_%s\");", normalize (babl->instance.name)); + return 0; +} + + +static int +hide_item (Babl *babl, + void *user_data) +{ + printf ("hide(\"x_%s\");", normalize (babl->instance.name)); + return 0; +} + +static int +each_item (Babl *babl, + void *user_data) +{ + printf ("
"); + printf ("\n", + normalize (babl->instance.name), babl->instance.name); + printf ("
\n", + normalize (babl->instance.name)); + + + switch (babl->class_type) + { + case BABL_TYPE: + type_html (babl); + break; + + case BABL_MODEL: + model_html (babl); + break; + + case BABL_FORMAT: + format_html (babl); + break; + + case BABL_CONVERSION: + case BABL_CONVERSION_LINEAR: + case BABL_CONVERSION_PLANE: + case BABL_CONVERSION_PLANAR: + conversion_html (babl); + break; + + default: + break; + } + + printf ("
\n"); + printf ("
\n"); + return 0; +} + +static void +model_html (Babl *babl) +{ + int i; + + printf ("
"); + printf ("
components
"); + + for (i = 0; i < babl->model.components; i++) + { + printf ("", + BABL (babl->model.component[i])->instance.name); + } + printf ("
%s
"); +} + +static void +type_html (Babl *babl) +{ + printf ("
bits
%i
", babl->type.bits); + printf ("
bytes
%i
", babl->type.bits / 8); +} + + +static void +conversion_html (Babl *babl) +{ + printf ("\n"); +} + +static void +format_html (Babl *babl) +{ + int i; + + printf ("
"); + printf ("
bytes/pixel
%i
", babl->format.bytes_per_pixel); + printf ("
model
%s
", BABL (babl->format.model)->instance.name); + printf ("
components
"); + + for (i = 0; i < babl->format.components; i++) + { + printf ("", + BABL (babl->format.type[i])->instance.name, + BABL (babl->format.component[i])->instance.name); + } + printf ("
%s%s
"); +} + diff --git a/tests/babl_class_name.c b/tests/babl_class_name.c new file mode 100644 index 0000000..8a7bab1 --- /dev/null +++ b/tests/babl_class_name.c @@ -0,0 +1,74 @@ +/* babl - dynamically extendable universal pixel conversion library. + * Copyright (C) 2005, Øyvind Kolås. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, see + * . + */ + +#include "config.h" +#include +#include +#include "babl-internal.h" + +struct +{ + long klass; const char *name; +} reference[] = { + { BABL_INSTANCE, "BablInstance" }, + { BABL_TYPE, "BablType" }, + { BABL_TYPE_INTEGER, "BablTypeInteger" }, + { BABL_TYPE_FLOAT, "BablTypeFloat" }, + { BABL_SAMPLING, "BablSampling" }, + { BABL_COMPONENT, "BablComponent" }, + { BABL_MODEL, "BablModel" }, + { BABL_FORMAT, "BablFormat" }, + { BABL_CONVERSION, "BablConversion" }, + { BABL_CONVERSION_LINEAR, "BablConversionLinear" }, + { BABL_CONVERSION_PLANE, "BablConversionPlane" }, + { BABL_CONVERSION_PLANAR, "BablConversionPlanar" }, + { BABL_FISH, "BablFish" }, + { BABL_FISH_REFERENCE, "BablFishReference" }, + { BABL_IMAGE, "BablImage" }, + { BABL_SKY, "BablSky" }, + { 0, NULL } +}; + +static int +test (void) +{ + int i = 0; + int OK = 1; + + while (reference[i].klass) + { + if (strcmp (reference[i].name, babl_class_name (reference[i].klass))) + { + OK = 0; + babl_log ("'%s'!='%s'\n", reference[i].name, babl_class_name (reference[i].klass)); + } + i++; + } + return !OK; +} + +int +main (int argc, + char **argv) +{ + babl_init (); + if (test ()) + return -1; + babl_exit (); + return 0; +} diff --git a/tests/babl_fish_path_dhtml.c b/tests/babl_fish_path_dhtml.c new file mode 100644 index 0000000..b9bcadf --- /dev/null +++ b/tests/babl_fish_path_dhtml.c @@ -0,0 +1,15 @@ +#include "config.h" +#include +#include "babl-internal.h" + +int main (void) +{ + babl_init (); + + babl_set_extender (babl_extension_quiet_log ()); + babl_fish_stats (stdout); + + babl_exit (); + + return 0; +} diff --git a/tests/babl_fish_path_fitness.c b/tests/babl_fish_path_fitness.c new file mode 100644 index 0000000..7ac4f26 --- /dev/null +++ b/tests/babl_fish_path_fitness.c @@ -0,0 +1,105 @@ +/* perform a symmetricality of conversion test on a set of randomized + * RGBA data */ + +#include "config.h" +#include +#include +#include "babl-internal.h" + +#ifndef HAVE_SRANDOM +#define srandom srand +#define random rand +#endif + +#define pixels 1024 +int total_length = 0; +int total_cost = 0; +int total = 0; +int ok = 0; + +static double test[pixels * 4]; + +static void +test_init (void) +{ + int i; + + for (i = 0; i < pixels * 4; i++) + test [i] = (double) random () / RAND_MAX; +} + +static int qux = 0; + +static char *utf8_bar[] = { " ", "·", "▁", "▂", "▃", "▄", "▅", "▆", "▇", "█" }; +/* +static char *utf8_bar[]= {"!","▁","▃","▅","▇","█","!","!","!"}; +static char *utf8_bar[]={"·", "█", "▇", "▆", "▅", "▄", "▃", "▂", "▁", }; +static char *utf8_bar[]={" ","1","2","3","4","5","6","7","8"}; +*/ + +static int destination_each (Babl *babl, + void *userdata) +{ + Babl *source = userdata; + Babl *destination = babl; + + qux++; + if (qux % babl_formats_count () == qux / babl_formats_count ()) + printf (" "); + else + { + Babl *temp = babl_fish_path (source, destination); + + if (temp) + { + printf ("%s", utf8_bar[babl_list_size (temp->fish_path.conversion_list)]); + total_length += babl_list_size (temp->fish_path.conversion_list); + total_cost += temp->fish_path.cost; + ok++; + total++; + } + else + { + printf (" "); + total++; + } + } + return 0; +} + +static int source_no = 0; + +static int source_each (Babl *babl, + void *userdata) +{ + babl_format_class_for_each (destination_each, babl); + printf ("──%2i %s\n", source_no++, babl->instance.name); + return 0; +} + +int main (void) +{ + babl_init (); + test_init (); + + babl_set_extender (babl_extension_quiet_log ()); + babl_format_class_for_each (source_each, NULL); + { + int i; + + for (i = 0; i < babl_formats_count (); i++) printf ("|");printf ("\n"); + for (i = 0; i < babl_formats_count (); i++) if (i / 100 == 0) printf ("|");else printf ("%i", (i / 100) % 10);printf ("\n"); + for (i = 0; i < babl_formats_count (); i++) if (i / 10 == 0) printf ("|");else printf ("%i", (i / 10) % 10);printf ("\n"); + /* for (i=0;i. + */ + +#include "config.h" +#include +#include +#include "babl.h" + +static int +cairo24_rgb_cairo24 (void) +{ + int OK = 1, i; + + for (i = 0; i < 256; ++i) + { + /* Valgrind complains if 'tmp' is not initialized + * and the brittle RTTI (BABL_IS_BABL) produces a + * crash if it contains { 0x00, 0xb1, 0xba, 0x00 } + */ + unsigned char tmp[4] = { 0, /*0xb1, 0xba, 0x00*/ }; + /* Valgrind complains if 'output' is not initialized + * and the brittle RTTI (BABL_IS_BABL) produces a + * crash if it contains 0xbab100 + */ + unsigned int output = ~ 0xbab100; + unsigned int input = (i * 256 + i) * 256 + i; + + babl_process (babl_fish ("cairo-RGB24", "R'G'B' u8"), &input, &tmp[0], 1); + babl_process (babl_fish ("R'G'B' u8", "cairo-RGB24"), &tmp[0], &output, 1); + + if ((input & 0x00ffffff) != (output & 0x00ffffff)) + { + fprintf (stderr , "%08x -> %d %d %d -> %08x\n", + input, tmp[0], tmp[1], tmp[2], output); + OK = 0; + } + } + + return OK; +} + +static int +rgb_cairo24_rgb (void) +{ + int OK = 1, i; + + for (i = 0; i < 256; ++i) + { + /* As above */ + unsigned int tmp = ~ 0xbab100; + unsigned char output[4] = { 0x00, /*0xb1, 0xba, 0x00*/ }; + unsigned char input[4] = { i, i, i, 17 }; + + babl_process (babl_fish ("R'G'B' u8", "cairo-RGB24"), input, &tmp, 1); + babl_process (babl_fish ("cairo-RGB24", "R'G'B' u8"), &tmp, output, 1); + + if (input[0] != output[0] || input[1] != output[1] || input[2] != output[2]) + { + fprintf (stderr , "%d %d %d -> %08x -> %d %d %d\n", + input[0], input[1], input[2], tmp, output[0], output[1], output[2]); + OK = 0; + } + } + + return OK; +} + +int +main (void) +{ + int OK; + + babl_init (); + + OK = cairo24_rgb_cairo24 () && rgb_cairo24_rgb (); + + babl_exit (); + + return !OK; +} diff --git a/tests/common.inc b/tests/common.inc new file mode 100644 index 0000000..501644a --- /dev/null +++ b/tests/common.inc @@ -0,0 +1,27 @@ + +#include "babl/babl-introspect.h" + +#define CHECK_CONV(test_name, componenttype, src_fmt, dst_fmt, src_pix, expected_pix) \ + { \ + const Babl *fish; \ + int i; \ + fish = babl_fish (src_fmt, dst_fmt); \ + if (!fish) \ + { \ + printf (" %s failed to make fish\n", test_name); \ + OK = 0; \ + } \ + for (i = 0; i < sizeof(src_pix)/sizeof(src_pix[0]); i ++) \ + { \ + int c;\ + componenttype result[10]; \ + babl_process (fish, src_pix[i], result, 1); \ + for (c = 0; c < sizeof(expected_pix[i])/sizeof(expected_pix[i][0]); c++) \ + if (result[c] != expected_pix[i][c]) \ + { \ + printf (" %s failed #%i[%i] got %i expected %i\n", test_name, i, c, result[c], expected_pix[i][c]); \ + OK = 0; \ + babl_introspect((Babl *)fish); \ + } \ + } \ + } diff --git a/tests/concurrency-stress-test.c b/tests/concurrency-stress-test.c new file mode 100644 index 0000000..7832c23 --- /dev/null +++ b/tests/concurrency-stress-test.c @@ -0,0 +1,82 @@ +/* babl - dynamically extendable universal pixel conversion library. + * Copyright (C) 2009 Martin Nordholts + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, see + * . + */ + + +#include "config.h" + +#include +#include + +#include "babl.h" + + +#define N_THREADS 10 +#define N_ITERATIONS_PER_THREAD 100 + + +static void * +babl_fish_path_stress_test_thread_func (void *not_used) +{ + int i; + + for (i = 0; i < N_ITERATIONS_PER_THREAD; i++) + { + /* Try to get a fish with an as complex conversion path as + * possible + */ + const Babl *fish = babl_fish ("R'G'B'A u16", "YA double"); + + /* Just do something random with the fish */ + babl_get_name (fish); + } + + return NULL; +} + +int +main (int argc, + char **argv) +{ + pthread_t threads[N_THREADS]; + int i; + + babl_init (); + + /* Run a few threads at the same time */ + for (i = 0; i < N_THREADS; i++) + { + pthread_create (&threads[i], + NULL, /* attr */ + babl_fish_path_stress_test_thread_func, + NULL /* arg */); + } + + /* Wait for them all to finish */ + for (i = 0; i < N_THREADS; i++) + { + pthread_join (threads[i], + NULL /* thread_return */); + } + + babl_exit (); + + /* If we didn't crash we assume we're OK. We might want to add more + * asserts in the test later + */ + return 0; +} diff --git a/tests/conversions.c b/tests/conversions.c new file mode 100644 index 0000000..946bfb9 --- /dev/null +++ b/tests/conversions.c @@ -0,0 +1,37 @@ +/* perform a symmetricality of conversion test on a set of randomized + * RGBA data */ + +#include "config.h" +#include +#include +#include "babl-internal.h" + +#define ERROR_TOLERANCE 0.5 + +static int OK = 1; + +static int +each_conversion (Babl *babl, + void *userdata) +{ + double error = babl->conversion.error; + + if (error >= ERROR_TOLERANCE) + { + babl_log ("%s\terror:%f", babl->instance.name, error); + OK = 0; + } + return 0; +} + +int main (void) +{ + babl_init (); + + babl_set_extender (babl_extension_quiet_log ()); + babl_conversion_class_for_each (each_conversion, NULL); + + babl_exit (); + + return !OK; +} diff --git a/tests/extract.c b/tests/extract.c new file mode 100644 index 0000000..f27662b --- /dev/null +++ b/tests/extract.c @@ -0,0 +1,48 @@ +/* babl - dynamically extendable universal pixel conversion library. + * Copyright (C) 2005, Øyvind Kolås. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, see + * . + */ + +#include "config.h" +#include +#include +#include +#include "babl.h" +#include "common.inc" + +int +main (int argc, + char **argv) +{ + int OK = 1; + babl_init (); + { + unsigned char in[][4] = {{0,1,2,3 },{4,5,6,7 },{8,9,10,11 }}; + unsigned char out[][1] = { {2 }, {6} , {10} }; + + CHECK_CONV("extract B'", unsigned char, + babl_format("R'G'B'A u8"), + babl_format_new ("name", "B' u8", + babl_model ("R'G'B'A"), + babl_type ("u8"), + babl_component ("B'"), + NULL), + in, out); + } + + babl_exit (); + return !OK; +} diff --git a/tests/float-to-8bit.c b/tests/float-to-8bit.c new file mode 100644 index 0000000..a93591c --- /dev/null +++ b/tests/float-to-8bit.c @@ -0,0 +1,102 @@ +/* babl - dynamically extendable universal pixel conversion library. + * Copyright (C) 2005, Øyvind Kolås. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, see + * . + */ + +#include "config.h" +#include +#include +#include +#include "babl.h" + +#include "common.inc" + + +int +main (int argc, + char **argv) +{ + int OK = 1; + + babl_init (); + + //for (i = 0; i < 400000; i++) + { + { + float in[][4] = {{ 0.21582, -0.55, -0.14, 1.0 }, {0.2, 0.3, 0.5, 0.6}, {0.0, 1.0, 2.0, 3.0}}; + unsigned char out[][4] = {{ 55, 0, 0, 255 }, {51,77,128,153}, {0,255,255,255}}; + + CHECK_CONV("float -> u8 1", unsigned char, + babl_format("R'G'B'A float"), + babl_format("R'G'B'A u8"), + in, out); + } + + { + float in[][4] = {{ 0.21582, -0.55, -0.14, 1.0 }, {0.2, 0.3, 0.5, 0.6}, {0.0, 1.0, 2.0, 3.0}}; + unsigned char out[][4] = {{ 10, 0, 0, 255 }, {8,19,55,153}, {0,255,255,255}}; + + CHECK_CONV("float -> u8 2", unsigned char, + babl_format("R'G'B'A float"), + babl_format("RGBA u8"), + in, out); + } + + { + float in[][4] = {{ 0.21582, -0.55, -0.14, 1.0 }, {0.2, 0.3, 0.5, 0.6}, {0.0, 1.0, 2.0, 3.0}}; + unsigned char out[][4] = {{ 55, 0, 0, 255 }, {51,77,128,153}, {0,255,255,255}}; + + CHECK_CONV("float -> u8 3", unsigned char, + babl_format("RGBA float"), + babl_format("RGBA u8"), + in, out); + } + + { + float in[][4] = {{ 0.21582, -0.55, -0.14, 1.0 }, {0.2, 0.3, 0.5, 0.6}, {0.0, 1.0, 2.0, 3.0}}; + unsigned char out[][3] = {{128, 0, 0}, {124,149,188}, {0,255,255}}; + + CHECK_CONV("float -> u8 4", unsigned char, + babl_format("RGBA float"), + babl_format("R'G'B' u8"), + in, out); + } + + { + float in[][4] = {{ 0.21582, -0.55, -0.14, 1.0 }, {0.2, 0.3, 0.5, 0.6}, {0.0, 1.0, 2.0, 3.0}}; + unsigned char out[][4] = {{128, 0, 0, 255 }, {156,188,235,153}, {0,156,213,255}}; + + CHECK_CONV("float -> u8 5", unsigned char, + babl_format("RaGaBaA float"), + babl_format("R'G'B'A u8"), + in, out); + } + + { + /* (0.5 / 0.6) * 255 = 212.5, I'm not going to worry about rounding that close... */ + float in[][4] = {{ 0.21582, -0.55, -0.14, 1.0 }, {0.2, 0.301, 0.49998, 0.6}, {0.0, 3.0, 6.0, 3.0}}; + unsigned char out[][4] = {{55, 0, 0, 255 }, {85,128,212,153}, {0,255,255,255}}; + + CHECK_CONV("float -> u8 6", unsigned char, + babl_format("R'aG'aB'aA float"), + babl_format("R'G'B'A u8"), + in, out); + } + } + + babl_exit (); + return !OK; +} diff --git a/tests/floatclamp.c b/tests/floatclamp.c new file mode 100644 index 0000000..4ba7992 --- /dev/null +++ b/tests/floatclamp.c @@ -0,0 +1,46 @@ +/* babl - dynamically extendable universal pixel conversion library. + * Copyright (C) 2005, Øyvind Kolås. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, see + * . + */ + +#include "config.h" +#include +#include +#include +#include "babl.h" + +#include "common.inc" + + +int +main (int argc, + char **argv) +{ + int OK = 1; + babl_init (); + { + float in[][4] = {{ 0.21582, -0.55, -0.14, 1.0 }, {0.0, 1.0, 2.0, 3.0}}; + unsigned char out[][4] = {{ 55, 0, 0, 255 }, {0,255,255,255}}; + + CHECK_CONV("float -> u8", unsigned char, + babl_format("R'G'B'A float"), + babl_format("R'G'B'A u8"), + in, out); + } + + babl_exit (); + return !OK; +} diff --git a/tests/formats.c b/tests/formats.c new file mode 100644 index 0000000..8f481bb --- /dev/null +++ b/tests/formats.c @@ -0,0 +1,27 @@ +/* perform a symmetricality of conversion test on a set of randomized + * RGBA data */ + +#include "config.h" +#include +#include +#include "babl-internal.h" + + +static int format_check (Babl *babl, + void *userdata) +{ + babl_log ("%s\tloss: %f", babl->instance.name, babl->format.loss); + return 0; +} + +int main (void) +{ + babl_init (); + + babl_set_extender (babl_extension_quiet_log ()); + babl_format_class_for_each (format_check, (void *) 1); + + babl_exit (); + + return 0; +} diff --git a/tests/grayscale_to_rgb.c b/tests/grayscale_to_rgb.c new file mode 100644 index 0000000..7da0c86 --- /dev/null +++ b/tests/grayscale_to_rgb.c @@ -0,0 +1,86 @@ +/* babl - dynamically extendable universal pixel conversion library. + * Copyright (C) 2005, Øyvind Kolås. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, see + * . + */ + +#include "config.h" +#include "babl-internal.h" + +#define PIXELS 5 + +float grayscale_buf [PIXELS] = { -0.1, 0.0, 0.4, 1.0, 2.0 }; + +float rgb_buf_ref [PIXELS * 3] = +{ -0.1, -0.1, -0.1, 0.0, 0.0, 0.0, 0.4, 0.4, 0.4, 1.0, 1.0, 1.0, 2.0, 2.0, 2.0 }; + +float rgb_buf [PIXELS * 3]; + +static int +test (void) +{ + const Babl *fish; + int i; + int OK = 1; + + + fish = babl_fish ( + babl_format_new ( + babl_model ("Y"), + babl_type ("float"), + babl_component ("Y"), + NULL + ), + babl_format_new ( + babl_model ("RGB"), + babl_type ("float"), + babl_component ("R"), + babl_component ("G"), + babl_component ("B"), + NULL + ) + ); + + babl_process (fish, + grayscale_buf, rgb_buf, + PIXELS); + + for (i = 0; i < PIXELS * 3; i++) + { + if (rgb_buf[i] != rgb_buf_ref[i]) + { + babl_log ("index %i is problematic : %f instead of %f", + i, rgb_buf[i], rgb_buf_ref[i]); + OK = 0; + } + } + if (!OK) + return -1; + return 0; +} + +int +main (int argc, + char **argv) +{ + babl_init (); + if (test ()) + return -1; + babl_exit (); + return 0; +} + + + diff --git a/tests/hsl.c b/tests/hsl.c new file mode 100644 index 0000000..4b24db2 --- /dev/null +++ b/tests/hsl.c @@ -0,0 +1,111 @@ +/* babl - dynamically extendable universal pixel conversion library. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, see + * . + */ + +#include +#include + +#include "config.h" +#include "babl.h" + +#define CHECK_CONV(test_name, componenttype, src_fmt, dst_fmt, src_pix, expected_pix) \ + { \ + const Babl *fish; \ + int i; \ + fish = babl_fish (src_fmt, dst_fmt); \ + if (!fish) \ + { \ + printf (" %s failed to make fish\n", test_name); \ + OK = 0; \ + } \ + for (i = 0; i < sizeof(src_pix)/sizeof(src_pix[0]); i ++) \ + { \ + int c; \ + componenttype result[10]; \ + babl_process (fish, src_pix[i], result, 1); \ + for (c = 0; c < sizeof(expected_pix[i])/sizeof(expected_pix[i][0]); c++) \ + if (fabs(result[c] - expected_pix[i][c]) > 0.001) \ + { \ + printf (" %s failed #%i[%i] got %lf expected %lf\n", \ + test_name, i, c, result[c], expected_pix[i][c]); \ + OK = 0; \ + } \ + } \ + } + + +int +main (int argc, + char **argv) +{ + int OK = 1; + + float rgba[][4] = {{1.0 , 1.0 , 1.0 , 1.0}, + {0.214041, 0.214041, 0.214041, 1.0}, + {0.0 , 0.0 , 0.0 , 1.0}, + {1.0 , 0.0 , 0.0 , 1.0}, + {0.522519, 0.522519, 0.0 , 1.0}, + {0.0 , 0.214041, 0.0 , 1.0}, + {0.214041, 1.0 , 1.0 , 1.0}, + {0.214041, 0.214041, 1.0 , 1.0}, + {0.522520, 0.050876, 0.522521, 1.0}, + {0.353069, 0.372000, 0.017878, 1.0}, + {0.052772, 0.010679, 0.823194, 1.0}, + {0.012693, 0.414530, 0.052934, 1.0}, + {0.870621, 0.579515, 0.004228, 1.0}, + {0.453672, 0.029212, 0.781390, 1.0}, + {0.850554, 0.181933, 0.081839, 1.0}, + {0.995195, 0.941644, 0.244979, 1.0}, + {0.009836, 0.595745, 0.308242, 1.0}, + {0.036595, 0.019338, 0.315257, 1.0}, + {0.209470, 0.207646, 0.478434, 1.0}}; + + float hsla[][4] = {{0.0, 0.0 , 1.0 , 1.0}, + {0.0, 0.0 , 0.500, 1.0}, + {0.0, 0.0 , 0.0 , 1.0}, + {0.0, 1.0 , 0.500, 1.0}, + {0.166667, 1.0 , 0.375, 1.0}, + {0.333333, 1.0 , 0.250, 1.0}, + {0.5, 1.0 , 0.750, 1.0}, + {0.666666, 1.0 , 0.750, 1.0}, + {0.833333, 0.500, 0.500, 1.0}, + {0.171666, 0.638, 0.393, 1.0}, + {0.6975, 0.832, 0.511, 1.0}, + {0.374722, 0.707, 0.396, 1.0}, + {0.1375, 0.893, 0.497, 1.0}, + {0.788028, 0.775, 0.542, 1.0}, + {0.039837, 0.817, 0.624, 1.0}, + {0.158083, 0.991, 0.765, 1.0}, + {0.451149, 0.779, 0.447, 1.0}, + {0.689732, 0.601, 0.373, 1.0}, + {0.668129, 0.290, 0.607, 1.0}}; + + babl_init (); + + CHECK_CONV ("rgba to hsla ", float, + babl_format ("RGBA float"), + babl_format ("HSLA float"), + rgba, hsla); + + CHECK_CONV ("hsla to rgba ", float, + babl_format ("HSLA float"), + babl_format ("RGBA float"), + hsla, rgba); + + babl_exit (); + + return !OK; +} diff --git a/tests/hsva.c b/tests/hsva.c new file mode 100644 index 0000000..a29f506 --- /dev/null +++ b/tests/hsva.c @@ -0,0 +1,116 @@ +/* babl - dynamically extendable universal pixel conversion library. + * Copyright (C) 2012, Maxime Nicco + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, see + * . + */ + + /* + * Adding test fo hsva colorspace + * + * The test is at 0.001 precision + */ + +#include "config.h" +#include +#include +#include +#include +#include "babl.h" + +#define CHECK_CONV(test_name, componenttype, src_fmt, dst_fmt, src_pix, expected_pix) \ + { \ + const Babl *fish; \ + int i; \ + fish = babl_fish (src_fmt, dst_fmt); \ + if (!fish) \ + { \ + printf (" %s failed to make fish\n", test_name); \ + OK = 0; \ + } \ + for (i = 0; i < sizeof(src_pix)/sizeof(src_pix[0]); i ++) \ + { \ + int c;\ + componenttype result[10]; \ + babl_process (fish, src_pix[i], result, 1); \ + for (c = 0; c < sizeof(expected_pix[i])/sizeof(expected_pix[i][0]); c++) \ + if (fabs(result[c] - expected_pix[i][c]) > 0.001) \ + { \ + printf (" %s failed #%i[%i] got %lf expected %lf\n", test_name, i, c, result[c], expected_pix[i][c]); \ + OK = 0; \ + } \ + } \ + } + + +int +main (int argc, + char **argv) +{ + int OK = 1; + + float rgba[][4] = {{ 1.0, 1.0, 1.0, 1.0 }, + { 0.2140, 0.2140, 0.2140, 1.0 }, + { 0, 0, 0, 1.0 }, + { 1, 0, 0, 1.0 }, + { 0.5209, 0.5225, 0, 1.0 }, + { 0, 0.2140, 0, 1.0 }, + { 0.2140, 1, 1, 1.0 }, + { 0.2140, 0.2140, 1, 1.0 }, + { 0.5215, 0.0508, 0.5225, 1.0 }, + { 0.3509, 0.3710, 0.0178, 1.0 }, + { 0.0533, 0.0106, 0.8235, 1.0 }, + { 0.0126, 0.4132, 0.0529, 1.0 }, + { 0.8709, 0.5754, 0.0042, 1.0 }, + { 0.4537, 0.0291, 0.7814, 1.0 }, + { 0.8501, 0.1813, 0.0814, 1.0 }, + { 0.9954, 0.9418, 0.2448, 1.0 }, + { 0.0099, 0.5953, 0.3081, 1.0 }, + { 0.0366, 0.0193, 0.3150, 1.0 }}; + + float hsva[][4] = {{ 0.0, 0.0, 1.0, 1.0 }, + { 0.0, 0.0, 0.5, 1.0 }, + { 0.0, 0.0, 0.0, 1.0 }, + { 0.0, 1.0, 1.0, 1.0 }, + { 0.167, 1.0, 0.75, 1.0 }, + { 0.333, 1.0, 0.5, 1.0 }, + { 0.5, 0.5, 1.0, 1.0 }, + { 0.667, 0.5, 1.0, 1.0 }, + { 0.833, 0.666, 0.75, 1.0 }, + { 0.172, 0.779, 0.643, 1.0 }, + { 0.698, 0.887, 0.918, 1.0 }, + { 0.375, 0.828, 0.675, 1.0 }, + { 0.137, 0.944, 0.941, 1.0 }, + { 0.788, 0.792, 0.897, 1.0 }, + { 0.040, 0.661, 0.931, 1.0 }, + { 0.158, 0.467, 0.998, 1.0 }, + { 0.451, 0.875, 0.795, 1.0 }, + { 0.690, 0.75, 0.597, 1.0 }}; + + babl_init (); + + CHECK_CONV ("rgba to hsva ", float, + babl_format ("RGBA float"), + babl_format ("HSVA float"), + rgba, hsva); + + CHECK_CONV ("hsva to rgba ", float, + babl_format ("HSVA float"), + babl_format ("RGBA float"), + hsva, rgba); + + babl_exit (); + + return !OK; +} diff --git a/tests/introspect.c b/tests/introspect.c new file mode 100644 index 0000000..b52ed9f --- /dev/null +++ b/tests/introspect.c @@ -0,0 +1,30 @@ +/* babl - dynamically extendable universal pixel conversion library. + * Copyright (C) 2005, Øyvind Kolås. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, see + * . + */ + +#include "config.h" +#include "babl-internal.h" + +int +main (int argc, + char **argv) +{ + babl_init (); + babl_introspect (NULL); + babl_exit (); + return 0; +} diff --git a/tests/models.c b/tests/models.c new file mode 100644 index 0000000..2920c2f --- /dev/null +++ b/tests/models.c @@ -0,0 +1,34 @@ +/* perform a symmetricality of conversion test on a set of randomized + * RGBA data */ + +#include "config.h" +#include +#include +#include "babl-internal.h" + +int OK = 1; + + +static int model_check (Babl *babl, + void *userdata) +{ + if (!babl_model_is_symmetric (babl)) + { + babl_log ("%s is not symmetric", babl->instance.name); + OK = 0; + } + return 0; +} + + +int main (void) +{ + babl_init (); + + babl_set_extender (babl_extension_quiet_log ()); + babl_model_class_for_each (model_check, NULL); + + babl_exit (); + + return !OK; +} diff --git a/tests/n_components.c b/tests/n_components.c new file mode 100644 index 0000000..0d62e7d --- /dev/null +++ b/tests/n_components.c @@ -0,0 +1,116 @@ +/* babl - dynamically extendable universal pixel conversion library. + * Copyright (C) 2005, Øyvind Kolås. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, see + * . + */ + + +#include "config.h" +#include +#include "babl-internal.h" + +#define PIXELS 7 +#define COMPONENTS 2048 +#define TOLERANCE 0 + +float source_buf [PIXELS * COMPONENTS] = +{ + 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, + 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, + 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, + 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, + 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, + 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, + 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, + 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, + 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, + 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, + 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, + 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, + 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, + 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, + 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, + 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, + /* the rest of the input buffer is nulls */ +}; + +unsigned char reference_buf [PIXELS * COMPONENTS] = +{ + 26, 51, 77, 102, 128, 153, 26, 51, 77, 102, 128, 153, + 26, 51, 77, 102, 128, 153, 26, 51, 77, 102, 128, 153, + 26, 51, 77, 102, 128, 153, 26, 51, 77, 102, 128, 153, + 26, 51, 77, 102, 128, 153, 26, 51, 77, 102, 128, 153, + 26, 51, 77, 102, 128, 153, 26, 51, 77, 102, 128, 153, + 26, 51, 77, 102, 128, 153, 26, 51, 77, 102, 128, 153, + 26, 51, 77, 102, 128, 153, 26, 51, 77, 102, 128, 153, + 26, 51, 77, 102, 128, 153, 26, 51, 77, 102, 128, 153, + 26, 51, 77, 102, 128, 153, 26, 51, 77, 102, 128, 153, + 26, 51, 77, 102, 128, 153, 26, 51, 77, 102, 128, 153, + 26, 51, 77, 102, 128, 153, 26, 51, 77, 102, 128, 153, + 26, 51, 77, 102, 128, 153, 26, 51, 77, 102, 128, 153, + 26, 51, 77, 102, 128, 153, 26, 51, 77, 102, 128, 153, + 26, 51, 77, 102, 128, 153, 26, 51, 77, 102, 128, 153, + 26, 51, 77, 102, 128, 153, 26, 51, 77, 102, 128, 153, + 26, 51, 77, 102, 128, 153, 26, 51, 77, 102, 128, 153, + /* the rest of the reference buffer is nulls */ +}; + +unsigned char destination_buf [PIXELS * COMPONENTS]; + +static int +test (void) +{ + int components; + int OK = 1; + + for (components = 1; components < 2048; components ++) + { + const Babl *fish; + const Babl *src_fmt; + const Babl *dst_fmt; + int i; + + src_fmt = babl_format_n (babl_type ("float"), components); + dst_fmt = babl_format_n (babl_type ("u8"), components); + + fish = babl_fish (src_fmt, dst_fmt); + + babl_process (fish, source_buf, destination_buf, PIXELS); + + for (i = 0; i < PIXELS * components; i++) + { + if (abs (destination_buf[i] - reference_buf[i]) > TOLERANCE) + { + babl_log ("%i-components, pixel %i component %i is %i should be %i", + components, i / components, i % components, destination_buf[i], reference_buf[i]); + OK = 0; + } + } + } + if (!OK) + return -1; + return 0; +} + +int +main (int argc, + char **argv) +{ + babl_init (); + if (test ()) + return -1; + babl_exit (); + return 0; +} diff --git a/tests/n_components_cast.c b/tests/n_components_cast.c new file mode 100644 index 0000000..4bb7d29 --- /dev/null +++ b/tests/n_components_cast.c @@ -0,0 +1,97 @@ +/* babl - dynamically extendable universal pixel conversion library. + * Copyright (C) 2005, Øyvind Kolås. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, see + * . + */ + +#include "config.h" +#include +#include +#include +#include "babl.h" +#include "common.inc" + +int +main (int argc, + char **argv) +{ + int OK = 1; + babl_init (); + { + unsigned char in[][4] = {{0,1,2,3 },{4,5,6,7 },{8,9,10,11 }}; + unsigned char out1[][1] = {{0}, {4}, {8} }; + unsigned char out2[][2] = {{0,1}, {4,5}, {8,9} }; + unsigned char out4[][4] = {{0,1,2,3}, {4,5,6,7}, {8,9,10,11} }; + unsigned char out5[][5] = {{0,1,2,3,0}, {4,5,6,7,0},{8,9,10,11,0} }; + + CHECK_CONV("RGBAu8 to n1'", unsigned char, + babl_format("R'G'B'A u8"), + babl_format_n (babl_type ("u8"), 1), + in, out1); + + CHECK_CONV("RGBAu8 to n2'", unsigned char, + babl_format("R'G'B'A u8"), + babl_format_n (babl_type ("u8"), 2), + in, out2); + + CHECK_CONV("RGBAu8 to n4'", unsigned char, + babl_format("R'G'B'A u8"), + babl_format_n (babl_type ("u8"), 4), + in, out4); + + CHECK_CONV("RGBAu8 to n5'", unsigned char, + babl_format("R'G'B'A u8"), + babl_format_n (babl_type ("u8"), 5), + in, out5); + } + { + unsigned char in[][3] = {{0,1,2 },{4,5,6 },{8,9,10 }}; + unsigned char out1[][1] = {{0}, {4}, {8} }; + unsigned char out2[][2] = {{0,1}, {4,5}, {8,9} }; + unsigned char out4[][4] = {{0,1,2,0}, {4,5,6,0}, {8,9,10,0} }; + unsigned char out5[][5] = {{0,1,2,0,0}, {4,5,6,0,0},{8,9,10,0,0} }; + unsigned char out6[][6] = {{0,1,2,0,0,0}, {4,5,6,0,0,0},{8,9,10,0,0,0} }; + + CHECK_CONV("RGBu8 to n1'", unsigned char, + babl_format("R'G'B' u8"), + babl_format_n (babl_type ("u8"), 1), + in, out1); + + + CHECK_CONV("RGBu8 to n2'", unsigned char, + babl_format("R'G'B' u8"), + babl_format_n (babl_type ("u8"), 2), + in, out2); + + + CHECK_CONV("RGBu8 to n4'", unsigned char, + babl_format("R'G'B' u8"), + babl_format_n (babl_type ("u8"), 4), + in, out4); + + CHECK_CONV("RGBu8 to n5'", unsigned char, + babl_format("R'G'B' u8"), + babl_format_n (babl_type ("u8"), 5), + in, out5); + + CHECK_CONV("RGBu8 to n6'", unsigned char, + babl_format("R'G'B' u8"), + babl_format_n (babl_type ("u8"), 6), + in, out6); + } + + babl_exit (); + return !OK; +} diff --git a/tests/nop.c b/tests/nop.c new file mode 100644 index 0000000..7d79dc4 --- /dev/null +++ b/tests/nop.c @@ -0,0 +1,29 @@ +/* babl - dynamically extendable universal pixel conversion library. + * Copyright (C) 2005, Øyvind Kolås. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, see + * . + */ + +#include "config.h" +#include "babl.h" + +int +main (int argc, + char **argv) +{ + babl_init (); + babl_exit (); + return 0; +} diff --git a/tests/palette.c b/tests/palette.c new file mode 100644 index 0000000..8519262 --- /dev/null +++ b/tests/palette.c @@ -0,0 +1,152 @@ +/* babl - dynamically extendable universal pixel conversion library. + * Copyright (C) 2005, Øyvind Kolås. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, see + * . + */ + +#include "config.h" +#include +#include +#include +#include "babl.h" +#include "common.inc" + +int +main (int argc, + char **argv) +{ + int OK = 1; + babl_init (); + OK = ! babl_format_is_palette (babl_format_n (babl_type ("double"), 3)); + if(1){ + unsigned char in[][1] = {{ 0},{ 1},{ 2},{15}}; + unsigned char out[][4] = {{0,0,0,255},{127,0,0,255},{0,127,0,255},{255,255,255,255}}; + const Babl *palA;// = babl_new_palette (NULL, 0); + //Babl *palB = babl_new_palette (NULL, 0); + // + babl_new_palette (NULL, &palA, NULL); + assert (palA); + + CHECK_CONV("pal to rgba", unsigned char, + palA, babl_format("RGBA u8"), + in, out); + } + if(0){ + unsigned char in[][2] = {{ 0,255},{ 1,255},{ 2,255},{15,200}}; + unsigned char out[][4] = {{0,0,0,255},{127,0,0,255},{0,127,0,255},{255,255,255,255}}; + const Babl *palA;// = babl_new_palette (NULL, 0); + //Babl *palB = babl_new_palette (NULL, 0); + // + babl_new_palette (NULL, NULL, &palA); + assert (palA); + + CHECK_CONV("pal to rgba", unsigned char, + palA, babl_format("RGBA u8"), + in, out); + +#if 0 + CHECK_CONV("pal to rgba", unsigned char, + palB, babl_format("RGBA u8"), + in, out); + + CHECK_CONV("pal to rgba", unsigned char, + palA, babl_format("RGBA u8"), + in, out); +#endif + } +#if 0 + { + unsigned char in[][4] = {{0,0,0,255},{140,0,0,255},{0,127,0,255}}; + unsigned char out[][1] = {{ 0},{ 1},{ 2}}; + + CHECK_CONV("rgba to pal", unsigned char, + babl_format("RGBA u8"), babl_new_palette ("palC", 0), + in, out); + } + + { + unsigned char in[][4] = {{0,0,0,255},{140,0,0,255},{0,127,0,127}}; + unsigned char out[][2] = {{ 0,255},{ 1,255},{ 2,127}}; + + CHECK_CONV("rgba to pal+alpha", unsigned char, + babl_format("RGBA u8"), babl_new_palette ("palD", 1), + in, out); + } + + /* check with a custom floating point palette, _and_ alpha component */ + { + float palette[] = { + 0.5, 1.0, + 0.23, 0.42, + 1.0, 0.2 + }; + + unsigned char in[][2] = {{ 0,255},{0,127},{ 1,255},{ 2,255}}; + unsigned char out[][4] = {{128,128,128,255},{128,128,128,127},{59,59,59,107},{255,255,255,51}}; + + Babl *pal = babl_new_palette (NULL, 1); + + babl_palette_set_palette (pal, babl_format ("YA float"), palette, 3); + + CHECK_CONV("rgba to YA float pal+alpha", unsigned char, + pal, babl_format("RGBA u8"), + in, out); + } + + + /* check with a custom floating point palette, _and_ alpha component */ + { + float palette[] = { + 0.5, 1.0, + 0.23, 0.42, + 1.0, 0.2 + }; + + unsigned char in[][2] = {{ 0,255},{0,127},{ 1,255},{ 2,255}}; + unsigned char out[][4] = {{128,128,128,255},{128,128,128,127},{59,59,59,107},{255,255,255,51}}; + + Babl *pal = babl_new_palette (NULL, 1); + + babl_palette_set_palette (pal, babl_format ("YA float"), palette, 3); + + CHECK_CONV("rgba to YA float pal+alpha", unsigned char, + pal, babl_format("RGBA u8"), + in, out); + } + + /* check with a custom floating point palette */ + { + float palette[] = { + 0.5, 1.0, + 0.23, 0.42, + 1.0, 0.2 + }; + + unsigned char in[][1] = {{ 0},{ 1},{ 2}}; + unsigned char out[][4] = {{128,128,128,255},{59,59,59,107},{255,255,255,51}}; + + Babl *pal = babl_new_palette (NULL, 0); + + babl_palette_set_palette (pal, babl_format ("YA float"), palette, 3); + + CHECK_CONV("rgba to float pal", unsigned char, + pal, babl_format("RGBA u8"), + in, out); + } +#endif + + babl_exit (); + return !OK; +} diff --git a/tests/rgb_to_bgr.c b/tests/rgb_to_bgr.c new file mode 100644 index 0000000..60fee1f --- /dev/null +++ b/tests/rgb_to_bgr.c @@ -0,0 +1,90 @@ +/* babl - dynamically extendable universal pixel conversion library. + * Copyright (C) 2005, Øyvind Kolås. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, see + * . + */ + + +#include "config.h" +#include +#include "babl-internal.h" + +#define PIXELS 3 +#define TOLERANCE 0 + +unsigned char source_buf [PIXELS * 3] = +{ 10, 20, 30, + 30, 30, 30, + 40, 50, 60 }; + +unsigned char reference_buf [PIXELS * 3] = +{ 30, 20, 10, + 30, 30, 30, + 60, 50, 40 }; + +unsigned char destination_buf [PIXELS * 3]; + +static int +test (void) +{ + const Babl *fish; + int i; + int OK = 1; + + fish = babl_fish ( + babl_format_new ( + babl_model ("RGB"), + babl_type ("u8"), + babl_component ("R"), + babl_component ("G"), + babl_component ("B"), + NULL + ), + babl_format_new ( + babl_model ("RGB"), + babl_type ("u8"), + babl_component ("B"), + babl_component ("G"), + babl_component ("R"), + NULL + ) + ); + + babl_process (fish, source_buf, destination_buf, PIXELS); + + for (i = 0; i < PIXELS * 3; i++) + { + if (abs (destination_buf[i] - reference_buf[i]) > TOLERANCE) + { + babl_log ("%2i (%2i%%3=%i, %2i/3=%i) is %i should be %i", + i, i, i % 3, i, i / 3, destination_buf[i], reference_buf[i]); + OK = 0; + } + } + if (!OK) + return -1; + return 0; +} + +int +main (int argc, + char **argv) +{ + babl_init (); + if (test ()) + return -1; + babl_exit (); + return 0; +} diff --git a/tests/rgb_to_ycbcr.c b/tests/rgb_to_ycbcr.c new file mode 100644 index 0000000..49ddee3 --- /dev/null +++ b/tests/rgb_to_ycbcr.c @@ -0,0 +1,97 @@ +/* babl - dynamically extendable universal pixel conversion library. + * Copyright (C) 2005, Øyvind Kolås. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, see + * . + */ + + +#include "config.h" +#include +#include "babl-internal.h" + +#define PIXELS 6 +#define TOLERANCE 0.000001 + +float source_buf [PIXELS * 3] = +{ 0.0, 0.0, 0.0, + 0.5, 0.5, 0.5, + 1.0, 1.0, 1.0, + 1.0, 0.0, 0.0, + 0.0, 1.0, 0.0, + 0.0, 0.0, 1.0 }; + +float reference_buf [PIXELS * 3] = +{ 0.0, 0.0, 0.0, + 0.735357, 0.0, 0.0, + 1.0, 0.0, 0.0, + 0.299, -0.168736, 0.5, + 0.587, -0.331264, -0.418688, + 0.114, 0.5, -0.081312 }; + + +float destination_buf [PIXELS * 3]; + +static int +test (void) +{ + const Babl *fish; + int i; + int OK = 1; + + fish = babl_fish ( + babl_format_new ( + babl_model ("RGB"), + babl_type ("float"), + babl_component ("R"), + babl_component ("G"), + babl_component ("B"), + NULL + ), + babl_format_new ( + babl_model ("Y'CbCr"), + babl_type ("float"), + babl_component ("Y'"), + babl_component ("Cb"), + babl_component ("Cr"), + NULL + ) + ); + + babl_process (fish, source_buf, destination_buf, PIXELS); + + for (i = 0; i < PIXELS * 3; i++) + { + if (fabs (destination_buf[i] - reference_buf[i]) > TOLERANCE) + { + babl_log ("%2i (%2i%%3=%i, %2i/3=%i) is %f should be %f", + i, i, i % 3, i, i / 3, destination_buf[i], reference_buf[i]); + OK = 0; + } + } + if (!OK) + return -1; + return 0; +} + +int +main (int argc, + char **argv) +{ + babl_init (); + if (test ()) + return -1; + babl_exit (); + return 0; +} diff --git a/tests/sanity.c b/tests/sanity.c new file mode 100644 index 0000000..d0141c8 --- /dev/null +++ b/tests/sanity.c @@ -0,0 +1,31 @@ +/* babl - dynamically extendable universal pixel conversion library. + * Copyright (C) 2005, Øyvind Kolås. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, see + * . + */ + +#include "config.h" +#include "babl-internal.h" + +int +main (int argc, + char **argv) +{ + babl_init (); + if (!babl_sanity ()) + return -1; + babl_exit (); + return 0; +} diff --git a/tests/srgb_to_lab_u8.c b/tests/srgb_to_lab_u8.c new file mode 100644 index 0000000..8585645 --- /dev/null +++ b/tests/srgb_to_lab_u8.c @@ -0,0 +1,77 @@ +/* babl - dynamically extendable universal pixel conversion library. + * Copyright (C) 2005, Øyvind Kolås. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, see + * . + */ + +#include "config.h" +#include +#include "babl-internal.h" + +#define PIXELS 6 +#define TOLERANCE 0 + +unsigned char source_buf [PIXELS * 3] = +{ 0, 0, 0, + 127, 127, 127, + 255, 255, 255, + 255, 0.0, 0.0, + 0.0, 255, 0.0, + 0.0, 0.0, 255 }; + +unsigned char reference_buf [PIXELS * 3] = +{ 0, 128, 128, + 136, 128, 128, + 255, 128, 128, + 138, 209, 198, + 224, 49, 209, + 75, 196, 16 }; + +unsigned char destination_buf [PIXELS * 3]; + +static int +test (void) +{ + int i; + int OK = 1; + + babl_process (babl_fish ("R'G'B' u8", "CIE Lab u8"), + source_buf, destination_buf, + PIXELS); + + for (i = 0; i < PIXELS * 3; i++) + { + if (abs (destination_buf[i] - reference_buf[i]) > TOLERANCE) + { + babl_log ("%2i (%2i%%3=%i, %2i/3=%i) is %i should be %i", + i, i, i % 3, i, i / 3, destination_buf[i], reference_buf[i]); + OK = 0; + } + } + if (!OK) + return -1; + return 0; +} + +int +main (int argc, + char **argv) +{ + babl_init (); + if (test ()) + return -1; + babl_exit (); + return 0; +} diff --git a/tests/types.c b/tests/types.c new file mode 100644 index 0000000..1b86cea --- /dev/null +++ b/tests/types.c @@ -0,0 +1,28 @@ +#include "config.h" +#include +#include "babl-internal.h" + +int OK = 1; + +static int type_check (Babl *babl, + void *userdata) +{ + if (!babl_type_is_symmetric (babl)) + { + babl_log ("%s is not symmetric", babl->instance.name); + OK = 0; + } + return 0; +} + +int main (void) +{ + babl_init (); + + babl_set_extender (babl_extension_quiet_log ()); + babl_type_class_for_each (type_check, NULL); + + babl_exit (); + + return !OK; +} diff --git a/tools/Makefile.am b/tools/Makefile.am new file mode 100644 index 0000000..ad54455 --- /dev/null +++ b/tools/Makefile.am @@ -0,0 +1,9 @@ +AM_CPPFLAGS = -I$(top_srcdir) -I$(top_srcdir)/babl + +LDADD = $(top_builddir)/babl/libbabl-@BABL_API_VERSION@.la \ + $(MATH_LIB) $(THREAD_LIB) + +if HAVE_SRANDOM +noinst_PROGRAMS = \ + babl-gen-test-pixels +endif diff --git a/tools/Makefile.in b/tools/Makefile.in new file mode 100644 index 0000000..3cb80b4 --- /dev/null +++ b/tools/Makefile.in @@ -0,0 +1,622 @@ +# Makefile.in generated by automake 1.15 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2014 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +VPATH = @srcdir@ +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +@HAVE_SRANDOM_TRUE@noinst_PROGRAMS = babl-gen-test-pixels$(EXEEXT) +subdir = tools +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(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)/acinclude.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +PROGRAMS = $(noinst_PROGRAMS) +babl_gen_test_pixels_SOURCES = babl-gen-test-pixels.c +babl_gen_test_pixels_OBJECTS = babl-gen-test-pixels.$(OBJEXT) +babl_gen_test_pixels_LDADD = $(LDADD) +am__DEPENDENCIES_1 = +babl_gen_test_pixels_DEPENDENCIES = \ + $(top_builddir)/babl/libbabl-@BABL_API_VERSION@.la \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) +AM_V_lt = $(am__v_lt_@AM_V@) +am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) +am__v_lt_0 = --silent +am__v_lt_1 = +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_@AM_V@) +am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) +am__v_CC_0 = @echo " CC " $@; +am__v_CC_1 = +CCLD = $(CC) +LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_@AM_V@) +am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) +am__v_CCLD_0 = @echo " CCLD " $@; +am__v_CCLD_1 = +SOURCES = babl-gen-test-pixels.c +DIST_SOURCES = babl-gen-test-pixels.c +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +ETAGS = etags +CTAGS = ctags +am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALTIVEC_EXTRA_CFLAGS = @ALTIVEC_EXTRA_CFLAGS@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BABL_API_VERSION = @BABL_API_VERSION@ +BABL_BINARY_AGE = @BABL_BINARY_AGE@ +BABL_CURRENT_MINUS_AGE = @BABL_CURRENT_MINUS_AGE@ +BABL_INTERFACE_AGE = @BABL_INTERFACE_AGE@ +BABL_LIBRARY_VERSION = @BABL_LIBRARY_VERSION@ +BABL_MAJOR_VERSION = @BABL_MAJOR_VERSION@ +BABL_MICRO_VERSION = @BABL_MICRO_VERSION@ +BABL_MINOR_VERSION = @BABL_MINOR_VERSION@ +BABL_REAL_VERSION = @BABL_REAL_VERSION@ +BABL_RELEASE = @BABL_RELEASE@ +BABL_UNSTABLE = @BABL_UNSTABLE@ +BABL_VERSION = @BABL_VERSION@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DIR_SEP = @DIR_SEP@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F16C_EXTRA_CFLAGS = @F16C_EXTRA_CFLAGS@ +FGREP = @FGREP@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MATH_LIB = @MATH_LIB@ +MKDIR_P = @MKDIR_P@ +MMX_EXTRA_CFLAGS = @MMX_EXTRA_CFLAGS@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEP = @PATH_SEP@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +RANLIB = @RANLIB@ +RSVG = @RSVG@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SHREXT = @SHREXT@ +SSE2_EXTRA_CFLAGS = @SSE2_EXTRA_CFLAGS@ +SSE4_1_EXTRA_CFLAGS = @SSE4_1_EXTRA_CFLAGS@ +SSE_EXTRA_CFLAGS = @SSE_EXTRA_CFLAGS@ +STRIP = @STRIP@ +THREAD_LIB = @THREAD_LIB@ +VERSION = @VERSION@ +W3M = @W3M@ +WEBSITE_HOST = @WEBSITE_HOST@ +WEBSITE_LOCATION = @WEBSITE_LOCATION@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +AM_CPPFLAGS = -I$(top_srcdir) -I$(top_srcdir)/babl +LDADD = $(top_builddir)/babl/libbabl-@BABL_API_VERSION@.la \ + $(MATH_LIB) $(THREAD_LIB) + +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign tools/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign tools/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +clean-noinstPROGRAMS: + @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \ + echo " rm -f" $$list; \ + rm -f $$list || exit $$?; \ + test -n "$(EXEEXT)" || exit 0; \ + list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ + echo " rm -f" $$list; \ + rm -f $$list + +babl-gen-test-pixels$(EXEEXT): $(babl_gen_test_pixels_OBJECTS) $(babl_gen_test_pixels_DEPENDENCIES) $(EXTRA_babl_gen_test_pixels_DEPENDENCIES) + @rm -f babl-gen-test-pixels$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(babl_gen_test_pixels_OBJECTS) $(babl_gen_test_pixels_LDADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/babl-gen-test-pixels.Po@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< + +.c.obj: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-am +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ + here=`pwd`; \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: ctags-am + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscopelist: cscopelist-am + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(PROGRAMS) +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \ + mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ + clean-libtool clean-noinstPROGRAMS cscopelist-am ctags \ + ctags-am distclean distclean-compile distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags tags-am uninstall uninstall-am + +.PRECIOUS: Makefile + + +# 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. +.NOEXPORT: diff --git a/tools/babl-gen-test-pixels.c b/tools/babl-gen-test-pixels.c new file mode 100644 index 0000000..0231224 --- /dev/null +++ b/tools/babl-gen-test-pixels.c @@ -0,0 +1,170 @@ +/* babl - dynamically extendable universal pixel conversion library. + * Copyright (C) 2005 Øyvind Kolås + * 2013 Daniel Sabo + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, see + * . + */ + +#include +#include + +#define BABL_PATH_NUM_TEST_PIXELS 3072 +#define BABL_CONVERSION_NUM_TEST_PIXELS 128 +#define BABL_FROMAT_NUM_TEST_PIXELS 256 +#define BABL_MODEL_NUM_TEST_PIXELS 512 +#define BABL_TYPE_NUM_TEST_PIXELS 512 + +static double rand_double (void) +{ + return (double) random () / RAND_MAX; +} + +static double rand_range_double (double min, double max) +{ + return rand_double () * (max - min) + min; +} + +static void gen_path_pixels (void) +{ + int i; + srandom (20050728); + + printf ("static const int babl_num_path_test_pixels = %d;\n\n", BABL_PATH_NUM_TEST_PIXELS); + + printf ("static const double babl_path_test_pixels[%d] = {\n", BABL_PATH_NUM_TEST_PIXELS * 4); + + /* add 128 pixels in the valid range between 0.0 and 1.0 */ + for (i = 0; i < 256; i++) + { + printf ("%a, %a, %a, %a,\n", + rand_double (), + rand_double (), + rand_double (), + rand_double ()); + } + + /* add 16 pixels between -1.0 and 0.0 */ + for (i = 0; i < 16; i++) + { + printf ("%a, %a, %a, %a,\n", + rand_range_double (-1.0, 0.0), + rand_range_double (-1.0, 0.0), + rand_range_double (-1.0, 0.0), + rand_range_double (-1.0, 0.0)); + } + + /* add 16 pixels between 1.0 and 2.0 */ + for (i = 0; i < 16; i++) + { + printf ("%a, %a, %a, %a,\n", + rand_range_double (1.0, 2.0), + rand_range_double (1.0, 2.0), + rand_range_double (1.0, 2.0), + rand_range_double (1.0, 2.0)); + } + + for (i = 288; i < BABL_PATH_NUM_TEST_PIXELS; i++) + { + printf ("%a, %a, %a, %a,\n", + rand_double (), + rand_double (), + rand_double (), + rand_double ()); + } + + printf ("};\n\n"); + + printf ("static const int babl_num_conversion_test_pixels = %d;\n\n", BABL_CONVERSION_NUM_TEST_PIXELS); + + printf ("static const double *babl_conversion_test_pixels = babl_path_test_pixels;\n\n"); + + printf ("static const int babl_num_format_test_pixels = %d;\n\n", BABL_FROMAT_NUM_TEST_PIXELS); + + printf ("static const double *babl_format_test_pixels = babl_path_test_pixels;\n\n"); +} + +static void gen_model_pixels (void) +{ + int i; + srandom (20050728); + + printf ("static const int babl_num_model_test_pixels = %d;\n\n", BABL_MODEL_NUM_TEST_PIXELS); + + printf ("static const double babl_model_test_pixels[%d] = {\n", BABL_MODEL_NUM_TEST_PIXELS * 4); + + /* add 128 pixels in the valid range between 0.0 and 1.0 */ + for (i = 0; i < BABL_MODEL_NUM_TEST_PIXELS; i++) + { + printf ("%a, %a, %a, %a,\n", + rand_range_double (-0.2, 1.2), + rand_range_double (-0.2, 1.2), + rand_range_double (-0.2, 1.2), + rand_range_double (-0.2, 1.2)); + } + + printf ("};\n\n"); +} + +static void gen_type_pixels (void) +{ + int i; + srandom (20050728); + + printf ("static const int babl_num_type_test_pixels = %d;\n\n", BABL_TYPE_NUM_TEST_PIXELS); + + printf ("static const double babl_type_test_pixels[%d] = {\n", BABL_TYPE_NUM_TEST_PIXELS * 4); + + /* add 128 pixels in the valid range between 0.0 and 1.0 */ + for (i = 0; i < BABL_MODEL_NUM_TEST_PIXELS; i++) + { + printf ("%a, %a, %a, %a,\n", + rand_range_double (0.0, 128.0), + rand_range_double (0.0, 128.0), + rand_range_double (0.0, 128.0), + rand_range_double (0.0, 128.0)); + } + + printf ("};\n\n"); +} + +int main (int argc, char **argv) +{ + printf ( + "/* babl - dynamically extendable universal pixel conversion library.\n" + " * Copyright (C) 2005 Øyvind Kolås\n" + " * 2013 Daniel Sabo\n" + " *\n" + " * This library is free software; you can redistribute it and/or\n" + " * modify it under the terms of the GNU Lesser General Public\n" + " * License as published by the Free Software Foundation; either\n" + " * version 3 of the License, or (at your option) any later version.\n" + " *\n" + " * This library is distributed in the hope that it will be useful,\n" + " * but WITHOUT ANY WARRANTY; without even the implied warranty of\n" + " * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n" + " * Lesser General Public License for more details.\n" + " *\n" + " * You should have received a copy of the GNU Lesser General\n" + " * Public License along with this library; if not, see\n" + " * .\n" + " */\n" + "\n"); + + printf ("/* THIS IS A GENERATED FILE - DO NOT EDIT */\n\n"); + + gen_path_pixels (); + gen_model_pixels (); + gen_type_pixels (); +} \ No newline at end of file