summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2018-05-11 16:54:58 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2018-05-11 16:54:58 +0000
commitb550f8da713fafbcc6373af65d7ab0f46b7f26c8 (patch)
tree08b28b131f0d7b8bb737d055b949fdcef7b90f02
parentInitial commit. (diff)
downloadbabl-b550f8da713fafbcc6373af65d7ab0f46b7f26c8.zip
babl-b550f8da713fafbcc6373af65d7ab0f46b7f26c8.tar.xz
Adding upstream version 0.1.22.upstream/0.1.22
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
-rw-r--r--AUTHORS74
-rw-r--r--COPYING165
-rw-r--r--INSTALL21
-rw-r--r--INSTALL.in21
-rw-r--r--Makefile.am53
-rw-r--r--Makefile.in940
-rw-r--r--NEWS116
-rw-r--r--README2072
-rw-r--r--TODO10
-rw-r--r--acinclude.m482
-rw-r--r--aclocal.m41194
-rwxr-xr-xautogen.sh27
-rw-r--r--babl.pc.in11
-rw-r--r--babl/Makefile.am127
-rw-r--r--babl/Makefile.in988
-rw-r--r--babl/babl-cache.c348
-rw-r--r--babl/babl-class.h56
-rw-r--r--babl/babl-classes.h91
-rw-r--r--babl/babl-component.c145
-rw-r--r--babl/babl-component.h36
-rw-r--r--babl/babl-conversion.c551
-rw-r--r--babl/babl-conversion.h55
-rw-r--r--babl/babl-core.c158
-rw-r--r--babl/babl-cpuaccel.c520
-rw-r--r--babl/babl-cpuaccel.h49
-rw-r--r--babl/babl-db.c165
-rw-r--r--babl/babl-db.h76
-rw-r--r--babl/babl-extension.c373
-rw-r--r--babl/babl-extension.h40
-rw-r--r--babl/babl-fish-path.c713
-rw-r--r--babl/babl-fish-reference.c529
-rw-r--r--babl/babl-fish-simple.c67
-rw-r--r--babl/babl-fish.c266
-rw-r--r--babl/babl-fish.h90
-rw-r--r--babl/babl-format.c654
-rw-r--r--babl/babl-format.h47
-rw-r--r--babl/babl-hash-table.c231
-rw-r--r--babl/babl-hash-table.h68
-rw-r--r--babl/babl-ids.h121
-rw-r--r--babl/babl-image.c240
-rw-r--r--babl/babl-image.h61
-rw-r--r--babl/babl-internal.c110
-rw-r--r--babl/babl-internal.h324
-rw-r--r--babl/babl-introspect.c231
-rw-r--r--babl/babl-introspect.h26
-rw-r--r--babl/babl-list.c131
-rw-r--r--babl/babl-list.h64
-rw-r--r--babl/babl-macros.h33
-rw-r--r--babl/babl-memory.c367
-rw-r--r--babl/babl-memory.h49
-rw-r--r--babl/babl-model.c352
-rw-r--r--babl/babl-model.h35
-rw-r--r--babl/babl-mutex.c87
-rw-r--r--babl/babl-mutex.h40
-rw-r--r--babl/babl-palette.c627
-rw-r--r--babl/babl-ref-pixels.c81
-rw-r--r--babl/babl-ref-pixels.h34
-rw-r--r--babl/babl-ref-pixels.inc4140
-rw-r--r--babl/babl-sampling.c81
-rw-r--r--babl/babl-sampling.h35
-rw-r--r--babl/babl-sanity.c137
-rw-r--r--babl/babl-type.c241
-rw-r--r--babl/babl-type.h50
-rw-r--r--babl/babl-types.h54
-rw-r--r--babl/babl-util.c101
-rw-r--r--babl/babl-util.h29
-rw-r--r--babl/babl-version.c36
-rw-r--r--babl/babl-version.h44
-rw-r--r--babl/babl-version.h.in44
-rw-r--r--babl/babl.c179
-rw-r--r--babl/babl.h329
-rw-r--r--babl/base/Makefile.am29
-rw-r--r--babl/base/Makefile.in657
-rw-r--r--babl/base/babl-base.c74
-rw-r--r--babl/base/babl-base.h38
-rw-r--r--babl/base/formats.c338
-rw-r--r--babl/base/model-gray.c699
-rw-r--r--babl/base/model-rgb.c690
-rw-r--r--babl/base/model-ycbcr.c306
-rw-r--r--babl/base/pow-24.c128
-rw-r--r--babl/base/pow-24.h137
-rw-r--r--babl/base/rgb-constants.h32
-rw-r--r--babl/base/type-float.c82
-rw-r--r--babl/base/type-half.c240
-rw-r--r--babl/base/type-u15.c136
-rw-r--r--babl/base/type-u16.c135
-rw-r--r--babl/base/type-u32.c134
-rw-r--r--babl/base/type-u8.c179
-rw-r--r--babl/base/util.h108
-rw-r--r--babl/gettimeofday.c69
-rwxr-xr-xcompile347
-rwxr-xr-xconfig.guess1454
-rw-r--r--config.h.in127
-rwxr-xr-xconfig.sub1815
-rwxr-xr-xconfigure16622
-rw-r--r--configure.ac539
-rwxr-xr-xdepcomp791
-rw-r--r--docs/COPYING674
-rw-r--r--docs/COPYING.LESSER165
-rw-r--r--docs/Makefile.am74
-rw-r--r--docs/Makefile.in729
-rw-r--r--docs/babl.css316
-rw-r--r--docs/graphics/Makefile.am55
-rw-r--r--docs/graphics/Makefile.in522
-rw-r--r--docs/graphics/babl-16x16.pngbin0 -> 508 bytes
-rw-r--r--docs/graphics/babl-16x16.svg524
-rw-r--r--docs/graphics/babl-48x48.pngbin0 -> 1894 bytes
-rw-r--r--docs/graphics/babl-48x48.svg695
-rw-r--r--docs/graphics/babl-a4poster.pngbin0 -> 34824 bytes
-rw-r--r--docs/graphics/babl-a4poster.svg8107
-rw-r--r--docs/graphics/index.html56
-rw-r--r--docs/index-static.html.in397
-rwxr-xr-xdocs/tools/changelog2rss117
-rwxr-xr-xdocs/tools/xml_insert.sh103
-rw-r--r--extensions/CIE.c1238
-rw-r--r--extensions/HSL.c287
-rw-r--r--extensions/HSV.c357
-rw-r--r--extensions/Makefile.am73
-rw-r--r--extensions/Makefile.in963
-rw-r--r--extensions/cairo.c224
-rw-r--r--extensions/fast-float.c704
-rw-r--r--extensions/float-half.c356
-rw-r--r--extensions/float.c230
-rw-r--r--extensions/gegl-fixups.c561
-rw-r--r--extensions/gggl-lies.c878
-rw-r--r--extensions/gggl-table-lies.c479
-rw-r--r--extensions/gggl-table.c528
-rw-r--r--extensions/gggl.c1121
-rw-r--r--extensions/gimp-8bit.c508
-rw-r--r--extensions/grey.c137
-rw-r--r--extensions/naive-CMYK.c274
-rw-r--r--extensions/simple.c164
-rw-r--r--extensions/sse-half.c270
-rw-r--r--extensions/sse2-float.c678
-rw-r--r--extensions/sse2-int16.c214
-rw-r--r--extensions/sse2-int8.c280
-rw-r--r--extensions/sse4-int8.c218
-rw-r--r--extensions/two-table-tables.h3444
-rw-r--r--extensions/two-table.c270
-rw-r--r--extensions/util.h56
-rw-r--r--extensions/ycbcr.c258
-rwxr-xr-xinstall-sh508
-rw-r--r--ltmain.sh11156
-rw-r--r--m4/libtool.m48387
-rw-r--r--m4/ltoptions.m4437
-rw-r--r--m4/ltsugar.m4124
-rw-r--r--m4/ltversion.m423
-rw-r--r--m4/lt~obsolete.m499
-rwxr-xr-xmissing215
-rwxr-xr-xtest-driver148
-rw-r--r--tests/Makefile.am48
-rw-r--r--tests/Makefile.in1420
-rw-r--r--tests/babl-html-dump.c220
-rw-r--r--tests/babl_class_name.c74
-rw-r--r--tests/babl_fish_path_fitness.c147
-rw-r--r--tests/cairo-RGB24.c95
-rw-r--r--tests/common.inc27
-rw-r--r--tests/concurrency-stress-test.c82
-rw-r--r--tests/conversions.c37
-rw-r--r--tests/extract.c48
-rw-r--r--tests/float-to-8bit.c102
-rw-r--r--tests/floatclamp.c46
-rw-r--r--tests/formats.c27
-rw-r--r--tests/grayscale_to_rgb.c86
-rw-r--r--tests/hsl.c111
-rw-r--r--tests/hsva.c116
-rw-r--r--tests/introspect.c30
-rw-r--r--tests/models.c34
-rw-r--r--tests/n_components.c116
-rw-r--r--tests/n_components_cast.c97
-rw-r--r--tests/nop.c29
-rw-r--r--tests/palette.c152
-rw-r--r--tests/rgb_to_bgr.c90
-rw-r--r--tests/rgb_to_ycbcr.c97
-rw-r--r--tests/sanity.c31
-rw-r--r--tests/srgb_to_lab_u8.c77
-rw-r--r--tests/types.c28
-rw-r--r--tools/Makefile.am10
-rw-r--r--tools/Makefile.in638
-rw-r--r--tools/babl-gen-test-pixels.c172
-rw-r--r--tools/babl-verify.c19
181 files changed, 98355 insertions, 0 deletions
diff --git a/AUTHORS b/AUTHORS
new file mode 100644
index 0000000..ae2fec2
--- /dev/null
+++ b/AUTHORS
@@ -0,0 +1,74 @@
+<dl>
+ <dt>Øyvind Kolås <em>pippin at gimp.org</em></dt>
+ <dd>Original author.</dd>
+ <dt>Sven Neumann <em>sven at gimp.org</em></dt>
+ <dd>Build sanity and optimizations.</dd>
+ <dt>Michael Natterer <em>mitch at gimp.org</em></dt>
+ <dd>Build sanity.</dd>
+ <dt>Kevin Cozens <em>kcozens at cvs.gnome.org</em></dt>
+ <dd>Build sanity.</dd>
+ <dt>Tim Mooney</dt>
+ <dd>Portability fixes.</dd>
+ <dt>Michael Schumacher <em>schumaml at cvs.gnome.org</em></dt>
+ <dd>win32 support for dynamic extensions.</dd>
+ <dd>Portability fixes.</dd>
+ <dt>Jan Heller <em>jheller at svn.gnome.org</em></dt>
+ <dd>Optimizations, refactoring and documentation.</dd>
+ <dt>Mukund Sivaraman <em>muks at mukund.org</em></dt>
+ <dd><em>Sparse</em> fixes and sanity.</dd>
+ <dt><em>dmacks at netspace.org</em></dt>
+ <dd>Build sanity</dd>
+ <dt>Sam Hocevar</dt>
+ <dd>Build sanity.</dd>
+ <dt>Zhang Junbo</dt>
+ <dd>Frequency domain color model.</dd>
+ <dt>Martin Nordholts</dt>
+ <dd>Optimizations and API overhaul.</dd>
+ <dt>Gary V. Vaughan</dt>
+ <dd>Multiplatform build support.</dd>
+ <dt>Stanislav Brabec</dt>
+ <dd>Portability patch.</dd>
+ <dt>Hubert Figuiere</dt>
+ <dd>C++ friendliness patch.</dd>
+ <dt>Danny Robson</dt>
+ <dd>Code cleanups.</dd>
+ <dt>Fryderyk Dziarmagowski <em>freetz at gmx.net</em></dt>
+ <dd>Code cleanups.</dd>
+ <dt>Daniel Paredes García <em>danipga at gmail.com</em></dt>
+ <dd>Initial work to make babl threadsafe</dd>
+ <dt>Rupert Weber <em>gimp at leguanease.org</em></dt>
+ <dd>Documentation and other improvements</dd>
+ <dt>Jehan <em>jehan at girinstud.io</em></dt>
+ <dd>win32 portabilitiy</dd>
+ <dt>Sven Claussner</dt>
+ <dd>Update DOAP file</dd>
+ <dt>Alexander Larsson</dt>
+ <dd>Math optimizations</dd>
+ <dt>Nils Philippsen</dt>
+ <dd>code cleanups</dd>
+ <dt>Simon Budig</dt>
+ <dd>cleanups</dd>
+
+ <dt>Micheal Muré</dd>
+ <dd>portability fixes</dd>
+
+ <dt>Maxime Nicco</dt>
+ <dl>HSV color model extension</dl>
+ <dt>Teo Mazars</dt>
+ <dd>Color spaces/models in extensions</dd>
+ <dt>Daniel Sabo</dt>
+ <dd>Dead code elimination, general cleanups, </dd>
+ <dt>Michael Henning</dt>
+ <dd>Conversion fixes</dd>
+ <dt>Elle Stone</dt>
+ <dd>Verification and improvements to accuracy of color space
+ conversions.</dd>
+ <dt>Thomas Manni</dt>
+ <dd>CIE related fixups</dd?
+ <dt>Roman Lebedev</dt>
+ <dd>Stability/crasher fixes</dd>
+ <dt>Jon Nordby</dt>
+ <dd>Portability, Stability and more</dd>
+ <dt>Massimo Valentini</dt>
+ <dd>stability fixes</dd>
+</dl>
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. <http://fsf.org/>
+ 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..c937773
--- /dev/null
+++ b/INSTALL
@@ -0,0 +1,21 @@
+
+babl 0.1.22
+
+ 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.22.tar.bz2
+ foo$ tar jxf babl-0.1.22.tar.gz
+ foo$ cd babl-0.1.22
+ foo/babl-0.1.22$ ./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..98b34ed
--- /dev/null
+++ b/Makefile.in
@@ -0,0 +1,940 @@
+# 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 \
+ INSTALL NEWS README TODO compile config.guess config.sub \
+ depcomp 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@
+runstatedir = @runstatedir@
+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..a885050
--- /dev/null
+++ b/NEWS
@@ -0,0 +1,116 @@
+ <dl><dt><!--
+The NEWS file in the babl source tree is the source location for
+the news section both in the README and the webpage.
+
+
+ -->
+2016-11-05 babl-0.1.22 </dt><dd>
+Added cache of profiled conversions, added HCY color model, some precision and
+performance updated for fast paths.
+ </dd><dt>
+2016-11-05 babl-0.1.20 </dt><dd>
+Fix run-time errors, leaks, and race conditions. Add conditional fast paths.
+ </dd><dt>
+2016-06-13 babl-0.1.18 </dt><dd>
+Bugfix: take alpha threshold in consideration when processing floats in SSE2.
+ </dd><dt>
+2016-02-12 babl-0.1.16 </dt><dd>
+Improvements to half float reference, SIMD, and fast-paths, and CIE float fast
+paths; cleanups of fast path extensions.
+ </dd><dt>
+2015-11-19 babl-0.1.14 </dt><dd>
+sRGB precision tuning, stability fixes, locale fix for setting error tolerance.
+ </dd><dt>
+2015-02-03 babl-0.1.12 </dt><dd>
+optimizations for floating point conversions, HSV and HSL color models,
+removal of dead code, fixed CIE Lab conversions.
+ </dd><dt>
+2012-03-30 babl-0.1.10 </dt><dd>
+LUT based speedups for gamma correction / uncorrection.
+ </dd><dt>
+2012-03-30 babl-0.1.8 </dt><dd>
+Added support for indexed/pallette based formats, constified API.
+ </dd><dt>
+2011-11-18 babl-0.1.6 </dt><dd>
+Build improvements, remove blatantly wrong conversions from extensions,
+made it possible to distinguish format_n formats from others, improvements
+to vala/gobject introspection support.
+
+ </dd><dt>
+2011-01-20 babl-0.1.4 </dt><dd>
+Improved cross platform build ability, added code to handle n-component formats,
+remove extraenous runtime profiling that impacted performance.
+
+ </dd><dt>
+2010-01-15 babl-0.1.2 </dt><dd>
+Made babl mostly threadsafe (sufficient for GIMP/GEGLs needs). Streamlined core functionality, reducing number of function calls and removing overeager instrumentation.
+ </dd><dt>
+2009-05-20 babl-0.1.0 </dt><dd>
+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.
+ </dd><dt>
+2008-06-12 babl-0.0.22 </dt><dd>
+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.
+ </dd><dt>
+2008-02-27 babl-0.0.20 </dt><dd>
+Builds on OSX
+Check <0.0 and >1.0 values conversions for accuracy as well.
+
+ </dd></dl>
+
+<!--
+ </dd><dt>
+2007-12-30 babl-0.0.18 </dt><dd>
+Constified use of babl formats.
+
+ </dd><dt>
+2007-11-25 babl-0.0.16 </dt><dd>
+Reduced constant overhead for linear conversions.
+Misc build environment cleanups.
+
+ </dd><dt>
+2007-01-07 babl-0.0.14 </dt><dd>
+Cache values parsed from BABL_foo environment variables.
+ </dd><dt>
+2007-01-07 babl-0.0.12 </dt><dd>
+Speedups for GEGL
+Build environment fixes.
+ </dd><dt>
+2006-xx-xx babl-0.0.10 </dt><dd>
+Build environment fixes.
+
+ </dd><dt>
+2006-12-29 babl-0.0.8 </dt><dd>
+Made code adhere more strictly to C standard.
+Set the BABL_PATH based on build prefix
+
+ </dd><dt>
+2006-10-09 babl-0.0.6 </dt><dd>
+Build environment fixes.
+Fixed timing code for picking correct conversions.
+
+ </dd><dt>
+2006-08-31 babl-0.0.4 </dt><dd>
+Build environment fixes
+Reduced used/exposed API.
+Added GEGL speedup extension.
+ </dd><dt>
+2005-0x-xx babl-0.0.2 <em>Green fish release</em> </dt><dd>
+
+Initial release.
+
+ </dd><dt>
+2005-08-xx babl-0.0.1 </dt><dd>
+
+Development release of babl, minimal working configuration for
+RGB, CMYK and YCbCr for 8bit 16bit float and double. Emphasis is on
+precision and clarity of code not speed.
+
+ </dd></dl>
+
+-->
diff --git a/README b/README
new file mode 100644
index 0000000..dd22fe7
--- /dev/null
+++ b/README
@@ -0,0 +1,2072 @@
+Babl-0.1.22
+
+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-11-05 babl-0.1.22
+ Added cache of profiled conversions, added HCY color model, some
+ precision and performance updated for fast paths.
+2016-11-05 babl-0.1.20
+ Fix run-time errors, leaks, and race conditions. Add conditional
+ fast paths.
+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
+
+HSVA
+
+components
+
+ hue
+ saturation
+ value
+ alpha
+
+HSV
+
+components
+
+ hue
+ saturation
+ value
+
+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
+
+HSLA
+
+components
+
+ hue
+ saturation
+ lightness
+ alpha
+
+HSL
+
+components
+
+ hue
+ saturation
+ lightness
+
+Y'CbCr709
+
+components
+
+ Y'
+ Cb
+ Cr
+
+Y'CbCrA709
+
+components
+
+ Y'
+ Cb
+ Cr
+ alpha
+
+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
+
+cairo-RGB24
+
+bytes/pixel
+ 4
+model
+ R'G'B'
+components
+
+ u8 B'
+ u8 G'
+ u8 R'
+ u8 PAD
+
+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
+
+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
+
+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
+
+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
+
+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
+
+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
+
+cairo-ARGB32
+
+bytes/pixel
+ 4
+model
+ R'aG'aB'aA
+components
+
+ u8 B'a
+ u8 G'a
+ u8 R'a
+ u8 A
+
+cairo-A8
+
+bytes/pixel
+ 1
+model
+ YA
+components
+
+ u8 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.
+
+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.
+ • dynamic data attached to format, or internal handling of icc
+ through a registered set of profiles
+ • handling of custom RGB primaries and gamma
+ • dithering
+
+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.22
diff --git a/TODO b/TODO
new file mode 100644
index 0000000..6707b94
--- /dev/null
+++ b/TODO
@@ -0,0 +1,10 @@
+<h2>TODO</h2>
+
+<ul>
+ <li>Support for conversions between formats that have higher dimensionality than RGBA. (arbitrary meaningless components)</li>
+ <li>Support for datatypes that are not a multiple of 8bit.</li>
+ <li>dynamic data attached to format, or internal handling of icc through
+ a registered set of profiles</li>
+ <li>handling of custom RGB primaries and gamma</li>
+ <li>dithering</li>
+</ul>
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:
+# <http://lists.gnu.org/archive/html/automake/2012-07/msg00001.html>
+# <http://lists.gnu.org/archive/html/automake/2012-07/msg00014.html>
+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: <http://austingroupbugs.net/view.php?id=542>
+
+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: <http://www.gnu.org/software/coreutils/>.
+
+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 <conftest.tar])
+ AM_RUN_LOG([cat conftest.dir/file])
+ grep GrepMe conftest.dir/file >/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..096f6b7
--- /dev/null
+++ b/babl/Makefile.am
@@ -0,0 +1,127 @@
+## Source directory
+
+if PLATFORM_WIN32
+no_undefined = -no-undefined
+endif
+
+SUBDIRS = base
+
+c_sources = \
+ babl.c \
+ babl-cache.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.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
+
+
+# If git is available, always check if git-version.h should be
+# updated. If git is not available, don't do anything if git-version.h
+# already exists because then we are probably working with a tarball
+# in which case the git-version.h we ship is correct.
+
+libbabl_generated_sources = git-version.h
+BUILT_SOURCES = git-version.h
+CLEANFILES = git-version.h
+
+git-version.h: update-git-version-header
+ @if test -d "$(top_srcdir)/.git"; then \
+ git_version="`git --git-dir=$(top_srcdir)/.git describe --always`"; \
+ git_last_commit_year="`git --git-dir=$(top_srcdir)/.git log -n1 --reverse --pretty=%ci | cut -b 1-4`"; \
+ elif test ! -f "$@"; then \
+ git_version="Unknown, shouldn't happen"; \
+ git_last_commit_timestamp=-1; \
+ git_last_commit_year="`date -u '+%Y'`"; \
+ fi; \
+ if test -n "$$git_version"; then \
+ echo "#ifndef __GIT_VERSION_H__" > "$@.tmp"; \
+ echo "#define __GIT_VERSION_H__" >> "$@.tmp"; \
+ echo "#define BABL_GIT_VERSION \"$$git_version\"" >> "$@.tmp"; \
+ echo "#define BABL_GIT_LAST_COMMIT_YEAR \"$$git_last_commit_year\"" >> "$@.tmp"; \
+ echo "#endif /* __GIT_VERSION_H__ */" >> "$@.tmp"; \
+ fi
+ @if ( test -f "$@.tmp" && test -f "$@" && cmp "$@.tmp" "$@" > /dev/null ); then \
+ rm -f "$@.tmp"; \
+ elif test -f "$@.tmp"; then \
+ mv "$@.tmp" "$@"; \
+ echo " git HEAD changed: $@ regenerated"; \
+ fi
+
+.PHONY: update-git-version-header
diff --git a/babl/Makefile.in b/babl/Makefile.in
new file mode 100644
index 0000000..1061d9b
--- /dev/null
+++ b/babl/Makefile.in
@@ -0,0 +1,988 @@
+# 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-cache.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.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@
+runstatedir = @runstatedir@
+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-cache.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.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
+
+# If git is available, always check if git-version.h should be
+# updated. If git is not available, don't do anything if git-version.h
+# already exists because then we are probably working with a tarball
+# in which case the git-version.h we ship is correct.
+libbabl_generated_sources = git-version.h
+BUILT_SOURCES = git-version.h
+CLEANFILES = git-version.h
+all: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) 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-cache.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.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: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) 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: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) 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)
+
+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 "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
+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) all check install 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
+
+
+git-version.h: update-git-version-header
+ @if test -d "$(top_srcdir)/.git"; then \
+ git_version="`git --git-dir=$(top_srcdir)/.git describe --always`"; \
+ git_last_commit_year="`git --git-dir=$(top_srcdir)/.git log -n1 --reverse --pretty=%ci | cut -b 1-4`"; \
+ elif test ! -f "$@"; then \
+ git_version="Unknown, shouldn't happen"; \
+ git_last_commit_timestamp=-1; \
+ git_last_commit_year="`date -u '+%Y'`"; \
+ fi; \
+ if test -n "$$git_version"; then \
+ echo "#ifndef __GIT_VERSION_H__" > "$@.tmp"; \
+ echo "#define __GIT_VERSION_H__" >> "$@.tmp"; \
+ echo "#define BABL_GIT_VERSION \"$$git_version\"" >> "$@.tmp"; \
+ echo "#define BABL_GIT_LAST_COMMIT_YEAR \"$$git_last_commit_year\"" >> "$@.tmp"; \
+ echo "#endif /* __GIT_VERSION_H__ */" >> "$@.tmp"; \
+ fi
+ @if ( test -f "$@.tmp" && test -f "$@" && cmp "$@.tmp" "$@" > /dev/null ); then \
+ rm -f "$@.tmp"; \
+ elif test -f "$@.tmp"; then \
+ mv "$@.tmp" "$@"; \
+ echo " git HEAD changed: $@ regenerated"; \
+ fi
+
+.PHONY: update-git-version-header
+
+# 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-cache.c b/babl/babl-cache.c
new file mode 100644
index 0000000..1f0b6f5
--- /dev/null
+++ b/babl/babl-cache.c
@@ -0,0 +1,348 @@
+/* babl - dynamically extendable universal pixel conversion library.
+ * Copyright (C) 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
+ * <http://www.gnu.org/licenses/>.
+ */
+
+#include <time.h>
+#include <sys/stat.h>
+#include "config.h"
+#include "babl-internal.h"
+#include "git-version.h"
+
+#ifdef _WIN32
+#define FALLBACK_CACHE_PATH "C:/babl-fishes.txt"
+#else
+#define FALLBACK_CACHE_PATH "/tmp/babl-fishes.txt"
+#endif
+
+static int
+mk_ancestry_iter (const char *path)
+{
+ char copy[4096];
+ strncpy (copy, path, 4096);
+ if (strrchr (copy, '/'))
+ {
+ *strrchr (copy, '/') = '\0';
+ if (copy[0])
+ {
+ struct stat stat_buf;
+ if ( ! (stat (copy, &stat_buf)==0 && S_ISDIR(stat_buf.st_mode)))
+ {
+ if (mk_ancestry_iter (copy) != 0)
+ return -1;
+#ifndef _WIN32
+ return mkdir (copy, S_IRWXU);
+#else
+ return mkdir (copy);
+#endif
+ }
+ }
+ }
+ return -1;
+}
+
+static int
+mk_ancestry (const char *path)
+{
+ char copy[4096];
+ strncpy (copy, path, 4096);
+#ifdef _WIN32
+ for (char *c = copy; *c; c++)
+ if (*c == '\\')
+ *c = '/';
+#endif
+ return mk_ancestry_iter (copy);
+}
+
+static const char *fish_cache_path (void)
+{
+ struct stat stat_buf;
+ static char path[4096];
+
+ strncpy (path, FALLBACK_CACHE_PATH, 4096);
+#ifndef _WIN32
+ if (getenv ("HOME"))
+ sprintf (path, "%s/.cache/babl/babl-fishes", getenv("HOME"));
+#else
+ if (getenv ("TEMP"))
+ sprintf (path, "%s\\babl-fishes.txt", getenv("TEMP"));
+#endif
+
+ if (stat (path, &stat_buf)==0 && S_ISREG(stat_buf.st_mode))
+ return path;
+
+ if (mk_ancestry (path) != 0)
+ return FALLBACK_CACHE_PATH;
+
+ return path;
+}
+
+static char *
+babl_fish_serialize (Babl *fish, char *dest, int n)
+{
+ char *d = dest;
+ if (fish->class_type != BABL_FISH_PATH)
+ return NULL;
+
+ snprintf (d, n, "%s\n%s\n",
+ babl_get_name (fish->fish.source),
+ babl_get_name (fish->fish.destination));
+ n -= strlen (d);d += strlen (d);
+
+ snprintf (d, n, "\tpixels=%li", fish->fish.pixels);
+ n -= strlen (d);d += strlen (d);
+
+ snprintf (d, n, " processings=%i", fish->fish.processings);
+ n -= strlen (d);d += strlen (d);
+
+ snprintf (d, n, " cost=%d", (int)fish->fish_path.cost);
+ n -= strlen (d);d += strlen (d);
+
+ snprintf (d, n, " error=%f", fish->fish.error);
+ n -= strlen (d);d += strlen (d);
+
+ snprintf (d, n, "\n");
+ n -= strlen (d);d += strlen (d);
+
+ for (int i = 0; i < fish->fish_path.conversion_list->count; i++)
+ {
+ snprintf (d, n, "\t%s\n",
+ babl_get_name(fish->fish_path.conversion_list->items[i] ));
+ n -= strlen (d);d += strlen (d);
+ }
+
+ return dest;
+}
+
+static int compare_fish_pixels (const void *a, const void *b)
+{
+ const Babl **fa = (void*)a;
+ const Babl **fb = (void*)b;
+ return ((*fb)->fish.pixels - (*fa)->fish.pixels) +
+ ((*fb)->fish.processings - (*fa)->fish.processings);
+}
+
+void babl_store_db (void)
+{
+ BablDb *db = babl_fish_db ();
+ int i;
+ FILE *dbfile = fopen (fish_cache_path (), "w");
+ if (!dbfile)
+ return;
+ fprintf (dbfile, "#%s BABL_PATH_LENGTH=%d BABL_TOLERANCE=%f\n",
+ BABL_GIT_VERSION, _babl_max_path_len (), _babl_legal_error ());
+
+ /* sort the list of fishes by usage, making next run more efficient -
+ * and the data easier to approach as data for targeted optimization
+ */
+ qsort (db->babl_list->items, db->babl_list->count,
+ sizeof (Babl*), compare_fish_pixels);
+
+ for (i = 0; i< db->babl_list->count; i++)
+ {
+ Babl *fish = db->babl_list->items[i];
+ char tmp[8192];
+ if (babl_fish_serialize (fish, tmp, 4096))
+ fprintf (dbfile, "%s----\n", tmp);
+ }
+ fclose (dbfile);
+}
+
+static int
+babl_file_get_contents (const char *path,
+ char **contents,
+ long *length,
+ void *error)
+{
+ FILE *file;
+ long size;
+ char *buffer;
+
+ file = fopen (path,"rb");
+
+ if (!file)
+ return -1;
+
+ fseek (file, 0, SEEK_END);
+ size = ftell (file);
+ if (length) *length = size;
+ rewind (file);
+ buffer = malloc(size + 8);
+
+ if (!buffer)
+ {
+ fclose(file);
+ return -1;
+ }
+
+ size -= fread (buffer, 1, size, file);
+ if (size)
+ {
+ fclose (file);
+ free (buffer);
+ return -1;
+ }
+ fclose (file);
+ *contents = buffer;
+ return 0;
+}
+
+int
+_babl_fish_path_destroy (void *data);
+
+char *
+_babl_fish_create_name (char *buf,
+ const Babl *source,
+ const Babl *destination,
+ int is_reference);
+
+void babl_init_db (void)
+{
+ const char *path = fish_cache_path ();
+ long length = -1;
+ char seps[] = "\n\r";
+ Babl *babl = NULL;
+ char *contents = NULL;
+ char *token;
+ char *tokp;
+ const Babl *from_format = NULL;
+ const Babl *to_format = NULL;
+ time_t tim = time (NULL);
+
+ if (getenv ("BABL_DEBUG_CONVERSIONS"))
+ return;
+
+ babl_file_get_contents (path, &contents, &length, NULL);
+ if (!contents)
+ return;
+
+ token = strtok_r (contents, seps, &tokp);
+ while( token != NULL )
+ {
+ switch (token[0])
+ {
+ case '-': /* finalize */
+ if (babl)
+ {
+ if (((babl->fish.pixels + babl->fish.processings) % 100) == (tim % 100))
+ {
+ /* 1% chance of individual cached conversions being dropped -
+ * making sure mis-measured conversions do not
+ stick around for a long time*/
+ babl_free (babl);
+ }
+ else
+ babl_db_insert (babl_fish_db(), babl);
+ }
+ from_format = NULL;
+ to_format = NULL;
+ babl=NULL;
+ break;
+ case '#':
+ /* if babl has changed in git .. drop whole cache */
+ {
+ char buf[2048];
+ sprintf (buf, "#%s BABL_PATH_LENGTH=%d BABL_TOLERANCE=%f",
+ BABL_GIT_VERSION, _babl_max_path_len (), _babl_legal_error ());
+ if (strcmp ( token, buf))
+ {
+ free (contents);
+ return;
+ }
+ }
+ break;
+ case '\t':
+ if (strchr (token, '='))
+ {
+ char seps2[] = " ";
+ char *tokp2;
+ char *token2;
+ char name[4096];
+
+ _babl_fish_create_name (name, from_format, to_format, 1);
+ babl = babl_db_exist_by_name (babl_fish_db (), name);
+ if (babl)
+ {
+ fprintf (stderr, "%s:%i: loading of cache failed\n",
+ __FUNCTION__, __LINE__);
+ return;
+ }
+
+ 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 (from_format, to_format);
+ babl->instance.name = ((char *) babl) + sizeof (BablFishPath);
+ strcpy (babl->instance.name, name);
+ babl->fish.source = from_format;
+ babl->fish.destination = to_format;
+ babl->fish_path.conversion_list = babl_list_init_with_size (10);
+
+ token2 = strtok_r (&token[1], seps2, &tokp2);
+ while( token2 != NULL )
+ {
+ if (!strncmp (token2, "error=", 6))
+ {
+ babl->fish.error = babl_parse_double (token2 + 6);
+ }
+ else if (!strncmp (token2, "cost=", 5))
+ {
+ babl->fish_path.cost = babl_parse_double (token2 + 5);
+ }
+ else if (!strncmp (token2, "pixels=", 7))
+ {
+ babl->fish.pixels = strtol (token2 + 7, NULL, 10);
+ }
+ else if (!strncmp (token2, "processings=", 12))
+ {
+ babl->fish.processings = strtol (token2 + 12, NULL, 10);
+ }
+ token2 = strtok_r (NULL, seps2, &tokp2);
+ }
+ }
+ else
+ {
+ Babl *conv = (void*)babl_db_find(babl_conversion_db(), &token[1]);
+ if (!conv)
+ {
+ return;
+ }
+ else
+ babl_list_insert_last (babl->fish_path.conversion_list, conv);
+ }
+ break;
+ default:
+ if (!from_format)
+ {
+ from_format = (void*)babl_db_find(babl_format_db(), token);
+ if (!from_format)
+ return;
+ }
+ else
+ {
+ to_format = (void*)babl_db_find(babl_format_db(), token);
+ if (!to_format)
+ return;
+ }
+ break;
+ }
+ token = strtok_r (NULL, seps, &tokp);
+ }
+ if (contents)
+ free (contents);
+}
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
+ * <http://www.gnu.org/licenses/>.
+ */
+
+#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
+ * <http://www.gnu.org/licenses/>.
+ */
+
+#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
+ * <http://www.gnu.org/licenses/>.
+ */
+
+#include "config.h"
+#define NEEDS_BABL_DB
+#include "babl-internal.h"
+#include "babl-db.h"
+#include <string.h>
+
+#include <stdarg.h>
+
+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
+ * <http://www.gnu.org/licenses/>.
+ */
+
+#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..dbdce50
--- /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
+ * <http://www.gnu.org/licenses/>.
+ */
+
+
+#include "config.h"
+#include <string.h>
+#include <stdarg.h>
+#include <math.h>
+#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 = ticks_end - ticks_start;
+
+ 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
+ * <http://www.gnu.org/licenses/>.
+ */
+
+#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
+ * <http://www.gnu.org/licenses/>.
+ */
+
+#include "config.h"
+#include <string.h>
+#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<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 n;
+ }
+
+
+ */
+static long
+rgba_to_rgba (char *src,
+ char *dst,
+ long n)
+{
+ memcpy (dst, src, n * sizeof (double) * 4);
+ return n;
+}
+void
+babl_core_init (void)
+{
+ babl_type_new (
+ "double",
+ "id", BABL_DOUBLE,
+ "bits", 64,
+ NULL);
+
+ babl_component_new (
+ "R",
+ "id", BABL_RED,
+ "luma",
+ "chroma",
+ NULL);
+
+ babl_component_new (
+ "G",
+ "id", BABL_GREEN,
+ "luma",
+ "chroma",
+ NULL);
+
+ babl_component_new (
+ "B",
+ "id", BABL_BLUE,
+ "luma",
+ "chroma",
+ NULL);
+
+ babl_component_new (
+ "A",
+ "id", BABL_ALPHA,
+ "alpha",
+ NULL);
+
+ babl_component_new (
+ "PAD",
+ "id", BABL_PADDING,
+ NULL);
+
+ babl_model_new (
+ "id", BABL_RGBA,
+ 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_conversion_new (
+ babl_model_from_id (BABL_RGBA),
+ babl_model_from_id (BABL_RGBA),
+ "planar", copy_strip_1,
+ NULL
+ );
+ */
+
+ babl_conversion_new (
+ babl_type_from_id (BABL_DOUBLE),
+ babl_type_from_id (BABL_DOUBLE),
+ "plane", convert_double_double,
+ NULL
+ );
+
+ babl_conversion_new (
+ babl_model_from_id (BABL_RGBA),
+ babl_model_from_id (BABL_RGBA),
+ "linear", rgba_to_rgba,
+ NULL
+ );
+}
diff --git a/babl/babl-cpuaccel.c b/babl/babl-cpuaccel.c
new file mode 100644
index 0000000..59fdcdd
--- /dev/null
+++ b/babl/babl-cpuaccel.c
@@ -0,0 +1,520 @@
+/* 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
+ * <http://www.gnu.org/licenses/>.
+ */
+
+/*
+ * x86 bits Copyright (C) Manish Singh <yosh@gimp.org>
+ */
+
+/*
+ * 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 <aholtzma@ess.engr.uvic.ca>
+ */
+
+#include "config.h"
+#include <string.h>
+#include <signal.h>
+#include <setjmp.h>
+
+#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 <sys/sysctl.h>
+
+#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
+ * <http://www.gnu.org/licenses/>.
+ */
+
+#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
+ * <http://www.gnu.org/licenses/>.
+ */
+
+/* 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 <string.h>
+#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
+ * <http://www.gnu.org/licenses/>.
+ */
+
+#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..01efe0f
--- /dev/null
+++ b/babl/babl-extension.c
@@ -0,0 +1,373 @@
+/* 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
+ * <http://www.gnu.org/licenses/>.
+ */
+
+#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 <string.h>
+#include <stdarg.h>
+
+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 <dirent.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <unistd.h>
+
+#ifdef HAVE_DLFCN_H
+#ifndef WIN32
+
+#include <dlfcn.h>
+#define HLIB void *
+
+#endif /* WIN32 */
+#elif HAVE_DL_H
+
+
+#include <dl.h>
+#include <errno.h>
+#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 <windows.h>
+#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);
+ if (babl_db_count (db) <= 1)
+ {
+ fprintf (stderr,
+"WARNING: the babl installation seems broken, no extensions found in queried\n"
+"BABL_PATH (%s) this means no SIMD/instructions/special case fast paths and\n"
+"only slow reference conversions are available, applications might still\n"
+"run but software relying on babl for conversions will be slow\n", dir_list);
+ }
+}
+
+#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
+ * <http://www.gnu.org/licenses/>.
+ */
+
+#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..23e7757
--- /dev/null
+++ b/babl/babl-fish-path.c
@@ -0,0 +1,713 @@
+/* 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
+ * <http://www.gnu.org/licenses/>.
+ */
+
+#include "config.h"
+#include <math.h>
+#include "babl-internal.h"
+#include "babl-ref-pixels.h"
+
+#define BABL_TOLERANCE 0.000006
+#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 2048 /* 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);
+
+char *
+_babl_fish_create_name (char *buf,
+ const Babl *source,
+ const Babl *destination,
+ int is_reference);
+
+
+static int max_path_length (void);
+
+static int debug_conversions = 0;
+
+double _babl_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_TOLERANCE;
+
+ env = getenv ("BABL_DEBUG_CONVERSIONS");
+ if (env && env[0] != '\0')
+ debug_conversions = 1;
+ else
+ debug_conversions = 0;
+
+ 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 = 3; /* reducing this number makes finding short fishes much
+ faster - even if we lose out on some of the fast
+ bigger fish
+ */
+ 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;
+}
+
+int _babl_max_path_len (void)
+{
+ return max_path_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 <= _babl_legal_error ())
+ /* check this before the more accurate measurement of error -
+ to bail earlier */
+ {
+ 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(debug_conversions && current_length == 1)
+ fprintf (stderr, "%s error:%f cost:%f \n",
+ babl_get_name (pc->current_path->items[0]),
+ /*babl_get_name (pc->fish_path->fish.source),
+ babl_get_name (pc->fish_path->fish.destination),*/
+ path_error,
+ path_cost /*, current_length*/);
+
+ 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 <= _babl_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;
+ }
+ }
+}
+
+char *
+_babl_fish_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;
+}
+
+int
+_babl_fish_path_destroy (void *data);
+
+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];
+
+ _babl_fish_create_name (name, source, destination, 1);
+ babl_mutex_lock (babl_format_mutex);
+ 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.
+ */
+ babl_mutex_unlock (babl_format_mutex);
+ 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.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;
+
+ /* 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_free (pc.current_path);
+ }
+
+ if (babl_list_size (babl->fish_path.conversion_list) == 0)
+ {
+ babl_free (babl);
+ babl_mutex_unlock (babl_format_mutex);
+ 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);
+ babl_mutex_unlock (babl_format_mutex);
+ 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 <stdint.h>
+
+#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 = ticks_end - ticks_start;
+
+ /* 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 = ticks_end - ticks_start;
+
+ /* 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..00ff6be
--- /dev/null
+++ b/babl/babl-fish-reference.c
@@ -0,0 +1,529 @@
+/* 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
+ * <http://www.gnu.org/licenses/>.
+ */
+
+#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 int
+create_name_internal (char *buf,
+ size_t maxlen,
+ const Babl *source,
+ const Babl *destination,
+ int is_reference)
+{
+ return snprintf (buf, maxlen, "%s %p %p",
+ is_reference ? "ref "
+ : "",
+ source, destination);
+}
+
+#ifdef HAVE_TLS
+
+static __thread char buf[1024];
+
+static char *
+create_name (const Babl *source,
+ const Babl *destination,
+ int is_reference)
+{
+ int size = 0;
+
+ size = create_name_internal (buf, sizeof(buf), source, destination, is_reference);
+
+ if (size < 0)
+ return NULL;
+
+ return buf;
+}
+
+
+#else
+
+static char *
+create_name (const Babl *source,
+ const Babl *destination,
+ int is_reference)
+{
+ int size = 0;
+ char *buf = NULL;
+
+ size = create_name_internal (buf, size, source, destination, is_reference);
+
+ if (size < 0)
+ return NULL;
+
+ size++; /* For '\0' */
+ buf = malloc (size);
+ if (buf == NULL)
+ return NULL;
+
+ size = create_name_internal (buf, size, source, destination, is_reference);
+
+ if (size < 0)
+ {
+ free (buf);
+ return NULL;
+ }
+
+ return buf;
+}
+
+#endif
+
+Babl *
+babl_fish_reference (const Babl *source,
+ const Babl *destination)
+{
+ Babl *babl = NULL;
+ char *name = create_name (source, destination, 1);
+
+ babl_assert (name);
+
+ 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.
+ */
+#ifndef HAVE_TLS
+ free (name);
+#endif
+ 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);
+#ifndef HAVE_TLS
+ free (name);
+#endif
+ 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
+ * <http://www.gnu.org/licenses/>.
+ */
+
+#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.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
+ * <http://www.gnu.org/licenses/>.
+ */
+
+#include "config.h"
+#define NEEDS_BABL_DB
+#include "babl-internal.h"
+#include "babl-db.h"
+#include <stddef.h>
+#include <string.h>
+#include <stdarg.h>
+
+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..54d670a
--- /dev/null
+++ b/babl/babl-fish.h
@@ -0,0 +1,90 @@
+/* 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
+ * <http://www.gnu.org/licenses/>.
+ */
+
+#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 */
+ 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
+ * <http://www.gnu.org/licenses/>.
+ */
+
+#include "config.h"
+#include <string.h>
+#include <stdarg.h>
+#include <math.h>
+
+#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; i<components; i++)
+ {
+ component[i] = model->component[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
+ * <http://www.gnu.org/licenses/>.
+ */
+
+#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
+ * <http://www.gnu.org/licenses/>.
+ */
+
+/* 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
+ * <http://www.gnu.org/licenses/>.
+ */
+
+#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
+ * <http://www.gnu.org/licenses/>.
+ */
+
+#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
+ * <http://www.gnu.org/licenses/>.
+ */
+
+#include "config.h"
+#include <string.h>
+#include <stdarg.h>
+
+#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
+ * <http://www.gnu.org/licenses/>.
+ */
+
+#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
+ * <http://www.gnu.org/licenses/>.
+ */
+
+#include "config.h"
+#include <stdlib.h>
+#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 <sys/types.h>
+#include <unistd.h>
+
+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..228faa5
--- /dev/null
+++ b/babl/babl-internal.h
@@ -0,0 +1,324 @@
+/* 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
+ * <http://www.gnu.org/licenses/>.
+ */
+
+#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 <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <math.h>
+#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);
+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 <stdarg.h>
+
+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;
+}
+
+
+double _babl_legal_error (void);
+void babl_init_db (void);
+void babl_store_db (void);
+int _babl_max_path_len (void);
+
+#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
+ * <http://www.gnu.org/licenses/>.
+ */
+
+#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
+ * <http://www.gnu.org/licenses/>.
+ */
+
+#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
+ * <http://www.gnu.org/licenses/>.
+ */
+
+/* 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
+ * <http://www.gnu.org/licenses/>.
+ */
+
+#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
+ * <http://www.gnu.org/licenses/>.
+ */
+
+#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
+ * <http://www.gnu.org/licenses/>.
+ */
+
+#include "config.h"
+#include <stdint.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#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
+ * <http://www.gnu.org/licenses/>.
+ */
+
+#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
+ * <http://www.gnu.org/licenses/>.
+ */
+
+#include "config.h"
+#include <string.h>
+#include <stdarg.h>
+#include <math.h>
+#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
+ * <http://www.gnu.org/licenses/>.
+ */
+
+#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
+ * <http://www.gnu.org/licenses/>.
+ */
+
+#include "config.h"
+#include "babl-mutex.h"
+
+#include <stdlib.h>
+
+#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
+ * <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef _BABL_MUTEX_H
+#define _BABL_MUTEX_H
+
+#ifndef _WIN32
+#define __GNU_SOURCE 1
+#include <pthread.h>
+#else
+#include <windows.h>
+#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
+ * <http://www.gnu.org/licenses/>.
+ */
+
+#include <stdlib.h>
+#include <string.h>
+#include <stdio.h>
+#include <limits.h>
+#include <assert.h>
+#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; idx<pal->count; 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; idx<pal->count; 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
+ * <http://www.gnu.org/licenses/>.
+ */
+
+#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
+ * <http://www.gnu.org/licenses/>.
+ */
+
+#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
+ * <http://www.gnu.org/licenses/>.
+ */
+
+/* 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, 0